44 lines
923 B
Smalltalk
44 lines
923 B
Smalltalk
"
|
|
A pluggable parser that passes the parser stream into a block. This enables users to perform manual parsing or to embed other parser frameworks into PetitParser.
|
|
|
|
Instance Variables:
|
|
block <BlockClosure> The pluggable one-argument block.
|
|
|
|
|
|
"
|
|
Class {
|
|
#name : 'PPPluggableParser',
|
|
#superclass : 'PPParser',
|
|
#instVars : [
|
|
'block'
|
|
],
|
|
#category : 'PetitParser-Parsers'
|
|
}
|
|
|
|
{ #category : 'instance creation' }
|
|
PPPluggableParser class >> on: aBlock [
|
|
^ self new initializeOn: aBlock
|
|
]
|
|
|
|
{ #category : 'accessing' }
|
|
PPPluggableParser >> block [
|
|
"Answer the pluggable block."
|
|
|
|
^ block
|
|
]
|
|
|
|
{ #category : 'initialization' }
|
|
PPPluggableParser >> initializeOn: aBlock [
|
|
block := aBlock
|
|
]
|
|
|
|
{ #category : 'parsing' }
|
|
PPPluggableParser >> parseOn: aPPContext [
|
|
| memento result |
|
|
memento := aPPContext remember.
|
|
result := block value: aPPContext.
|
|
result isPetitFailure
|
|
ifTrue: [ aPPContext restore: memento ].
|
|
^ result
|
|
]
|