analyzer/PPPattern.st
author sr
Wed, 04 Jul 2018 15:23:55 +0200
changeset 607 019302eb9dd9
parent 290 fb252ab10b94
permissions -rw-r--r--
build order was wrong
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