PPLimitedRepeatingParser.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 16 Jun 2015 07:49:21 +0100
changeset 491 82b272c7dc37
parent 377 6112a403a52d
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:
168
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/petitparser' }"
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
PPRepeatingParser subclass:#PPLimitedRepeatingParser
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'limit'
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'PetitParser-Parsers'
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!PPLimitedRepeatingParser class methodsFor:'instance creation'!
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
on: aParser limit: aLimitParser
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	^ (self on: aParser) setLimit: aLimitParser
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
! !
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
377
6112a403a52d Updated to latest version from Moose repository.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 168
diff changeset
    17
168
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
!PPLimitedRepeatingParser methodsFor:'accessing'!
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
children
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
	^ Array with: parser with: limit
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
!
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
limit
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
	"Answer the parser that limits (or ends) this repetition."
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
	^ limit
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
! !
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
!PPLimitedRepeatingParser methodsFor:'initialization'!
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
setLimit: aParser
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
	limit := aParser
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
! !
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
377
6112a403a52d Updated to latest version from Moose repository.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 168
diff changeset
    36
!PPLimitedRepeatingParser methodsFor:'parsing'!
168
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
377
6112a403a52d Updated to latest version from Moose repository.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 168
diff changeset
    38
matchesLimitOn: aPPContext
168
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
	| element position |
377
6112a403a52d Updated to latest version from Moose repository.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 168
diff changeset
    40
	position := aPPContext remember.
6112a403a52d Updated to latest version from Moose repository.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 168
diff changeset
    41
	element := limit parseOn: aPPContext.
6112a403a52d Updated to latest version from Moose repository.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 168
diff changeset
    42
	aPPContext restore: position.
168
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
	^ element isPetitFailure not
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
! !
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
!PPLimitedRepeatingParser class methodsFor:'documentation'!
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
version
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPLimitedRepeatingParser.st,v 1.1 2014-03-04 14:32:55 cg Exp $'
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
!
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
version_CVS
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPLimitedRepeatingParser.st,v 1.1 2014-03-04 14:32:55 cg Exp $'
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
! !
9fa394e40830 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55