islands/PPNonEmptyParser.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Fri, 24 Jul 2015 19:42:09 +0100
changeset 504 0fb1f0799fc1
parent 454 a9cd5ea7cc36
permissions -rw-r--r--
Portability fix: override #new for class that implements #initialize #initialize is not sent by default.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
387
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/petitparser/islands' }"
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
454
a9cd5ea7cc36 Portability: fixes for Smalltalk/X
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 387
diff changeset
     3
"{ NameSpace: Smalltalk }"
a9cd5ea7cc36 Portability: fixes for Smalltalk/X
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 387
diff changeset
     4
387
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
PPDelegateParser subclass:#PPNonEmptyParser
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	instanceVariableNames:''
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	classVariableNames:''
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
	poolDictionaries:''
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
	category:'PetitIslands-Parsers'
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
PPNonEmptyParser comment:'I return failure, if the delegate parser did not consumed any input.'
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
!
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
504
0fb1f0799fc1 Portability fix: override #new for class that implements #initialize
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 454
diff changeset
    15
387
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
!PPNonEmptyParser methodsFor:'parsing'!
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
parseOn: aPPContext
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
	| position result |
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
	position := aPPContext position.
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
	result := parser parseOn: aPPContext.
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
	
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
	(((position == aPPContext position) and: [ aPPContext atEnd not ]) and: [ result isPetitFailure not ]) ifTrue: [ 
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
		^ PPFailure message: 'Epsilon parse not allowed' context: aPPContext at: position
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
	].
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
	^ result
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
! !
e2b2ccaa4de6 Commited a island parser support (MC package PetitIslands)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
504
0fb1f0799fc1 Portability fix: override #new for class that implements #initialize
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 454
diff changeset
    30
!PPNonEmptyParser class methodsFor:'documentation'!
0fb1f0799fc1 Portability fix: override #new for class that implements #initialize
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 454
diff changeset
    31
0fb1f0799fc1 Portability fix: override #new for class that implements #initialize
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 454
diff changeset
    32
version_HG
0fb1f0799fc1 Portability fix: override #new for class that implements #initialize
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 454
diff changeset
    33
0fb1f0799fc1 Portability fix: override #new for class that implements #initialize
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 454
diff changeset
    34
    ^ '$Changeset: <not expanded> $'
0fb1f0799fc1 Portability fix: override #new for class that implements #initialize
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 454
diff changeset
    35
! !
0fb1f0799fc1 Portability fix: override #new for class that implements #initialize
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 454
diff changeset
    36