Action inlining [1/x]: Initial support for inlining actions parsers (i.e., ==>)
The code of the action is now inlined into parsing method rather then delegated to
stored block. Mapping parser (i.e., map:[...]) are not supported and not detected, so
using them cause crash. This will be fixed later.
"{ Package: 'stx:goodies/petitparser/analyzer' }"
PPProcessor subclass:#PPRewriter
instanceVariableNames:'changed'
classVariableNames:''
poolDictionaries:''
category:'PetitAnalyzer-Core'
!
!PPRewriter methodsFor:'accessing'!
replace: aSearchParser with: aReplaceParser
self replace: aSearchParser with: aReplaceParser when: [ :node | true ]
!
replace: aSearchParser with: aReplaceParser when: aValidationBlock
self addRule: (PPParserReplaceRule searchFor: aSearchParser replaceWith: aReplaceParser when: aValidationBlock)
!
replace: aSearchParser withValueFrom: aReplaceBlock
self replace: aSearchParser withValueFrom: aReplaceBlock when: [ :node | true ]
!
replace: aSearchParser withValueFrom: aReplaceBlock when: aValidationBlock
self addRule: (PPBlockReplaceRule searchFor: aSearchParser replaceWith: aReplaceBlock when: aValidationBlock)
! !
!PPRewriter methodsFor:'initialization'!
initialize
super initialize.
changed := false
! !
!PPRewriter methodsFor:'public'!
execute: aParser
"Perform the replace rules of the receiver on aParser, answer the resulting parser."
| previous result |
previous := context.
changed := false.
context := Dictionary new.
result := aParser transform: [ :each |
| transformed |
transformed := self performRulesOn: each.
transformed isNil
ifTrue: [ each ]
ifFalse: [ changed := true. transformed ] ].
context := previous.
^ result
! !
!PPRewriter methodsFor:'testing'!
hasChanged
"Answer if the last operation has changed anything."
^ changed
! !
!PPRewriter class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/goodies/petitparser/analyzer/PPRewriter.st,v 1.2 2014-03-04 20:27:50 cg Exp $'
!
version_CVS
^ '$Header: /cvs/stx/stx/goodies/petitparser/analyzer/PPRewriter.st,v 1.2 2014-03-04 20:27:50 cg Exp $'
!
version_HG
^ '$Changeset: <not expanded> $'
! !