45 lines
1.1 KiB
Smalltalk
45 lines
1.1 KiB
Smalltalk
"
|
|
A PPStartOfWordParser is that matches a word boundary.
|
|
|
|
I return success if no word character preceeds my position and if word chracter succeeds my position.
|
|
|
|
Word characters are any alphanumeric characters.
|
|
"
|
|
Class {
|
|
#name : 'PPStartOfWordParser',
|
|
#superclass : 'PPParser',
|
|
#category : 'PetitParser-Parsers'
|
|
}
|
|
|
|
{ #category : 'testing' }
|
|
PPStartOfWordParser >> acceptsEpsilon [
|
|
^ false
|
|
]
|
|
|
|
{ #category : 'parsing' }
|
|
PPStartOfWordParser >> parseOn: aPPContext [
|
|
aPPContext atEnd ifTrue: [
|
|
^ PPFailure message: 'Start of word expected' context: aPPContext at: aPPContext position
|
|
].
|
|
|
|
(aPPContext position == 0) ifTrue: [
|
|
(aPPContext peek isAlphaNumeric) ifTrue: [
|
|
^ #startOfWord
|
|
] ifFalse: [
|
|
^ PPFailure message: 'Start of word expected' context: aPPContext at: aPPContext position
|
|
]
|
|
].
|
|
|
|
aPPContext back.
|
|
aPPContext peek isAlphaNumeric ifTrue: [
|
|
^ PPFailure message: 'Start of word expected' context: aPPContext at: aPPContext position
|
|
].
|
|
aPPContext next.
|
|
|
|
^ aPPContext peek isAlphaNumeric ifTrue: [ #startOfWord ] ifFalse: [
|
|
PPFailure message: 'Start of word expected' context: aPPContext at: aPPContext position
|
|
]
|
|
|
|
|
|
]
|