PPCompositeParser.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 16 Jun 2015 07:49:21 +0100
changeset 491 82b272c7dc37
parent 182 dad0accb9b2c
child 502 1e45d3c96ec5
child 640 63fdad4b773d
permissions -rw-r--r--
Codegen: added support for smart action node compiling. Avoid creation of intermediate result collection for action nodes if all references to action block's argument (i.e., the nodes collection) is in form of: * <nodes> at: <numeric constant> * <nodes> first (second, third...
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