analyzer/PPRewriter.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 30 Jul 2015 08:37:37 +0100
changeset 510 869853decf31
parent 386 a409905f7f2d
permissions -rw-r--r--
Tests refactoring - use generated test cases to make sure all posibilities are tested. Do not generate resource for all combinations, use PPCSetUpBeforeTearDownAfterResource instead that delegates parser compilation to the testcase itself (it calls it's #setUpBefore method).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
202
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/petitparser/analyzer' }"
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
PPProcessor subclass:#PPRewriter
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'changed'
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'PetitAnalyzer-Core'
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!PPRewriter methodsFor:'accessing'!
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
replace: aSearchParser with: aReplaceParser
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	self replace: aSearchParser with: aReplaceParser when: [ :node | true ]
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
!
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
replace: aSearchParser with: aReplaceParser when: aValidationBlock
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	self addRule: (PPParserReplaceRule searchFor: aSearchParser replaceWith: aReplaceParser when: aValidationBlock)
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
!
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
replace: aSearchParser withValueFrom: aReplaceBlock
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	self replace: aSearchParser withValueFrom: aReplaceBlock when: [ :node | true ]
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
replace: aSearchParser withValueFrom: aReplaceBlock when: aValidationBlock
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	self addRule: (PPBlockReplaceRule searchFor: aSearchParser replaceWith: aReplaceBlock when: aValidationBlock)
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
! !
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
!PPRewriter methodsFor:'initialization'!
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
initialize
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
	super initialize.
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
	changed := false
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
! !
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
!PPRewriter methodsFor:'public'!
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
execute: aParser
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
	"Perform the replace rules of the receiver on aParser, answer the resulting parser."
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
	| previous result |
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
	previous := context.
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
	changed := false.
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
	context := Dictionary new.
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
	result := aParser transform: [ :each |
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
		| transformed |
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
		transformed := self performRulesOn: each.
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
		transformed isNil
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
			ifTrue: [ each ]
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
			ifFalse: [ changed := true. transformed ] ].
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
	context := previous.
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
	^ result
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
! !
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
!PPRewriter methodsFor:'testing'!
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
hasChanged
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
	"Answer if the last operation has changed anything."
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
	
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
	^ changed
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
! !
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
!PPRewriter class methodsFor:'documentation'!
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
version
291
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    66
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/analyzer/PPRewriter.st,v 1.2 2014-03-04 20:27:50 cg Exp $'
202
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
!
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
version_CVS
291
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    70
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/analyzer/PPRewriter.st,v 1.2 2014-03-04 20:27:50 cg Exp $'
386
a409905f7f2d Smalltalk parser almost fixed (except few pragma-related tests).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 291
diff changeset
    71
!
a409905f7f2d Smalltalk parser almost fixed (except few pragma-related tests).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 291
diff changeset
    72
a409905f7f2d Smalltalk parser almost fixed (except few pragma-related tests).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 291
diff changeset
    73
version_HG
a409905f7f2d Smalltalk parser almost fixed (except few pragma-related tests).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 291
diff changeset
    74
a409905f7f2d Smalltalk parser almost fixed (except few pragma-related tests).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 291
diff changeset
    75
    ^ '$Changeset: <not expanded> $'
202
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
! !
8cc5a5a8f416 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77