analyzer/PPPattern.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 30 Jul 2015 08:37:37 +0100
changeset 510 869853decf31
parent 290 fb252ab10b94
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:
199
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/petitparser/analyzer' }"
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
PPParser subclass:#PPPattern
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'verificationBlock'
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'PetitAnalyzer-Core'
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!PPPattern class methodsFor:'instance creation'!
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
any
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	"Matches all parsers."
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	^ self on: [ :parser :context | true ]
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
!
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
class: aBehavior
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	"Matches parsers that are of the class aBehavior."
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	^ self on: [ :parser :context | parser class = aBehavior ]
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
kind: aBehavior
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	"Matches parsers that are of the class aBehavior or one of its subclasses."
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
	^ self on: [ :parser :context | parser isKindOf: aBehavior ]
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
!
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
name: aString
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
	"Matches parsers with the name aString."
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
	^ self on: [ :parser :context | parser name = aString ]
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
!
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
new
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
	self error: 'Use an explicit constructur on ' , self name
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
!
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
on: aBlock
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
	"Matches parsers that satisfy an arbitrary condition in aBlock."
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
	^ self basicNew initializeOn: aBlock
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
! !
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
!PPPattern methodsFor:'comparing'!
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
= aParser
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
	^ self == aParser or: [ self name notNil and: [ self name = aParser name ] ]
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
!
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
hash
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
	^ self identityHash
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
! !
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
!PPPattern methodsFor:'initialization'!
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
initializeOn: aBlock
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
	verificationBlock := aBlock
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
! !
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
!PPPattern methodsFor:'matching'!
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
copyInContext: aDictionary seen: aSeenDictionary
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
	^ aDictionary at: self
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
!
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
match: aParser inContext: aDictionary seen: anIdentitySet
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
	(verificationBlock value: aParser value: aDictionary)
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
		ifFalse: [ ^ false ].
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
	^ (aDictionary at: self ifAbsentPut: [ aParser ])
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
		match: aParser inContext: aDictionary seen: anIdentitySet
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
! !
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
!PPPattern methodsFor:'parsing'!
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
parseOn: aStream
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
	"This is just a pattern used for matching. It should not be used in actual grammars."
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
	self shouldNotImplement
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
! !
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
!PPPattern class methodsFor:'documentation'!
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
version
290
Claus Gittinger <cg@exept.de>
parents: 199
diff changeset
    87
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/analyzer/PPPattern.st,v 1.2 2014-03-04 20:27:49 cg Exp $'
199
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
!
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
version_CVS
290
Claus Gittinger <cg@exept.de>
parents: 199
diff changeset
    91
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/analyzer/PPPattern.st,v 1.2 2014-03-04 20:27:49 cg Exp $'
199
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
! !
7ee9dd62dcb2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93