equal
deleted
inserted
replaced
9 category:'PetitCompiler-Visitors' |
9 category:'PetitCompiler-Visitors' |
10 ! |
10 ! |
11 |
11 |
12 !PPCTokenizingVisitor methodsFor:'hooks'! |
12 !PPCTokenizingVisitor methodsFor:'hooks'! |
13 |
13 |
14 afterAccept: node retval: retval |
14 afterAccept: node retval: parserNode |
15 Halt if: [ node name = 'start' ]. |
|
16 self isRoot ifTrue: [ |
15 self isRoot ifTrue: [ |
17 | tokenizerNode | |
16 | tokenizerNode whitespaceNode | |
18 self change. |
17 self change. |
19 tokens addLast: self eofToken. |
18 tokens addLast: self eofToken. |
20 tokens do: [ :token | token unmarkForInline ]. |
19 tokens do: [ :token | token unmarkForInline ]. |
|
20 |
|
21 whitespaceNode := tokens detect: [ :e | e isTrimmingTokenNode ] ifFound: [:token | |
|
22 token whitespace copy |
|
23 unmarkForInline; |
|
24 name: 'consumeWhitespace'; |
|
25 yourself |
|
26 ] ifNone: [ |
|
27 PPCNilNode new |
|
28 name: 'consumeWhitespace'; |
|
29 yourself |
|
30 ]. |
21 |
31 |
22 tokenizerNode := PPCTokenChoiceNode new |
32 tokenizerNode := PPCTokenChoiceNode new |
23 children: tokens asArray; |
33 children: tokens asArray; |
24 name: 'nextToken'; |
34 name: 'nextToken'; |
25 yourself. |
35 yourself. |
26 |
36 |
27 ^ PPCTokenizingParserNode new |
37 ^ PPCTokenizingParserNode new |
28 parser: retval; |
38 parser: parserNode; |
29 tokenizer: tokenizerNode; |
39 tokenizer: tokenizerNode; |
|
40 whitespace: whitespaceNode; |
30 name: #'mainParser'; |
41 name: #'mainParser'; |
31 yourself |
42 yourself |
32 ]. |
43 ]. |
33 ^ retval |
44 ^ parserNode |
34 |
45 |
35 ! |
46 ! |
36 |
47 |
37 eofToken |
48 eofToken |
38 | ws | |
49 | ws | |