compiler/PPCTokenizingVisitor.st
changeset 459 4751c407bb40
parent 452 9f4558b3be66
child 460 87a3d30ab570
child 502 1e45d3c96ec5
equal deleted inserted replaced
452:9f4558b3be66 459:4751c407bb40
     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  |