PPCompositeParser.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 15 Jun 2015 19:13:49 +0100
changeset 488 19a9c25960ef
parent 182 dad0accb9b2c
child 502 1e45d3c96ec5
child 640 63fdad4b773d
permissions -rw-r--r--
Avoid creation of intermediate collection for mapped action nodes.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4
90de244a7fa2 move to package
Claus Gittinger <cg@exept.de>
parents: 0
diff changeset
     1
"{ Package: 'stx:goodies/petitparser' }"
0
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
PPDelegateParser subclass:#PPCompositeParser
182
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
     4
	instanceVariableNames:'dependencies'
0
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'PetitParser-Tools'
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!PPCompositeParser class methodsFor:'instance creation'!
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
new
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	"Answer a new parser starting at the default start symbol."
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	^ self newStartingAt: self startSymbol
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
!
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
newStartingAt: aSymbol
182
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    20
	"Answer a new parser starting at aSymbol. The code makes sure to resolve all dependent parsers correctly."
0
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
182
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    22
	| parsers remaining |
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    23
	parsers := IdentityDictionary new.
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    24
	remaining := OrderedCollection with: self.
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    25
	[ remaining isEmpty ] whileFalse: [
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    26
		| dependency |
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    27
		dependency := remaining removeLast.
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    28
		(parsers includesKey: dependency) ifFalse: [
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    29
			parsers at: dependency put: dependency basicNew.
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    30
			remaining addAll: dependency dependencies ] ].
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    31
	parsers keysAndValuesDo: [ :class :parser |
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    32
		| dependencies |
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    33
		dependencies := IdentityDictionary new.
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    34
		class dependencies 
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    35
			do: [ :dependency | dependencies at: dependency put: (parsers at: dependency) ].
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    36
		parser 
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    37
			initializeStartingAt: (class == self
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    38
				ifTrue: [ aSymbol ]
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    39
				ifFalse: [ class startSymbol ]) 
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    40
			dependencies: dependencies ].
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    41
	parsers keysAndValuesDo: [ :class :parser |
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    42
		parser setParser: (parser perform: parser children first name).
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    43
		parser productionNames keysAndValuesDo: [ :key :value |
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    44
			(parser instVarAt: key) setParser: (parser perform: value) ] ].
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    45
	^ parsers at: self
0
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
! !
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
!PPCompositeParser class methodsFor:'accessing'!
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
182
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    50
dependencies
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    51
	"Answer a collection of PPCompositeParser classes that this parser directly dependends on. Override this method in subclasses to declare dependent parsers. The default implementation does not depend on other PPCompositeParser."
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    52
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    53
	^ #()
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    54
!
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
    55
0
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
ignoredNames
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
	"Answer a collection of instance-variables that should not be automatically initialized with productions, but that are used internal to the composite parser."
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
	^ PPCompositeParser allInstVarNames
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
!
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
startSymbol
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
	"Answer the method that represents the default start symbol."
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
	^ #start
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
! !
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
!PPCompositeParser class methodsFor:'parsing'!
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
parse: anObject
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
	^ self parse: anObject startingAt: self startSymbol
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
!
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
parse: anObject onError: aBlock
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
	^ self parse: anObject startingAt: self startSymbol onError: aBlock
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
!
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
parse: anObject startingAt: aSymbol
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
	^ (self newStartingAt: aSymbol) parse: anObject
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
!
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
parse: anObject startingAt: aSymbol onError: aBlock
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
	^ (self newStartingAt: aSymbol) parse: anObject onError: aBlock
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
! !
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
!PPCompositeParser methodsFor:'accessing'!
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
start
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
	"Answer the production to start this parser with."
28
1194e560eda4 Checkin from browser
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
    90
	
0
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
	self subclassResponsibility
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
! !
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
!PPCompositeParser methodsFor:'initialization'!
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
initializeStartingAt: aSymbol
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
	| allVariableNames ignoredVariableNames productionIndexesAndNames |
28
1194e560eda4 Checkin from browser
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
    98
	self initialize.	
0
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
	"find all the productions that need to be initialized"
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
	allVariableNames := self class allInstVarNames
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
		collect: [ :each | each asSymbol ].
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
	ignoredVariableNames := self class ignoredNames
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
		collect: [ :each | each asSymbol ].
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
	productionIndexesAndNames := ((1 to: self class instSize)
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
		collect: [ :index | index -> (allVariableNames at: index) ])
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
		reject: [ :assoc | ignoredVariableNames includes: assoc value ].
28
1194e560eda4 Checkin from browser
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   108
	
0
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
	"initialize productions with an undefined parser to be replaced later"
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
	parser := PPUnresolvedParser named: aSymbol.
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
	productionIndexesAndNames do: [ :assoc |
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
		self instVarAt: assoc key put: (PPUnresolvedParser named: assoc value) ].
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
	parser def: (self perform: aSymbol).
28
1194e560eda4 Checkin from browser
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   114
	
0
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
	"resolve unresolved parsers with their actual implementation"
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
	productionIndexesAndNames do: [ :assoc |
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
		(self respondsTo: assoc value)
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
			ifFalse: [ self error: 'Unable to initialize ' , assoc value printString ]
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
			ifTrue: [ (self instVarAt: assoc key) def: (self perform: assoc value) ] ]
182
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   120
!
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   121
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   122
initializeStartingAt: aSymbol dependencies: aDictionary
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   123
	self initialize.
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   124
	parser := PPDelegateParser named: aSymbol.
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   125
	self productionNames keysAndValuesDo: [ :key :value |
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   126
		self instVarAt: key put: (PPDelegateParser named: value) ].
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   127
	dependencies := aDictionary
0
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
! !
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
!PPCompositeParser methodsFor:'querying'!
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
182
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   132
dependencyAt: aClass
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   133
	"Answer the dependent parser aClass. Throws an error if this parser class is not declared in the method #dependencies on the class-side of the receiver."
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   134
	
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   135
	^ dependencies at: aClass ifAbsent: [ self error: 'Undeclared dependency in ' , self class name , ' to ' , aClass name ]
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   136
!
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   137
0
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
productionAt: aSymbol
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
	"Answer the production named aSymbol."
28
1194e560eda4 Checkin from browser
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   140
	
0
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
	^ self productionAt: aSymbol ifAbsent: [ nil ]
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
!
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
productionAt: aSymbol ifAbsent: aBlock
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
	"Answer the production named aSymbol, if there is no such production answer the result of evaluating aBlock."
28
1194e560eda4 Checkin from browser
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   146
	
0
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
	(self class ignoredNames includes: aSymbol asString)
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
		ifTrue: [ ^ aBlock value ].
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
	(self class startSymbol = aSymbol)
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
		ifTrue: [ ^ parser ].
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
	^ self instVarAt: (self class allInstVarNames
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
		indexOf: aSymbol asString
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
		ifAbsent: [ ^ aBlock value ])
182
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   154
!
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   155
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   156
productionNames
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   157
	"Answer a dictionary of slot indexes and production names."
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   158
	
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   159
	| productionNames ignoredNames |
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   160
	productionNames := Dictionary new.
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   161
	ignoredNames := self class ignoredNames
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   162
		collect: [ :each | each asSymbol ].
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   163
	self class allInstVarNames keysAndValuesDo: [ :key :value |
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   164
		(ignoredNames includes: value asSymbol)
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   165
			ifFalse: [ productionNames at: key put: value asSymbol ] ].
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   166
	^ productionNames
0
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
! !
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
!PPCompositeParser class methodsFor:'documentation'!
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
28
1194e560eda4 Checkin from browser
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   171
version
182
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   172
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPCompositeParser.st,v 1.4 2014-03-04 14:33:36 cg Exp $'
28
1194e560eda4 Checkin from browser
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   173
!
1194e560eda4 Checkin from browser
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   174
1194e560eda4 Checkin from browser
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   175
version_CVS
182
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   176
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPCompositeParser.st,v 1.4 2014-03-04 14:33:36 cg Exp $'
28
1194e560eda4 Checkin from browser
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   177
!
1194e560eda4 Checkin from browser
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   178
0
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
version_SVN
182
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   180
    ^ '$Id: PPCompositeParser.st,v 1.4 2014-03-04 14:33:36 cg Exp $'
0
739fe9b7253e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
! !
182
Claus Gittinger <cg@exept.de>
parents: 28
diff changeset
   182