@@ -4,20 +4,21 @@ import XCTest
4
4
5
5
class LongTests : XCTestCase {
6
6
func testOr( ) {
7
- XCTAssert ( type ( of: " a " / letter / ascii / punctuation / " b " )
8
- == OrPattern < OrPattern < Literal , OneOf > , Literal > . self,
7
+ let char = letter / ascii / punctuation
8
+ XCTAssert ( type ( of: " a " / char / " b " )
9
+ == OrPattern < OrPattern < Literal < String > , OneOf < String > > , Literal < String > > . self,
9
10
" '/' operator isn't optimizing OneOf's properly. " )
10
11
}
11
12
12
13
func testNot( ) {
13
14
XCTAssert (
14
- type ( of: " a " • !letter • ascii • " b " ) == Concat < Concat < Literal , OneOf > , Literal > . self,
15
+ type ( of: " a " • !letter • ascii • " b " ) == Concat < Concat < Literal < String > , OneOf < String > > , Literal < String > > . self,
15
16
" '•' operator isn't optimizing OneOf's properly. " )
16
17
}
17
18
18
19
func testAnd( ) throws {
19
20
XCTAssert (
20
- type ( of: " a " • && letter • ascii • " b " ) == Concat < Concat < Literal , OneOf > , Literal > . self,
21
+ type ( of: " a " • && letter • ascii • " b " ) == Concat < Concat < Literal < String > , OneOf < String > > , Literal < String > > . self,
21
22
" '•' operator isn't optimizing OneOf's properly. " )
22
23
}
23
24
@@ -50,14 +51,15 @@ class LongTests: XCTestCase {
50
51
}
51
52
52
53
// from http://www.inf.puc-rio.br/~roberto/docs/peg.pdf, page 2 and 5
53
- static let pegGrammar = Grammar { g in
54
+ static let pegGrammar = Grammar< String > { g in
54
55
//g.all <- g.pattern • !any
55
56
g. pattern <- g. grammar / g. simplepatt
56
57
g. grammar <- ( g. nonterminal • " <- " • g. sp • g. simplepatt) +
57
58
g . simplepatt <- g. alternative • ( " / " • g. sp • g. alternative) *
58
59
g . alternative <- ( OneOf ( " !& " ) ¿ • g. sp • g. suffix) +
59
60
g . suffix <- g. primary • ( OneOf ( " *+? " ) • g. sp) *
60
- g. primary <- " ( " • g. sp • g. pattern • " ) " • g. sp / " . " • g. sp / g. literal / g. charclass / g. nonterminal • !" <- "
61
+ let primaryPart1 = " ( " • g. sp • g. pattern • " ) " • g. sp / " . " • g. sp / g. literal
62
+ g. primary <- primaryPart1 / g. charclass / g. nonterminal • !" <- "
61
63
g. literal <- " ’ " • ( !" ’ " • any) * • " ’ " • g. sp
62
64
g. charclass <- " [ " • ( !" ] " • ( any • " - " • any / any) ) * • " ] " • g. sp
63
65
g. nonterminal <- OneOf ( " a " ... " z " , " A " ... " Z " ) + • g. sp
0 commit comments