analyzer/PPSearcher.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 30 Jul 2015 08:37:37 +0100
changeset 510 869853decf31
parent 293 064fd167c58a
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:
205
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/petitparser/analyzer' }"
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
PPProcessor subclass:#PPSearcher
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'answer'
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'PetitAnalyzer-Core'
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!PPSearcher methodsFor:'initialization'!
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
setAnswer: anObject
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	answer := anObject
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
! !
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
!PPSearcher methodsFor:'private'!
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
answer
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	^ answer
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
! !
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!PPSearcher methodsFor:'public'!
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
execute: aParser
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	"Perform the search rules of the receiver on aParser. Answer the result of the search."
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
	^ self execute: aParser initialAnswer: nil
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
!
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
execute: aParser initialAnswer: anObject
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
	"Perform the search rules of the receiver on aParser. Inject anObject into the matches and answer the result."
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
	| previous |
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
	previous := context.
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
	answer := anObject.
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
	context := Dictionary new.
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
	aParser allParsersDo: [ :each | 
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
		self performRulesOn: each ].
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
	context := previous.
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
	^ answer
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
! !
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
!PPSearcher methodsFor:'rules'!
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
matches: aParser do: anAnswerBlock
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
	"Add a search expression aParser, evaluate anAnswerBlock with the matched node and the previous answer."
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
	self addRule: (PPSearchRule searchFor: aParser thenDo: anAnswerBlock)
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
!
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
matchesAnyOf: aCollectionOfParsers do: anAnswerBlock
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
	"Add a collection of search expressions aCollectionOfParsers, evaluate anAnswerBlock with the matched node and the previous answer."
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
	
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
	aCollectionOfParsers
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
		do: [ :each | self matches: each do: anAnswerBlock ]
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
! !
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
!PPSearcher class methodsFor:'documentation'!
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
version
293
Claus Gittinger <cg@exept.de>
parents: 205
diff changeset
    62
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/analyzer/PPSearcher.st,v 1.2 2014-03-04 20:27:52 cg Exp $'
205
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
!
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
version_CVS
293
Claus Gittinger <cg@exept.de>
parents: 205
diff changeset
    66
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/analyzer/PPSearcher.st,v 1.2 2014-03-04 20:27:52 cg Exp $'
205
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
! !
0aa4e27a9bfc initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68