1
1
extern crate pest;
2
2
extern crate pest_derive;
3
3
4
+ use super :: * ;
4
5
use pest:: error:: Error ;
6
+ use pest:: iterators:: Pair ;
5
7
use pest:: Parser ;
6
8
use pest_derive:: Parser ;
7
9
use serde:: { Deserialize , Serialize } ;
8
- use pest:: iterators:: Pair ;
9
-
10
10
11
11
#[ derive( Parser ) ]
12
- #[ grammar = "JavaGrammar .pest" ]
12
+ #[ grammar = "src/parser/ExampleGrammar .pest" ]
13
13
struct ExampleParser ;
14
14
15
15
#[ derive( Debug , Clone , Serialize , Deserialize ) ]
@@ -22,21 +22,20 @@ pub enum Example {
22
22
pub fn parse_Example ( file : & str ) -> Result < Example , Error < Rule > > {
23
23
let example: Pair < Rule > = ExampleParser :: parse ( Rule :: List , file) ?. next ( ) . unwrap ( ) ;
24
24
25
+ Ok ( parse_value ( example) )
26
+ }
25
27
26
- fn parse_value ( pair : Pair < Rule > ) -> Example {
27
- match pair. as_rule ( ) {
28
- Rule :: ID => Example :: ID ( String :: from ( pair. as_str ( ) ) ) ,
29
- Rule :: Name => Name ( pair: Pair <Rule >) ,
30
- Rule :: List => Example :: List ( pair. into_inner ( ) . map ( parse_value) . collect ( ) ) ,
31
- }
28
+ fn parse_value ( pair : Pair < Rule > ) -> Example {
29
+ match pair. as_rule ( ) {
30
+ Rule :: ID => Example :: ID ( String :: from ( pair. as_str ( ) ) ) ,
31
+ Rule :: Name => Name ( pair) ,
32
+ Rule :: List => Example :: List ( pair. into_inner ( ) . map ( parse_value) . collect ( ) ) ,
32
33
}
33
-
34
- Ok ( parse_value ( example) )
35
34
}
36
- pub fn Name ( pair : Pair < Rule > ) -> Example :: Name
37
- {
35
+
36
+ pub fn Name ( pair : Pair < Rule > ) -> Example {
38
37
let mut pairs = pair. into_inner ( ) ;
39
38
let a = parse_value ( pairs. next ( ) . unwrap ( ) ) ;
40
39
let b = parse_value ( pairs. next ( ) . unwrap ( ) ) ;
41
- return Example :: Name ( Box :: new ( a) , Box :: new ( b) )
42
- }
40
+ return Example :: Name ( Box :: new ( a) , Box :: new ( b) ) ;
41
+ }
0 commit comments