Updated to PetitCompiler-JanKurs.160, PetitCompiler-Tests-JanKurs.112, PetitCompiler-Extras-Tests-JanKurs.25, PetitCompiler-Benchmarks-JanKurs.17
Name: PetitCompiler-JanKurs.160
Author: JanKurs
Time: 17-08-2015, 09:52:26.291 AM
UUID: 3b4bfc98-8098-4951-af83-a59e2585b121
Name: PetitCompiler-Tests-JanKurs.112
Author: JanKurs
Time: 16-08-2015, 05:00:32.936 PM
UUID: 85613d47-08f3-406f-9823-9cdab451e805
Name: PetitCompiler-Extras-Tests-JanKurs.25
Author: JanKurs
Time: 16-08-2015, 05:00:10.328 PM
UUID: 09731810-51a1-4151-8d3a-56b636fbd1f7
Name: PetitCompiler-Benchmarks-JanKurs.17
Author: JanKurs
Time: 05-08-2015, 05:29:32.407 PM
UUID: e544b5f1-bcf8-470b-93a6-d2363e4dfc8a
"{ Package: 'stx:goodies/petitparser/compiler' }"
"{ NameSpace: Smalltalk }"
PPParser subclass:#PPCompiledParser
instanceVariableNames:'startSymbol context failure error'
classVariableNames:''
poolDictionaries:''
category:'PetitCompiler-Parsers'
!
PPCompiledParser class instanceVariableNames:'parsers constants referringParser startSymbol'
"
No other class instance variables are inherited by this class.
"
!
!PPCompiledParser class methodsFor:'as yet unclassified'!
acceptsLoggingOfCompilation
^ true
!
addConstant: value as: id
self constants at: id ifPresent: [
((self constants at: id) = value) ifFalse: [self error: 'ooups']].
self constants at: id put: value.
!
constants
constants ifNil: [ constants := IdentityDictionary new ].
^ constants
!
parse: input
^ self new parse: input
!
referringParser
^ referringParser ifNil: [ ^ PPSentinel new ]
!
referringParser: aPPParser
referringParser := aPPParser
!
startSymbol
^ startSymbol ifNil: [ ^ #start ]
!
startSymbol: symbol
startSymbol := symbol
! !
!PPCompiledParser methodsFor:'as yet unclassified'!
callParser: id
| retval |
retval := (self class parsers at: id) parseOn: context.
retval isPetitFailure ifTrue: [ self error: retval message at: retval position ]
ifFalse: [ self clearError ].
^ retval
!
clearError
error := false.
!
error
^ self error: '' at: context position
!
error: message
^ self error: message at: context position
!
error: aMessage at: position
failure position < position ifTrue: [
failure message: aMessage.
failure position: position
].
error := true.
^ failure
!
initialize
super initialize.
" self class constants keysAndValuesDo: [ :key :value |
self instVarNamed: key put: value.
].
"
startSymbol := self class startSymbol.
!
isCompiled
^ true
!
isError
^ error
!
parse: input rule: symbol
startSymbol := symbol.
^ self parse: input.
!
start
^ self subclassResponsibility
!
startSymbol: aSymbol
startSymbol := aSymbol
! !
!PPCompiledParser methodsFor:'parsing'!
parseOn: aPPContext
| retval |
" context := aPPContext asCompiledParserContext."
context := aPPContext.
context compiledParser: self.
failure := PPFailure new message: nil; context: context; position: -1.
context noteFailure: failure.
error := false.
retval := self perform: startSymbol.
(retval isPetitFailure) ifTrue: [ aPPContext noteFailure: failure ].
error ifTrue: [ aPPContext noteFailure: failure. retval := failure ].
" aPPContext position: context position."
^ retval
! !