compiler/benchmarks/PPCBenchmarkResources.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 24 Nov 2014 00:09:23 +0000
changeset 421 7e08b31e0dae
parent 420 b2f2f15cef26
child 422 116d2b2af905
permissions -rw-r--r--
Merged JK's version from Monticello Name: PetitParser-JanKurs.260 Author: JanKurs Time: 17-11-2014, 12:09:05.490 PM UUID: 07411cef-ef69-40db-9d93-d4018a9b34ef Name: PetitTests-JanKurs.65 Author: JanKurs Time: 17-11-2014, 12:09:04.530 PM UUID: f98d613f-f4ce-4e0e-a7e9-310ee7c7e7a6 Name: PetitSmalltalk-JanKurs.78 Author: JanKurs Time: 14-11-2014, 05:05:07.765 PM UUID: 3d68330d-44d5-46c3-9705-97f627b3edbc Name: PetitCompiler-JanKurs.71 Author: JanKurs Time: 18-11-2014, 09:48:35.425 AM UUID: 06352c33-3c76-4382-8536-0cc48e225117 Name: PetitCompiler-Tests-JanKurs.21 Author: JanKurs Time: 17-11-2014, 05:51:53.134 PM UUID: 8d6c0799-14e7-4871-8d91-8b0f9886db83 Name: PetitCompiler-Benchmarks-JanKurs.2 Author: JanKurs Time: 17-11-2014, 05:51:07.887 PM UUID: d5e3a980-7871-487a-a232-e3ca93fc2483
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
420
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/petitparser/compiler/benchmarks' }"
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
Object subclass:#PPCBenchmarkResources
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
	instanceVariableNames:''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
	classVariableNames:'javaCache'
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	poolDictionaries:''
421
7e08b31e0dae Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 420
diff changeset
     7
	category:'PetitCompiler-Benchmarks-Core'
420
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!PPCBenchmarkResources methodsFor:'as yet unclassified'!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
changesSized: size
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
	| string changes |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
	changes := PharoFilesOpener default changesFileOrNil contents.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
	string :=  changes copyFrom: 1 to: size.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
	^ string
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
javaInDirectory: directory
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
	| files |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
	files := self readDirectory: directory.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
	files := self files: files withExtension: 'java'.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
	^ files collect: [ :f | (FileStream fileNamed: f) contents ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
javaLangClass
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
javaLangMath
421
7e08b31e0dae Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 420
diff changeset
    32
	^ (FileStream fileNamed: '../java-src/java/lang/Math.java') contents
420
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
javaSourcesBig
421
7e08b31e0dae Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 420
diff changeset
    36
	^ self javaInDirectory: '../java-src/java/util'.
7e08b31e0dae Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 420
diff changeset
    37
	"^ self workingJavaInDirectory: '../java-src/java/util'"
420
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
petitParserPackage
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
^ '
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
Object subclass: #PPCharSetPredicate
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
	instanceVariableNames: ''block classification''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
	category: ''PetitParser-Tools''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
!!PPCharSetPredicate commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
!!PPCharSetPredicate methodsFor: ''initialization'' stamp: ''lr 8/30/2010 12:19''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
initializeOn: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
	block := aBlock.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
	classification := Array new: 255.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
	1 to: classification size do: [ :index |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
		classification at: index put: (block
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
			value: (Character value: index)) ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
!!PPCharSetPredicate methodsFor: ''evaluating'' stamp: ''lr 8/30/2010 12:19''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
value: aCharacter
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
	| index |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
	index := aCharacter asInteger.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
	index == 0
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
		ifTrue: [ ^ block value: aCharacter ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
	index > 255
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
		ifTrue: [ ^ block value: aCharacter ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
	^ classification at: index!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
PPCharSetPredicate class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
!!PPCharSetPredicate class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
!!PPCharSetPredicate class methodsFor: ''instance creation'' stamp: ''lr 8/25/2010 11:05''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
on: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
	^ self basicNew initializeOn: aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
PPDelegateParser subclass: #PPExpressionParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
	instanceVariableNames: ''operators''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
	category: ''PetitParser-Tools''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
!!PPExpressionParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
A PPExpressionParser is a parser to conveniently define an expression grammar with prefix, postfix, and left- and right-associative infix operators.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
The following code initializes a parser for arithmetic expressions. First we instantiate an expression parser, a simple parser for expressions in parenthesis and a simple parser for integer numbers.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
	expression := PPExpressionParser new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
	parens := $( asParser token trim , expression , $) asParser token trim 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
		==> [ :nodes | nodes second ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
	integer := #digit asParser plus token trim
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
		==> [ :token | token value asInteger ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
Then we define on what term the expression grammar is built on:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
	expression term: parens / integer.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
Finally we define the operator-groups in descending precedence. Note, that the action blocks receive both, the terms and the parsed operator in the order they appear in the parsed input. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
	expression
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
		group: [ :g |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
			g prefix: $- asParser token trim do: [ :op :a | a negated ] ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
		group: [ :g |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
			g postfix: ''++'' asParser token trim do: [ :a :op | a + 1 ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
			g postfix: ''--'' asParser token trim do: [ :a :op | a - 1 ] ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
		group: [ :g |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
			g right: $^ asParser token trim do: [ :a :op :b | a raisedTo: b ] ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
		group: [ :g |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
			g left: $* asParser token trim do: [ :a :op :b | a * b ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
			g left: $/ asParser token trim do: [ :a :op :b | a / b ] ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
		group: [ :g |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
			g left: $+ asParser token trim do: [ :a :op :b | a + b ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
			g left: $- asParser token trim do: [ :a :op :b | a - b ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
		
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
After evaluating the above code the ''expression'' is an efficient parser that evaluates examples like:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
	expression parse: ''-8++''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
	expression parse: ''1+2*3''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
	expression parse: ''1*2+3''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
	expression parse: ''(1+2)*3''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
	expression parse: ''8/4/2''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
	expression parse: ''8/(4/2)''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
	expression parse: ''2^2^3''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
	expression parse: ''(2^2)^3''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
	operators	<Dictionary>	The operators defined in the current group.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
!!PPExpressionParser methodsFor: ''private'' stamp: ''FirstnameLastname 11/26/2009 20:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
build: aParser right: aChoiceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
	^ (aParser separatedBy: aChoiceParser) foldRight: [ :a :op :b | op first value: a value: op second value: b ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
!!PPExpressionParser methodsFor: ''private'' stamp: ''FirstnameLastname 11/26/2009 20:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
build: aParser left: aChoiceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
	^ (aParser separatedBy: aChoiceParser) foldLeft: [ :a :op :b | op first value: a value: op second value: b ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
!!PPExpressionParser methodsFor: ''private'' stamp: ''lr 12/4/2009 17:38''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
build: aParser postfix: aChoiceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
	^ aParser , aChoiceParser star map: [ :term :ops | ops inject: term into: [ :result :operator | operator first value: result value: operator second ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
!!PPExpressionParser methodsFor: ''private'' stamp: ''FirstnameLastname 11/26/2009 21:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
buildOn: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
	^ self buildSelectors inject: aParser into: [ :term :selector |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
		| list |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
		list := operators at: selector ifAbsent: [ #() ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
		list isEmpty
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
			ifTrue: [ term ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
			ifFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
				self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
					perform: selector with: term 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
					with: (list size = 1
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
						ifTrue: [ list first first ==> [ :operator | Array with: list first second with: operator ] ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
						ifFalse: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
							list
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
								inject: PPChoiceParser new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
								into: [ :choice :each | choice / (each first ==> [ :operator | Array with: each second with: operator ]) ] ]) ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
!!PPExpressionParser methodsFor: ''private'' stamp: ''lr 12/4/2009 17:39''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
build: aParser prefix: aChoiceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
	^ aChoiceParser star , aParser map: [ :ops :term | ops reversed inject: term into: [ :result :operator | operator first value: operator second value: result ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
!!PPExpressionParser methodsFor: ''private'' stamp: ''FirstnameLastname 11/26/2009 20:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
buildSelectors
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
	^ #(build:prefix: build:postfix: build:right: build:left:)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
!!PPExpressionParser methodsFor: ''private'' stamp: ''lr 2/7/2010 23:23''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
operator: aSymbol parser: aParser do: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
	parser isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
		ifTrue: [ ^ self error: ''You did not specify a term when creating the receiver.'' ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
	operators isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
		ifTrue: [ ^ self error: ''Use #group: to define precedence groups in descending order.'' ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
	(operators at: aSymbol ifAbsentPut: [ OrderedCollection new ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
		addLast: (Array with: aParser asParser with: aBlock)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
!!PPExpressionParser methodsFor: ''specifying'' stamp: ''FirstnameLastname 11/26/2009 21:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
term: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
	"Defines the initial term aParser of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
	parser isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
		ifTrue: [ parser := aParser ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
		ifFalse: [ self error: ''Unable to redefine the term.'' ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
!!PPExpressionParser methodsFor: ''specifying'' stamp: ''FirstnameLastname 11/26/2009 20:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
postfix: aParser do: aTwoArgumentBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
	"Define a postfix operator aParser. Evaluate aTwoArgumentBlock with the term and the operator."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
	self operator: #build:postfix: parser: aParser do: aTwoArgumentBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
!!PPExpressionParser methodsFor: ''specifying'' stamp: ''FirstnameLastname 11/26/2009 20:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
left: aParser do: aThreeArgumentBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
	"Define an operator aParser that is left-associative. Evaluate aThreeArgumentBlock with the first term, the operator, and the second term."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
	self operator: #build:left: parser: aParser do: aThreeArgumentBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
!!PPExpressionParser methodsFor: ''specifying'' stamp: ''FirstnameLastname 11/26/2009 20:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
prefix: aParser do: aTwoArgumentBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
	"Define a prefix operator aParser. Evaluate aTwoArgumentBlock with the operator and the term."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
	self operator: #build:prefix: parser: aParser do: aTwoArgumentBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
!!PPExpressionParser methodsFor: ''specifying'' stamp: ''FirstnameLastname 11/26/2009 20:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
right: aParser do: aThreeArgumentBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
	"Define an operator aParser that is right-associative. Evaluate aThreeArgumentBlock with the first term, the operator, and the second term."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
	self operator: #build:right: parser: aParser do: aThreeArgumentBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
!!PPExpressionParser methodsFor: ''specifying'' stamp: ''lr 2/7/2010 23:20''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
group: aOneArgumentBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
	"Defines a priority group by evaluating aOneArgumentBlock."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
	operators := Dictionary new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
	parser := [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
		aOneArgumentBlock value: self.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
	 	self buildOn: parser ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
			ensure: [ operators := nil ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
PPDelegateParser subclass: #PPCompositeParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
	instanceVariableNames: ''dependencies''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
	category: ''PetitParser-Tools''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
!!PPCompositeParser commentStamp: ''lr 12/4/2009 18:38'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
A PPCompositeParser is composed parser built from various primitive parsers. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
Every production in the receiver is specified as a method that returns its parser. Note that every production requires an instance variable of the same name, otherwise the production is not cached and cannot be used in recursive grammars. Productions should refer to each other by reading the respective inst-var. Note: these inst-vars are typically not written, as the assignment happens in the initialize method using reflection.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
The start production is defined in the method start. It is aliased to the inst-var parser defined in the superclass of PPCompositeParser.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
!!PPCompositeParser methodsFor: ''querying'' stamp: ''lr 6/4/2010 13:37''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
productionAt: aSymbol ifAbsent: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
	"Answer the production named aSymbol, if there is no such production answer the result of evaluating aBlock."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
	(self class ignoredNames includes: aSymbol asString)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
		ifTrue: [ ^ aBlock value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
	(self class startSymbol = aSymbol)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
		ifTrue: [ ^ parser ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
	^ self instVarAt: (self class allInstVarNames
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
		indexOf: aSymbol asString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
		ifAbsent: [ ^ aBlock value ])!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
!!PPCompositeParser methodsFor: ''querying'' stamp: ''lr 5/8/2011 15:45''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
productionNames
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
	"Answer a dictionary of slot indexes and production names."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   254
	| productionNames ignoredNames |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
	productionNames := Dictionary new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
	ignoredNames := self class ignoredNames
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
		collect: [ :each | each asSymbol ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
	self class allInstVarNames keysAndValuesDo: [ :key :value |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
		(ignoredNames includes: value asSymbol)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
			ifFalse: [ productionNames at: key put: value asSymbol ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
	^ productionNames!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
!!PPCompositeParser methodsFor: ''querying'' stamp: ''lr 3/16/2013 21:41''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264
dependencyAt: aClass
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
	"Answer the dependent parser aClass. Throws an error if this parser class is not declared in the method #dependencies on the class-side of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   266
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
	^ dependencies at: aClass ifAbsent: [ self error: ''Undeclared dependency in '' , self class name , '' to '' , aClass name ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   269
!!PPCompositeParser methodsFor: ''querying'' stamp: ''lr 12/4/2009 18:39''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   270
productionAt: aSymbol
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
	"Answer the production named aSymbol."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   272
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   273
	^ self productionAt: aSymbol ifAbsent: [ nil ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   275
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   276
!!PPCompositeParser methodsFor: ''initialization'' stamp: ''lr 3/16/2013 17:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   277
initializeStartingAt: aSymbol dependencies: aDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   278
	self initialize.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   279
	parser := PPDelegateParser named: aSymbol.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   280
	self productionNames keysAndValuesDo: [ :key :value |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   281
		self instVarAt: key put: (PPDelegateParser named: value) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   282
	dependencies := aDictionary!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   283
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   284
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   285
!!PPCompositeParser methodsFor: ''accessing'' stamp: ''lr 5/16/2008 17:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   286
start
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   287
	"Answer the production to start this parser with."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   288
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   289
	self subclassResponsibility!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   290
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   291
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   292
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   293
PPCompositeParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   294
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   295
!!PPCompositeParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   298
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   299
!!PPCompositeParser class methodsFor: ''accessing'' stamp: ''lr 1/29/2010 11:35''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   300
ignoredNames
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   301
	"Answer a collection of instance-variables that should not be automatically initialized with productions, but that are used internal to the composite parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   302
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   303
	^ PPCompositeParser allInstVarNames!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   304
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   305
!!PPCompositeParser class methodsFor: ''accessing'' stamp: ''lr 12/7/2009 08:20''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   306
startSymbol
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   307
	"Answer the method that represents the default start symbol."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   308
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   309
	^ #start!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   310
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   311
!!PPCompositeParser class methodsFor: ''accessing'' stamp: ''lr 3/16/2013 21:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   312
dependencies
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   313
	"Answer a collection of PPCompositeParser classes that this parser directly dependends on. Override this method in subclasses to declare dependent parsers. The default implementation does not depend on other PPCompositeParser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   314
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
	^ #()!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   316
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   317
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   318
!!PPCompositeParser class methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 12/19/2013 15:40''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   319
debug: anObject startingAt: aSymbol onError: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   320
	^ (self newStartingAt: aSymbol) debug: anObject onError: aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   321
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   322
!!PPCompositeParser class methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 12/19/2013 15:39''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   323
debug: anObject startingAt: aSymbol
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   324
	^ (self newStartingAt: aSymbol) debug: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   325
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   326
!!PPCompositeParser class methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 12/19/2013 15:40''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   327
debug: anObject onError: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   328
	^ self debug: anObject startingAt: self startSymbol onError: aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   329
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   330
!!PPCompositeParser class methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 12/19/2013 15:39''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   331
debug: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   332
	^ self debug: anObject startingAt: self startSymbol!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   333
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   334
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   335
!!PPCompositeParser class methodsFor: ''instance creation'' stamp: ''lr 3/16/2013 21:21''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   336
newStartingAt: aSymbol
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   337
	"Answer a new parser starting at aSymbol. The code makes sure to resolve all dependent parsers correctly."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   338
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   339
	| parsers remaining |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   340
	parsers := IdentityDictionary new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   341
	remaining := OrderedCollection with: self.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   342
	[ remaining isEmpty ] whileFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   343
		| dependency |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   344
		dependency := remaining removeLast.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   345
		(parsers includesKey: dependency) ifFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   346
			parsers at: dependency put: dependency basicNew.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   347
			remaining addAll: dependency dependencies ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   348
	parsers keysAndValuesDo: [ :class :parser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   349
		| dependencies |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   350
		dependencies := IdentityDictionary new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   351
		class dependencies 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   352
			do: [ :dependency | dependencies at: dependency put: (parsers at: dependency) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   353
		parser 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   354
			initializeStartingAt: (class == self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   355
				ifTrue: [ aSymbol ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   356
				ifFalse: [ class startSymbol ]) 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   357
			dependencies: dependencies ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   358
	parsers keysAndValuesDo: [ :class :parser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   359
		parser setParser: (parser perform: parser children first name).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   360
		parser productionNames keysAndValuesDo: [ :key :value |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   361
			(parser instVarAt: key) setParser: (parser perform: value) ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   362
	^ parsers at: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   363
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   364
!!PPCompositeParser class methodsFor: ''instance creation'' stamp: ''lr 12/7/2009 08:24''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   365
new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   366
	"Answer a new parser starting at the default start symbol."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   367
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   368
	^ self newStartingAt: self startSymbol!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   369
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   370
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   371
!!PPCompositeParser class methodsFor: ''parsing'' stamp: ''lr 2/7/2010 21:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   372
parse: anObject onError: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   373
	^ self parse: anObject startingAt: self startSymbol onError: aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   374
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   375
!!PPCompositeParser class methodsFor: ''parsing'' stamp: ''lr 2/7/2010 21:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   376
parse: anObject startingAt: aSymbol onError: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   377
	^ (self newStartingAt: aSymbol) parse: anObject onError: aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   378
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   379
!!PPCompositeParser class methodsFor: ''parsing'' stamp: ''lr 2/7/2010 20:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   380
parse: anObject startingAt: aSymbol
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   381
	^ (self newStartingAt: aSymbol) parse: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   382
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   383
!!PPCompositeParser class methodsFor: ''parsing'' stamp: ''lr 2/7/2010 20:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   384
parse: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   385
	^ self parse: anObject startingAt: self startSymbol!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   386
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   387
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   388
PPParser subclass: #PPUnresolvedParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   389
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   390
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   391
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   392
	category: ''PetitParser-Tools''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   393
!!PPUnresolvedParser commentStamp: ''lr 11/28/2009 18:50'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   394
This is a temporary placeholder or forward reference to a parser that has not been defined yet. If everything goes well it will eventually be replaced with the real parser instance.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   395
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   396
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   397
!!PPUnresolvedParser methodsFor: ''parsing'' stamp: ''lr 2/7/2010 20:51''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   398
parseOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   399
	self error: self printString , '' need to be resolved before execution.''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   400
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   401
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   402
!!PPUnresolvedParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   403
displayColor
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   404
	^ Color red!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   405
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   406
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   407
!!PPUnresolvedParser methodsFor: ''testing'' stamp: ''lr 10/27/2008 11:29''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   408
isUnresolved
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   409
	^ true!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   410
Object subclass: #PPParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   411
	instanceVariableNames: ''properties''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   412
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   413
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   414
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   415
!!PPParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   416
An abstract parser for all parsers in PetitParser. Subclasses implement #parseOn: to perform the actual recursive-descent parsing. All parsers support a variety of methods to perform an actual parse, see the methods in the #parsing protocol. Parsers are combined with a series of operators that can be found in the #operations protocol.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   417
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   418
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   419
	properties	<Dictionary>	Stores additional state in the parser object.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   420
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   421
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   422
!!PPParser methodsFor: ''*petitjava-operations'' stamp: ''sback 9/2/2010 23:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   423
javaToken
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   424
	^ PPJavaTokenParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   425
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   426
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   427
!!PPParser methodsFor: ''*petitgui'' stamp: ''TudorGirba 12/18/2013 06:41''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   428
gtInspectorParserInspectorIn: composite
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   429
	<gtInspectorPresentationOrder: 30>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   430
	composite custom: (
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   431
		PPVerticalParserInspector new 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   432
			title: ''Sampler'';
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   433
			startOn: self)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   434
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   435
!!PPParser methodsFor: ''*petitgui'' stamp: ''AlexandreBergel 12/18/2013 16:40''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   436
gtGraphViewIn: composite
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   437
	<gtInspectorPresentationOrder: 50>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   438
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   439
	composite roassal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   440
		title: ''Graph''; 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   441
		painting: [ :view |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   442
			self visualizeStructureInGraphOn: view.	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   443
		].!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   444
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   445
!!PPParser methodsFor: ''*petitgui'' stamp: ''TudorGirba 6/24/2013 23:44''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   446
gtNamedTreeViewIn: composite
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   447
	<gtInspectorPresentationOrder: 40>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   448
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   449
	composite tree
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   450
		title: ''Named Tree'';
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   451
		children: [:n | n namedChildren ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   452
		format: [:n| n name ifNil: [ n asString ] ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   453
		shouldExpandToLevel: 3!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   454
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   455
!!PPParser methodsFor: ''*petitgui'' stamp: ''TudorGirba 6/24/2013 23:44''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   456
gtTreeViewIn: composite
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   457
	<gtInspectorPresentationOrder: 40>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   458
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   459
	composite tree
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   460
			title: ''Tree'';
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   461
			children: [:n | n children ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   462
			format: [:n| n name ifNil: [ n asString ] ifNotNil: [n name] ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   463
			shouldExpandToLevel: 6!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   464
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   465
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   466
!!PPParser methodsFor: ''*petitgui-morphic'' stamp: ''lr 1/30/2013 19:35''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   467
morphicShapeDefault
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   468
	^ self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   469
		addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   470
			addMorphBack: (self newSpacerMorph);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   471
			addMorphBack: (LineMorph from: 0 @ 0 to: 20 @ 0 color: Color black width: 1)	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   472
				makeForwardArrow;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   473
			yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   474
		addMorphBack: (self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   475
			borderWidth: 1;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   476
			layoutInset: 3;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   477
			color: Color white;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   478
			addMorphBack: (StringMorph new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   479
				contents: self displayName;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   480
				color: self displayColor;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   481
				yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   482
			yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   483
		yourself!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   484
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   485
!!PPParser methodsFor: ''*petitgui-morphic'' stamp: ''lr 11/18/2009 10:56''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   486
morphicProduction
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   487
	^ self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   488
		layoutInset: 4;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   489
		addMorphBack: (self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   490
			layoutInset: 4;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   491
			addMorphBack: (StringMorph new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   492
				contents: self displayName;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   493
				emphasis: TextEmphasis bold emphasisCode;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   494
				yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   495
			yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   496
		addMorphBack: (self morphicShapeSeen: IdentitySet new depth: 0);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   497
		addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   498
			addMorphBack: (self newSpacerMorph);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   499
			addMorphBack: (LineMorph from: 0 @ 0 to: 20 @ 0 color: Color black width: 1)	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   500
				makeForwardArrow;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   501
			yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   502
		yourself!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   503
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   504
!!PPParser methodsFor: ''*petitgui-morphic'' stamp: ''lr 11/13/2009 13:24''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   505
morphicShapeSeen: aSet depth: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   506
	^ self morphicShapeDefault!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   507
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   508
!!PPParser methodsFor: ''*petitgui-morphic'' stamp: ''lr 11/13/2009 13:43''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   509
morphicShapeSeen: aSet depth: anInteger do: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   510
	" avoid recursion "
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   511
	(aSet includes: self)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   512
		ifTrue: [ ^ self morphicShapeDefault ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   513
	" display nice name when possible "
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   514
	(anInteger > 0 and: [ self name notNil ]) 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   515
		ifTrue: [ ^ self morphicShapeDefault ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   516
	" don''t do it too deep "
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   517
	(anInteger > 10)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   518
		ifTrue: [ ^ self morphicShapeDefault ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   519
	aSet add: self. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   520
	^ aBlock value: [ :parser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   521
		parser 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   522
			morphicShapeSeen: aSet 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   523
			depth: anInteger + 1 ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   524
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   525
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   526
!!PPParser methodsFor: ''*petitanalyzer-transforming'' stamp: ''lr 10/30/2010 11:54''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   527
transform: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   528
	"Answer a copy of all parsers reachable from the receiver transformed using aBlock."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   529
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   530
	| mapping root |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   531
	mapping := IdentityDictionary new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   532
	self allParsersDo: [ :each |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   533
		mapping
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   534
			at: each
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   535
			put: (aBlock value: each copy) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   536
	root := mapping at: self.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   537
	[	| changed |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   538
		changed := false.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   539
		root allParsersDo: [ :each |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   540
			each children do: [ :old |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   541
				mapping at: old ifPresent: [ :new |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   542
					each replace: old with: new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   543
					changed := true ] ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   544
		changed ] whileTrue.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   545
	^ root!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   546
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   547
!!PPParser methodsFor: ''*petitanalyzer-transforming'' stamp: ''lr 4/13/2010 09:38''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   548
replace: aParser with: anotherParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   549
	"Replace the references of the receiver pointing to aParser with anotherParser."!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   550
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   551
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   552
!!PPParser methodsFor: ''*petitanalyzer-named'' stamp: ''lr 11/23/2010 10:55''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   553
namedChildrenDo: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   554
	"Iterate over the named children of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   555
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   556
	self namedChildrenDo: aBlock seen: IdentitySet new!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   557
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   558
!!PPParser methodsFor: ''*petitanalyzer-named'' stamp: ''lr 11/23/2010 10:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   559
allNamedParsers
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   560
	"Answer all the named parse nodes of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   561
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   562
	| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   563
	result := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   564
	self allNamedParsersDo: [ :parser | result addLast: parser ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   565
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   566
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   567
!!PPParser methodsFor: ''*petitanalyzer-named'' stamp: ''lr 11/23/2010 10:55''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   568
namedChildrenDo: aBlock seen: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   569
	"Iterate over the named children of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   570
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   571
	self children do: [ :each |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   572
		(aSet includes: each)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   573
			ifTrue: [ ^ self ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   574
		aSet add: each.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   575
		each name isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   576
			ifTrue: [ each namedChildrenDo: aBlock seen: aSet ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   577
			ifFalse: [ aBlock value: each ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   578
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   579
!!PPParser methodsFor: ''*petitanalyzer-named'' stamp: ''lr 12/3/2010 16:45''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   580
innerChildren
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   581
	"Answer the inner children of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   582
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   583
	| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   584
	result := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   585
	self innerChildrenDo: [ :parser | result addLast: parser ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   586
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   587
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   588
!!PPParser methodsFor: ''*petitanalyzer-named'' stamp: ''lr 12/3/2010 16:51''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   589
innerChildrenDo: aBlock seen: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   590
	"Iterate over the inner children of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   591
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   592
	self children do: [ :each |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   593
		(aSet includes: each)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   594
			ifTrue: [ ^ self ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   595
		aSet add: each.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   596
		each name isNil ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   597
			aBlock value: each.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   598
			each innerChildrenDo: aBlock seen: aSet ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   599
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   600
!!PPParser methodsFor: ''*petitanalyzer-named'' stamp: ''lr 12/3/2010 16:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   601
innerChildrenDo: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   602
	"Iterate over the inner children of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   603
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   604
	self innerChildrenDo: aBlock seen: IdentitySet new!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   605
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   606
!!PPParser methodsFor: ''*petitanalyzer-named'' stamp: ''lr 11/23/2010 10:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   607
allNamedParsersDo: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   608
	"Iterate over all the named parse nodes of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   609
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   610
	self allParsersDo: [ :each | 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   611
		each name notNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   612
			ifTrue: [ aBlock value: each ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   613
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   614
!!PPParser methodsFor: ''*petitanalyzer-named'' stamp: ''lr 11/23/2010 10:55''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   615
namedChildren
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   616
	"Answer the named children of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   617
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   618
	| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   619
	result := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   620
	self namedChildrenDo: [ :parser | result addLast: parser ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   621
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   622
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   623
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   624
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 7/11/2011 11:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   625
trimBlanks
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   626
	"Answer a new parser that consumes blanks before and after the receiving parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   627
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   628
	^ self trim: #blank asParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   629
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   630
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 2/19/2010 07:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   631
answer: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   632
	"Answer a new parser that always returns anObject from a successful parse."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   633
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   634
	^ self ==> [ :nodes | anObject ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   635
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   636
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 7/11/2011 11:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   637
trim: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   638
	"Answer a new parser that consumes and ignores aParser repeatedly before and after the receiving parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   639
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   640
	^ PPTrimmingParser on: self trimmer: aParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   641
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   642
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 5/6/2011 20:28''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   643
map: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   644
	"Answer a new parser that works on the receiving sequence an passes in each element as a block argument."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   645
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   646
	^ aBlock numArgs = 1
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   647
		ifTrue: [ self ==> aBlock ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   648
		ifFalse: [ self error: aBlock numArgs asString , '' arguments expected.'' ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   649
!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   650
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   651
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 6/29/2010 14:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   652
token
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   653
	"Answer a new parser that transforms the input to a token."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   654
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   655
	^ PPTokenParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   656
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   657
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 4/3/2011 14:59''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   658
foldRight: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   659
	"Answer a new parser that that folds the result of the receiver from right-to-left into aBlock. The argument aBlock must take two or more arguments."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   660
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   661
	| size args |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   662
	size := aBlock numArgs.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   663
	args := Array new: size.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   664
	^ self ==> [ :nodes |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   665
		args at: size put: nodes last.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   666
		nodes size - size + 1 to: 1 by: 1 - size do: [ :index |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   667
			args
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   668
				replaceFrom: 1 to: size - 1 with: nodes startingAt: index;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   669
				at: size put: (aBlock valueWithArguments: args) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   670
		args at: size ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   671
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   672
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 7/11/2011 11:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   673
trimSpaces
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   674
	"Answer a new parser that consumes spaces before and after the receiving parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   675
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   676
	^ self trim: #space asParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   677
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   678
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 5/15/2008 16:08''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   679
flatten
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   680
	"Answer a new parser that flattens the underlying collection."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   681
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   682
	^ PPFlattenParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   683
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   684
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 7/31/2010 12:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   685
trim
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   686
	"Answer a new parser that consumes spaces before and after the receiving parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   687
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   688
	^ self trimSpaces!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   689
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   690
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 6/12/2010 10:20''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   691
>=> aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   692
	"Answer a new parser that wraps the receiving parser with a two argument block. The first argument is the parsed stream, the second argument a continuation block on the delegate parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   693
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   694
	^ PPWrappingParser on: self block: aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   695
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   696
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 5/12/2010 20:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   697
==> aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   698
	"Answer a new parser that performs aBlock as action handler on success."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   699
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   700
	^ PPActionParser on: self block: aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   701
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   702
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 4/3/2011 15:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   703
foldLeft: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   704
	"Answer a new parser that that folds the result of the receiver from left-to-right into aBlock. The argument aBlock must take two or more arguments."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   705
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   706
	| size args |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   707
	size := aBlock numArgs.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   708
	args := Array new: size.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   709
	^ self ==> [ :nodes |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   710
		args at: 1 put: nodes first.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   711
		2 to: nodes size by: size - 1 do: [ :index |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   712
			args
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   713
				replaceFrom: 2 to: size with: nodes startingAt: index;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   714
				at: 1 put: (aBlock valueWithArguments: args) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   715
		args first ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   716
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   717
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 4/6/2010 19:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   718
token: aTokenClass
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   719
	"Answer a new parser that transforms the input to a token of class aTokenClass."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   720
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   721
	^ self token tokenClass: aTokenClass!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   722
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   723
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   724
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/3/2011 14:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   725
max: anInteger lazy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   726
	"Answer a new parser that parses the receiver at most anInteger times until it reaches aParser. This is a lazy non-blind implementation. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   727
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   728
	^ (self starLazy: aParser) setMax: anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   729
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   730
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/2/2011 10:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   731
starLazy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   732
	"Answer a new parser that parses the receiver zero or more times until it reaches aParser. This is a lazy non-blind implementation of the star operator. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   733
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   734
	^ PPLazyRepeatingParser on: self limit: aParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   735
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   736
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 9/15/2010 09:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   737
times: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   738
	"Answer a new parser that parses the receiver exactly anInteger times."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   739
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   740
	^ self min: anInteger max: anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   741
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   742
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/3/2011 14:56''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   743
min: aMinInteger max: aMaxInteger greedy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   744
	"Answer a new parser that parses the receiver at least aMinInteger and at most aMaxInteger times until it reaches aParser. This is a greedy non-blind implementation. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   745
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   746
	^ (self starGreedy: aParser) setMin: aMinInteger; setMax: aMaxInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   747
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   748
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/2/2011 10:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   749
star
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   750
	"Answer a new parser that parses the receiver zero or more times. This is a greedy and blind implementation that tries to consume as much input as possible and it does not consider what comes afterwards."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   751
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   752
	^ PPPossessiveRepeatingParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   753
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   754
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/1/2011 21:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   755
min: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   756
	"Answer a new parser that parses the receiver at least anInteger times."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   757
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   758
	^ self star setMin: anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   759
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   760
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/1/2011 21:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   761
min: aMinInteger max: aMaxInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   762
	"Answer a new parser that parses the receiver at least aMinInteger and at most aMaxInteger times."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   763
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   764
	^ self star setMin: aMinInteger; setMax: aMaxInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   765
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   766
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/2/2011 10:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   767
starGreedy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   768
	"Answer a new parser that parses the receiver zero or more times until it reaches aParser. This is a greedy non-blind implementation of the star operator. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   769
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   770
	^ PPGreedyRepeatingParser on: self limit: aParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   771
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   772
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/3/2011 14:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   773
min: aMinInteger max: aMaxInteger lazy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   774
	"Answer a new parser that parses the receiver at least aMinInteger and at most aMaxInteger times until it reaches aParser. This is a greedy non-blind implementation. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   775
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   776
	^ (self starLazy: aParser) setMin: aMinInteger; setMax: aMaxInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   777
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   778
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/3/2011 14:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   779
min: anInteger lazy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   780
	"Answer a new parser that parses the receiver at least anInteger times until it reaches aParser. This is a lazy non-blind implementation. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   781
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   782
	^ (self starLazy: aParser) setMin: anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   783
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   784
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/3/2011 14:56''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   785
max: anInteger greedy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   786
	"Answer a new parser that parses the receiver at most anInteger times until it reaches aParser. This is a greedy non-blind implementation. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   787
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   788
	^ (self starGreedy: aParser) setMax: anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   789
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   790
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/1/2011 21:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   791
plus
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   792
	"Answer a new parser that parses the receiver one or more times."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   793
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   794
	^ self star setMin: 1!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   795
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   796
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/3/2011 14:56''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   797
min: anInteger greedy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   798
	"Answer a new parser that parses the receiver at least anInteger times until it reaches aParser. This is a greedy non-blind implementation. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   799
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   800
	^ (self starGreedy: aParser) setMin: anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   801
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   802
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/1/2011 21:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   803
max: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   804
	"Answer a new parser that parses the receiver at most anInteger times."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   805
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   806
	^ self star setMax: anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   807
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   808
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/1/2011 21:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   809
plusGreedy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   810
	"Answer a new parser that parses the receiver one or more times until it reaches aParser. This is a greedy non-blind implementation of the star operator. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   811
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   812
	^ (self starGreedy: aParser) setMin: 1!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   813
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   814
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/1/2011 21:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   815
plusLazy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   816
	"Answer a new parser that parses the receiver one or more times until it reaches aParser. This is a lazy non-blind implementation of the star operator. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   817
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   818
	^ (self starLazy: aParser) setMin: 1!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   819
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   820
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   821
!!PPParser methodsFor: ''*petitsmalltalk-operations'' stamp: ''lr 6/29/2010 14:27''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   822
smalltalkToken
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   823
	^ PPSmalltalkTokenParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   824
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   825
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   826
!!PPParser methodsFor: ''*petitanalyzer-testing'' stamp: ''lr 5/22/2010 10:45''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   827
isTerminal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   828
	"Answer true if the receiver is a terminal or leaf parser, that means it does not delegate to any other parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   829
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   830
	^ self children isEmpty!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   831
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   832
!!PPParser methodsFor: ''*petitanalyzer-testing'' stamp: ''JanKurs 5/31/2013 11:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   833
isFirstSetTerminal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   834
	"Answer true if the receiver is a terminal or leaf parser, that means it does not delegate to any other parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   835
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   836
	^ self children isEmpty!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   837
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   838
!!PPParser methodsFor: ''*petitanalyzer-testing'' stamp: ''lr 11/12/2009 17:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   839
isNullable
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   840
	"Answer true if the receiver is a nullable parser, e.g. it can successfully parse nothing."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   841
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   842
	^ false!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   843
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   844
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   845
!!PPParser methodsFor: ''converting'' stamp: ''lr 11/29/2011 20:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   846
asParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   847
	"Answer the receiving parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   848
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   849
	^ self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   850
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   851
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   852
!!PPParser methodsFor: ''printing'' stamp: ''lr 4/16/2010 16:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   853
printNameOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   854
	self name isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   855
		ifTrue: [ aStream print: self hash ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   856
		ifFalse: [ aStream nextPutAll: self name ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   857
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   858
!!PPParser methodsFor: ''printing'' stamp: ''lr 4/16/2010 16:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   859
printOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   860
	super printOn: aStream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   861
	aStream nextPut: $(.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   862
	self printNameOn: aStream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   863
	aStream nextPut: $)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   864
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   865
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   866
!!PPParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/9/2009 14:37''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   867
example
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   868
	^ String streamContents: [ :stream | self exampleOn: stream ] limitedTo: 1024!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   869
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   870
!!PPParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/9/2009 14:20''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   871
exampleOn: aStream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   872
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   873
!!PPParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 9/12/2011 18:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   874
displayColor
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   875
	^ self isTerminal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   876
		ifTrue: [ Color r: 0.5 g: 0.0 b: 0.5 ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   877
		ifFalse: [ Color blue ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   878
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   879
!!PPParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/6/2009 18:31''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   880
displayName
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   881
	^ self name isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   882
		ifFalse: [ self name asString ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   883
		ifTrue: [ self class name asString ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   884
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   885
!!PPParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:11''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   886
backgroundForDepth: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   887
	^ Color gray: 1.0 - (anInteger / 20.0)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   888
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   889
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   890
!!PPParser methodsFor: ''parsing'' stamp: ''lr 10/29/2010 17:05''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   891
parse: anObject onError: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   892
	"Parse anObject with the receiving parser and answer the parse-result or answer the result of evaluating aBlock. Depending on the number of arguments of the block it is simply evaluated, evaluated with the failure object, or evaluated with the error message and position."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   893
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   894
	| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   895
	result := self parse: anObject.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   896
	result isPetitFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   897
		ifFalse: [ ^ result ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   898
	aBlock numArgs = 0
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   899
		ifTrue: [ ^ aBlock value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   900
	aBlock numArgs = 1
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   901
		ifTrue: [ ^ aBlock value: result ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   902
	^ aBlock value: result message value: result position!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   903
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   904
!!PPParser methodsFor: ''parsing'' stamp: ''lr 6/4/2011 18:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   905
matchesIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   906
	"Search anObject repeatedly for the matches of the receiver. Answered an OrderedCollection of the matched parse-trees."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   907
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   908
	| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   909
	result := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   910
	self 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   911
		matchesIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   912
		do: [ :each | result addLast: each ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   913
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   914
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   915
!!PPParser methodsFor: ''parsing'' stamp: ''lr 8/16/2011 07:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   916
matchesSkipIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   917
	"Search anObject repeatedly for the matches of the receiver. Answer an OrderedCollection of the matched parse-trees. Skip over matches."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   918
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   919
	| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   920
	result := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   921
	self 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   922
		matchesSkipIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   923
		do: [ :each | result addLast: each ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   924
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   925
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   926
!!PPParser methodsFor: ''parsing'' stamp: ''lr 2/25/2013 23:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   927
matchingSkipRangesIn: anObject do: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   928
	"Search anObject repeatedly for the matches of the receiver. Skip over matches. Evaluate aBlock with the range of each match (index of first character to: index of last character)."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   929
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   930
	self token
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   931
		matchesSkipIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   932
		do: [ :token | aBlock value: (token start to: token stop) ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   933
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   934
!!PPParser methodsFor: ''parsing'' stamp: ''DamienCassou 10/29/2011 19:18''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   935
matchingSkipRangesIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   936
	"Search anObject repeatedly for the matches of the receiver. Skip over matches. Answer an OrderedCollection of ranges of each match (index of first character to: index of last character)."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   937
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   938
	| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   939
	result := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   940
	self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   941
		matchingSkipRangesIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   942
		do: [ :value | result addLast: value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   943
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   944
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   945
!!PPParser methodsFor: ''parsing'' stamp: ''lr 6/4/2011 18:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   946
matchingRangesIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   947
	"Search anObject repeatedly for the matches of the receiver. Answer an OrderedCollection of ranges of each match (index of first character to: index of last character)."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   948
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   949
	| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   950
	result := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   951
	self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   952
		matchingRangesIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   953
		do: [ :value | result addLast: value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   954
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   955
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   956
!!PPParser methodsFor: ''parsing'' stamp: ''lr 8/16/2011 07:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   957
matchesSkipIn: anObject do: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   958
	"Search anObject repeatedly for the matches of the receiver. Evaluate aBlock for each match with the matched parse-tree as the argument. Skip over matches."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   959
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   960
	(self ==> aBlock / #any asParser) star parse: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   961
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   962
!!PPParser methodsFor: ''parsing'' stamp: ''lr 2/25/2013 23:41''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   963
matchingRangesIn: anObject do: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   964
	"Search anObject repeatedly for the matches of the receiver. Evaluate aBlock with the range of each match (index of first character to: index of last character)."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   965
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   966
	self token
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   967
		matchesIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   968
		do: [ :token | aBlock value: (token start to: token stop) ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   969
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   970
!!PPParser methodsFor: ''parsing'' stamp: ''lr 2/8/2010 00:30''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   971
matches: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   972
	"Answer if anObject can be parsed by the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   973
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   974
	^ (self parse: anObject) isPetitFailure not!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   975
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   976
!!PPParser methodsFor: ''parsing'' stamp: ''lr 3/1/2010 21:51''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   977
matchesIn: anObject do: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   978
	"Search anObject repeatedly for the matches of the receiver. Evaluate aBlock for each match with the matched parse-tree as the argument. Make sure to always consume exactly one character with each step, to not miss any match."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   979
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   980
	((self and ==> aBlock , #any asParser) / #any asParser) star parse: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   981
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   982
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   983
!!PPParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 5/31/2010 18:37''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   984
matchList: matchList index: matchIndex against: parserList index: parserIndex inContext: aDictionary seen: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   985
	| parser currentIndex currentDictionary currentSeen parsers |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   986
	matchList size < matchIndex
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   987
		ifTrue: [ ^ parserList size < parserIndex ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   988
	parser := matchList at: matchIndex.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   989
	parser class = PPListPattern ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   990
		currentIndex := parserIndex - 1.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   991
		[ currentDictionary := aDictionary copy.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   992
		currentSeen := aSet copy.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   993
		parserList size < currentIndex or: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   994
			parsers := parserList copyFrom: parserIndex to: currentIndex.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   995
			(currentDictionary at: parser ifAbsentPut: [ parsers ]) = parsers and: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   996
				(self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   997
					matchList: matchList
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   998
					index: matchIndex + 1
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   999
					against: parserList
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1000
					index: currentIndex + 1
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1001
					inContext: currentDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1002
					seen: currentSeen)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1003
					ifTrue: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1004
						currentDictionary keysAndValuesDo: [ :key :value | aDictionary at: key put: value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1005
						^ true ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1006
				false ] ] ] whileFalse: [ currentIndex := currentIndex + 1 ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1007
		^ false ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1008
	parserList size < parserIndex
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1009
		ifTrue: [ ^ false ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1010
	(parser match: (parserList at: parserIndex) inContext: aDictionary seen: aSet)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1011
		ifFalse: [ ^ false ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1012
	^ self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1013
		matchList: matchList
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1014
		index: matchIndex + 1
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1015
		against: parserList
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1016
		index: parserIndex + 1
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1017
		inContext: aDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1018
		seen: aSet!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1019
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1020
!!PPParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 7/17/2011 11:53''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1021
copyInContext: aDictionary seen: aSeenDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1022
	| copy |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1023
	aSeenDictionary 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1024
		at: self 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1025
		ifPresent: [ :value | ^ value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1026
	copy := aSeenDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1027
		at: self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1028
		put: self copy.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1029
	copy children do: [ :each |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1030
		copy
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1031
			replace: each
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1032
			with: (each copyInContext: aDictionary seen: aSeenDictionary) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1033
	^ copy!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1034
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1035
!!PPParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 4/30/2010 07:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1036
copyInContext: aDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1037
	^ self copyInContext: aDictionary seen: IdentityDictionary new!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1038
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1039
!!PPParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 4/29/2010 23:07''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1040
matchList: matchList against: parserList inContext: aDictionary seen: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1041
	^ self matchList: matchList index: 1 against: parserList index: 1 inContext: aDictionary seen: aSet!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1042
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1043
!!PPParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 6/18/2010 14:09''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1044
match: aParser inContext: aDictionary seen: anIdentitySet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1045
	"This is the default implementation to match two parsers. This code can properly handle recursion. This is code is supposed to be overridden in subclasses that add new state."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1046
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1047
	(self == aParser or: [ anIdentitySet includes: self ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1048
		ifTrue: [ ^ true ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1049
	anIdentitySet add: self.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1050
	^ self class = aParser class and: [ self matchList: self children against: aParser children inContext: aDictionary seen: anIdentitySet ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1051
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1052
!!PPParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 4/29/2010 23:14''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1053
match: aParser inContext: aDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1054
	^ self match: aParser inContext: aDictionary seen: IdentitySet new!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1055
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1056
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1057
!!PPParser methodsFor: ''testing'' stamp: ''lr 10/27/2008 11:28''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1058
isUnresolved
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1059
	^ false!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1060
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1061
!!PPParser methodsFor: ''testing'' stamp: ''lr 8/6/2010 16:44''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1062
isPetitParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1063
	^ true!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1064
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1065
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1066
!!PPParser methodsFor: ''accessing-properties'' stamp: ''lr 4/19/2010 10:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1067
propertyAt: aKey ifAbsentPut: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1068
	"Answer the property associated with aKey or, if aKey isn''t found store the result of evaluating aBlock as new value."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1069
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1070
	^ self propertyAt: aKey ifAbsent: [ self propertyAt: aKey put: aBlock value ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1071
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1072
!!PPParser methodsFor: ''accessing-properties'' stamp: ''lr 4/19/2010 10:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1073
removeProperty: aKey ifAbsent: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1074
	"Remove the property with aKey. Answer the value or, if aKey isn''t found, answer the result of evaluating aBlock."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1075
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1076
	| answer |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1077
	properties isNil ifTrue: [ ^ aBlock value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1078
	answer := properties removeKey: aKey ifAbsent: aBlock.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1079
	properties isEmpty ifTrue: [ properties := nil ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1080
	^ answer!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1081
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1082
!!PPParser methodsFor: ''accessing-properties'' stamp: ''lr 4/19/2010 10:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1083
propertyAt: aKey
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1084
	"Answer the property value associated with aKey."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1085
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1086
	^ self propertyAt: aKey ifAbsent: [ self error: ''Property not found'' ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1087
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1088
!!PPParser methodsFor: ''accessing-properties'' stamp: ''lr 4/19/2010 10:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1089
propertyAt: aKey ifAbsent: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1090
	"Answer the property value associated with aKey or, if aKey isn''t found, answer the result of evaluating aBlock."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1091
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1092
	^ properties isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1093
		ifTrue: [ aBlock value ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1094
		ifFalse: [ properties at: aKey ifAbsent: aBlock ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1095
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1096
!!PPParser methodsFor: ''accessing-properties'' stamp: ''lr 4/19/2010 10:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1097
propertyAt: aKey put: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1098
	"Set the property at aKey to be anObject. If aKey is not found, create a new entry for aKey and set is value to anObject. Answer anObject."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1099
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1100
	^ (properties ifNil: [ properties := Dictionary new: 1 ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1101
		at: aKey put: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1102
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1103
!!PPParser methodsFor: ''accessing-properties'' stamp: ''lr 4/19/2010 10:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1104
hasProperty: aKey
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1105
	"Test if the property aKey is present."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1106
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1107
	^ properties notNil and: [ properties includesKey: aKey ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1108
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1109
!!PPParser methodsFor: ''accessing-properties'' stamp: ''lr 4/19/2010 10:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1110
removeProperty: aKey
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1111
	"Remove the property with aKey. Answer the property or raise an error if aKey isn''t found."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1112
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1113
	^ self removeProperty: aKey ifAbsent: [ self error: ''Property not found'' ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1114
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1115
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1116
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''AlexandreBergel 12/18/2013 16:41''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1117
visualizationGraphType
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1118
	^ nil!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1119
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1120
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''AlexandreBergel 12/18/2013 17:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1121
visualizeStructureInGraphOn: view
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1122
	view shape rectangle 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1123
		borderWidth: 1;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1124
		if: [ :p | p name isNil ] fillColor: Color lightGray.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1125
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1126
	view interaction
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1127
		item: ''Explore'' action: #explore;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1128
		highlightWhenOver: [ :p | 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1129
			self allParsers select: [ :ch | ch children includes: p ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1130
		] color: Color orange muchLighter;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1131
		highlightWhenOver: [ :p | |children|
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1132
			children := p namedChildren.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1133
		] color: Color orange muchDarker;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1134
		highlightWhenOver: [ :p | Array with: p ] color: Color orange;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1135
		popupText: [:p | p class name asString ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1136
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1137
	view
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1138
		nodes: self allParsers
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1139
		forEach: [ :aParser | |labels|
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1140
			labels := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1141
			aParser name notNil ifTrue: [ labels add: aParser name ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1142
			aParser visualizationGraphType notNil ifTrue: [ labels add: aParser visualizationGraphType ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1143
			labels isEmpty ifFalse: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1144
					view shape label.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1145
					view interaction forwarder.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1146
					view nodes: labels asArray ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1147
		].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1148
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1149
	view shape: (ROLine new add: (ROArrow new size: 4) offset: 0.1).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1150
	view edgesToAll: #children.	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1151
	view treeLayout
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1152
		layered;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1153
		on: ROLayoutEnd do: [ :evt | ROFocusView on: (view raw elementFromModel: self) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1154
		
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1155
	view zoomInButton.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1156
	view zoomOutButton.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1157
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1158
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''tg 8/25/2010 00:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1159
namedParsersDo: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1160
    self namedParsersDo: aBlock seen: IdentitySet new!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1161
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1162
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''VincentBlondeau 2/14/2014 17:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1163
viewAllNamedParsersWithSelection: aCollectionOfNames previewing: aBlock on: view
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1164
	view shape label
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1165
		color: [ :each | 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1166
					(aCollectionOfNames includes: each name)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1167
						ifFalse: [ Color black ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1168
						ifTrue: [ Color red ] ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1169
		text: [ :each | each displayName ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1170
	view interaction popupText: aBlock.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1171
	view interaction item: ''Explore'' action: #explore.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1172
	view nodes: (self allParsers reject: [ :each | each name isEmptyOrNil ]).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1173
	view edges: (self allParsers reject: [ :each | each name isEmptyOrNil ]) from: #yourself toAll: #namedParsers.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1174
	view horizontalDominanceTreeLayout
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1175
		verticalGap: 10;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1176
		layered!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1177
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1178
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''AlexandreBergel 12/18/2013 17:21''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1179
visualizeStructureInGraph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1180
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1181
	"
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1182
	PPSmalltalkParser new visualize
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1183
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1184
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1185
	"
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1186
	| view |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1187
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1188
	view := ROMondrianViewBuilder new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1189
	self visualizeStructureInGraphOn: view.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1190
	view open.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1191
	^ view!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1192
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1193
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''VincentBlondeau 2/14/2014 17:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1194
viewAllNamedParsersOn: view
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1195
	view shape
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1196
		rectangleWithoutBorder;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1197
		withText: #displayName.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1198
	view nodes: (self allParsers reject: [ :each | each name isEmptyOrNil ]).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1199
	view edgesToAll: #namedParsers.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1200
	view horizontalDominanceTreeLayout layered!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1201
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1202
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''TudorGirba 12/6/2011 07:43''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1203
viewAllNamedParsersWithSelection: aCollectionOfNames on: view
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1204
	self viewAllNamedParsersWithSelection: aCollectionOfNames previewing: [ :each | each name ] on: view!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1205
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1206
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''TudorGirba 12/14/2011 12:40''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1207
namedParsersDo: aBlock seen: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1208
    self children do: [ :each | 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1209
        (aSet includes: each)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1210
            ifFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1211
		        aSet add: each.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1212
		        each name isEmptyOrNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1213
		            ifFalse: [ aBlock value: each ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1214
		            ifTrue: [ each namedParsersDo: aBlock seen: aSet ] ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1215
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1216
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''TudorGirba 6/5/2013 23:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1217
viewAllNamedParsers
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1218
	| view |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1219
	view := ROMondrianViewBuilder new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1220
	self viewAllNamedParsersOn: view.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1221
	^ view open setLabel: ''All named parsers''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1222
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1223
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''tg 8/25/2010 00:31''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1224
namedParsers
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1225
    | result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1226
    result := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1227
    self namedParsersDo: [ :parser | result addLast: parser ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1228
    ^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1229
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1230
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1231
!!PPParser methodsFor: ''*petitanalyzer-enumerating'' stamp: ''lr 4/13/2010 08:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1232
allParsers
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1233
	"Answer all the parse nodes of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1234
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1235
	| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1236
	result := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1237
	self allParsersDo: [ :parser | result addLast: parser ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1238
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1239
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1240
!!PPParser methodsFor: ''*petitanalyzer-enumerating'' stamp: ''lr 4/13/2010 08:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1241
allParsersDo: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1242
	"Iterate over all the parse nodes of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1243
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1244
	self allParsersDo: aBlock seen: IdentitySet new!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1245
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1246
!!PPParser methodsFor: ''*petitanalyzer-enumerating'' stamp: ''lr 4/13/2010 08:35''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1247
allParsersDo: aBlock seen: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1248
	"Iterate over all the parse nodes of the receiver, do not visit and follow the ones contained in aSet."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1249
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1250
	(aSet includes: self)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1251
		ifTrue: [ ^ self ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1252
	aSet add: self.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1253
	aBlock value: self.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1254
	self children
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1255
		do: [ :each | each allParsersDo: aBlock seen: aSet ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1256
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1257
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1258
!!PPParser methodsFor: ''operators-convenience'' stamp: ''lr 2/19/2010 07:56''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1259
separatedBy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1260
	"Answer a new parser that parses the receiver one or more times, separated by aParser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1261
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1262
	^ (PPSequenceParser with: self with: (PPSequenceParser with: aParser with: self) star) ==> [ :nodes |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1263
		| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1264
		result := Array new: 2 * nodes second size + 1.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1265
		result at: 1 put: nodes first.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1266
		nodes second 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1267
			keysAndValuesDo: [ :index :pair | result replaceFrom: 2 * index to: 2 * index + 1 with: pair startingAt: 1 ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1268
		result ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1269
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1270
!!PPParser methodsFor: ''operators-convenience'' stamp: ''lr 2/19/2010 07:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1271
delimitedBy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1272
	"Answer a new parser that parses the receiver one or more times, separated and possibly ended by aParser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1273
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1274
	^ (self separatedBy: aParser) , (aParser optional) ==> [ :node |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1275
		node second isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1276
			ifTrue: [ node first ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1277
			ifFalse: [ node first copyWith: node second ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1278
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1279
!!PPParser methodsFor: ''operators-convenience'' stamp: ''lr 2/25/2012 16:54''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1280
withoutSeparators
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1281
	"Filters out the separators from a parse result produced by one of the productions #delimitedBy: or #separatedBy:."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1282
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1283
	^ self ==> [ :items |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1284
		| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1285
		result := Array new: items size + 1 // 2.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1286
		1 to: result size do: [ :index | result at: index put: (items at: 2 * index - 1) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1287
		result ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1288
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1289
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1290
!!PPParser methodsFor: ''copying'' stamp: ''lr 4/19/2010 10:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1291
postCopy
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1292
	super postCopy.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1293
	properties := properties copy!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1294
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1295
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1296
!!PPParser methodsFor: ''initialization'' stamp: ''lr 4/24/2008 10:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1297
initialize!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1298
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1299
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1300
!!PPParser methodsFor: ''*petitgui-morphic-creational'' stamp: ''lr 11/17/2009 21:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1301
newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1302
	^ AlignmentMorph newColumn
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1303
		cellPositioning: #topLeft;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1304
		color: Color transparent;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1305
		listCentering: #topLeft;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1306
		vResizing: #shrinkWrap;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1307
		hResizing: #shrinkWrap;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1308
		layoutInset: 0;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1309
		yourself!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1310
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1311
!!PPParser methodsFor: ''*petitgui-morphic-creational'' stamp: ''lr 11/17/2009 21:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1312
newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1313
	^ AlignmentMorph newRow
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1314
		cellPositioning: #topLeft;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1315
		color: Color transparent;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1316
		listCentering: #topLeft;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1317
		vResizing: #shrinkWrap;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1318
		hResizing: #shrinkWrap;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1319
		layoutInset: 0;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1320
		yourself!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1321
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1322
!!PPParser methodsFor: ''*petitgui-morphic-creational'' stamp: ''lr 11/17/2009 22:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1323
newSpacerMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1324
	^ Morph new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1325
		color: Color transparent;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1326
		borderWidth: 0;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1327
		extent: 7 @ 7;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1328
		yourself!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1329
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1330
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1331
!!PPParser methodsFor: ''*petitanalyzer-querying'' stamp: ''lr 9/16/2010 17:55''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1332
followSets
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1333
	"Answer a dictionary with all the parsers reachable from the receiver as key and their follow-set as value. The follow-set of a parser is the list of terminal parsers that can appear immediately to the right of that parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1334
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1335
	| current previous continue firstSets followSets |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1336
	current := previous := 0.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1337
	firstSets := self firstSets.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1338
	followSets := IdentityDictionary new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1339
	self allParsersDo: [ :each | followSets at: each put: IdentitySet new ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1340
	(followSets at: self) add: PPSentinel instance.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1341
	[	followSets keysAndValuesDo: [ :parser :follow |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1342
			parser 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1343
				followSets: followSets
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1344
				firstSets: firstSets
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1345
				into: follow ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1346
		current := followSets
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1347
			inject: 0
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1348
			into: [ :result :each | result + each size ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1349
		continue := previous < current.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1350
		previous := current.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1351
		continue ] whileTrue.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1352
	^ followSets!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1353
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1354
!!PPParser methodsFor: ''*petitanalyzer-querying'' stamp: ''lr 10/22/2009 19:59''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1355
firstSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1356
	"Answer the first-set of the receiver. Note, this implementation is inefficient when called on different receivers of the same grammar, instead use #firstSets to calculate the first-sets at once."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1357
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1358
	^ self firstSets at: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1359
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1360
!!PPParser methodsFor: ''*petitanalyzer-querying'' stamp: ''lr 11/19/2009 23:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1361
cycleSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1362
	"Answer a set of all nodes that are within one or more cycles of left-recursion. This is generally not a problem if at least one of the nodes is memoized, but it might make the grammar very inefficient and should be avoided if possible."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1363
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1364
	| cycles |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1365
	cycles := IdentitySet new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1366
	self cycleSet: OrderedCollection new firstSets: self firstSets into: cycles.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1367
	^ cycles!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1368
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1369
!!PPParser methodsFor: ''*petitanalyzer-querying'' stamp: ''JanKurs 5/31/2013 11:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1370
firstSets
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1371
	"Answer a dictionary with all the parsers reachable from the receiver as key and their first-set as value. The first-set of a parser is the list of terminal parsers that begin the parser derivable from that parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1372
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1373
	| firstSets |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1374
	firstSets := IdentityDictionary new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1375
	self allParsersDo: [ :each |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1376
		firstSets at: each put: (each isFirstSetTerminal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1377
			ifTrue: [ IdentitySet with: each ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1378
			ifFalse: [ IdentitySet new ]).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1379
		each isNullable
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1380
			ifTrue: [ (firstSets at: each) add: PPSentinel instance ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1381
	[	| changed tally |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1382
		changed := false.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1383
		firstSets keysAndValuesDo: [ :parser :first |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1384
			tally := first size.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1385
			parser firstSets: firstSets into: first.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1386
			changed := changed or: [ tally ~= first size ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1387
		changed ] whileTrue.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1388
	^ firstSets!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1389
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1390
!!PPParser methodsFor: ''*petitanalyzer-querying'' stamp: ''lr 11/12/2009 21:13''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1391
followSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1392
	"Answer the follow-set of the receiver starting at the receiver. Note, this implementation is inefficient when called on different receivers of the same grammar, instead use #followSets to calculate the follow-sets at once."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1393
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1394
	^ self followSets at: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1395
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1396
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1397
!!PPParser methodsFor: ''pp-context'' stamp: ''JanKurs 11/11/2013 09:30''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1398
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1399
	"Parse aStream with the receiving parser and answer the parse-result or an instance of PPFailure. Override this method in subclasses to specify custom parse behavior. Do not call this method from outside, instead use #parse:."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1400
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1401
	self subclassResponsibility!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1402
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1403
!!PPParser methodsFor: ''pp-context'' stamp: ''JanKurs 3/17/2014 13:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1404
debugWithContext: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1405
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1406
	^ self enableDebug parseWithContext: aPPContext !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1407
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1408
!!PPParser methodsFor: ''pp-context'' stamp: ''JanKurs 3/11/2014 13:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1409
updateContext: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1410
	"nothing to do"!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1411
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1412
!!PPParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 13:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1413
parse: anObject withContext: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1414
	"Parse anObject with the receiving parser and answer the parse-result or an instance of PPFailure."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1415
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1416
	aPPContext stream: anObject asPetitStream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1417
	^ self parseWithContext: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1418
!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1419
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1420
!!PPParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 13:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1421
parse: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1422
	"Parse anObject with the receiving parser and answer the parse-result or an instance of PPFailure."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1423
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1424
	^ self parse: anObject withContext: PPContext new!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1425
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1426
!!PPParser methodsFor: ''pp-context'' stamp: ''JanKurs 3/19/2014 16:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1427
parseWithContext: context
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1428
	context root: self.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1429
	self updateContext: context.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1430
	^ self parseOn: context!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1431
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1432
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1433
!!PPParser methodsFor: ''accessing'' stamp: ''lr 10/21/2009 16:38''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1434
children
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1435
	"Answer a set of child parsers that could follow the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1436
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1437
	^ #()!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1438
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1439
!!PPParser methodsFor: ''accessing'' stamp: ''lr 4/19/2010 10:38''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1440
name: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1441
	self propertyAt: #name put: aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1442
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1443
!!PPParser methodsFor: ''accessing'' stamp: ''lr 4/19/2010 10:35''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1444
name
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1445
	"Answer the production name of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1446
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1447
	^ self propertyAt: #name ifAbsent: [ nil ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1448
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1449
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1450
!!PPParser methodsFor: ''*petitanalyzer-private'' stamp: ''lr 11/19/2009 23:47''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1451
cycleSet: aDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1452
	"PRIVATE: Answer the children that could be part of a cycle-set with the receiver, subclasses might restrict the number of children returned. aDictionary is pre-calcualted first-sets."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1453
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1454
	^ self children!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1455
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1456
!!PPParser methodsFor: ''*petitanalyzer-private'' stamp: ''lr 5/22/2010 10:45''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1457
cycleSet: aStack firstSets: aDictionary into: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1458
	"PRIVATE: Try to find a cycle, where aStack contains the previously visited parsers. The method returns quickly when the receiver is a terminal, terminals cannot be part of a cycle. If aStack already contains the receiver, then we are in a cycle. In this case we don''t process the children further and add the nodes to aSet."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1459
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1460
	| index |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1461
	self isTerminal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1462
		ifTrue: [ ^ self ].	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1463
	(index := aStack indexOf: self) > 0
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1464
		ifTrue: [ ^ aSet addAll: (aStack copyFrom: index to: aStack size) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1465
	aStack addLast: self.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1466
	(self cycleSet: aDictionary)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1467
		do: [ :each | each cycleSet: aStack firstSets: aDictionary into: aSet ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1468
	aStack removeLast!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1469
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1470
!!PPParser methodsFor: ''*petitanalyzer-private'' stamp: ''lr 11/12/2009 21:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1471
firstSets: aFirstDictionary into: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1472
	"PRIVATE: Try to add additional elements to the first-set aSet of the receiver, use the incomplete aFirstDictionary."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1473
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1474
	self children do: [ :parser | aSet addAll: (aFirstDictionary at: parser) ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1475
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1476
!!PPParser methodsFor: ''*petitanalyzer-private'' stamp: ''lr 11/12/2009 21:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1477
followSets: aFollowDictionary firstSets: aFirstDictionary into: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1478
	"PRIVATE: Try to add additional elements to the follow-set aSet of the receiver, use the incomplete aFollowDictionary and the complete aFirstDictionary."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1479
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1480
	self children do: [ :parser | (aFollowDictionary at: parser) addAll: aSet ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1481
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1482
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1483
!!PPParser methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 1/16/2014 15:41''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1484
debug: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1485
	"Parse anObject with the receiving parser and answer the parse-result or an instance of PPFailure."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1486
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1487
	^ self enableDebug parse: anObject asPetitStream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1488
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1489
!!PPParser methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 3/18/2014 12:21''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1490
enableDebuggerOutput 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1491
	self debuggerOutput: true.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1492
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1493
!!PPParser methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 4/22/2013 18:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1494
debuggerOutput: aBoolean
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1495
	self propertyAt: #debuggerOutput put: aBoolean!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1496
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1497
!!PPParser methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 3/18/2014 12:21''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1498
disableDebuggerOutput 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1499
	self debuggerOutput: false.	!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1500
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1501
!!PPParser methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 3/18/2014 17:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1502
enableDebug
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1503
   | root newParser  |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1504
	root := PPParserDebuggerResult new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1505
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1506
	newParser := self transform: [:each |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1507
		each >=> [:stream :continuation | 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1508
			| result child |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1509
			child := PPParserDebuggerResult new 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1510
					parser: each;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1511
					parent: root.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1512
			root := root children add: child.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1513
 			child start: stream position + 1.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1514
			child showChildren: each debuggerOutput.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1515
			result := continuation value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1516
			child end: stream position.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1517
			root result: result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1518
			root := root parent.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1519
			result 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1520
		]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1521
	].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1522
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1523
	^ PPDebugParser on: newParser root: root.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1524
!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1525
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1526
!!PPParser methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 4/22/2013 18:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1527
debuggerOutput
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1528
	^ self propertyAt: #debuggerOutput ifAbsentPut: true.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1529
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1530
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1531
!!PPParser methodsFor: ''operators'' stamp: ''lr 2/19/2010 07:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1532
negate
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1533
	"Answer a new parser consumes any input token but the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1534
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1535
	^ self not , #any asParser ==> #second!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1536
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1537
!!PPParser methodsFor: ''operators'' stamp: ''lr 9/1/2010 22:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1538
optional
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1539
	"Answer a new parser that parses the receiver, if possible."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1540
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1541
	^ PPOptionalParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1542
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1543
!!PPParser methodsFor: ''operators'' stamp: ''lr 12/3/2010 11:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1544
def: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1545
	"Redefine the receiver as the argument aParser. This method is useful when defining recursive parsers: instantiate a PPUnresolvedParser and later redefine it with another one."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1546
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1547
	^ self becomeForward: (aParser name: self name)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1548
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1549
!!PPParser methodsFor: ''operators'' stamp: ''lr 10/23/2008 14:05''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1550
wrapped
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1551
	"Answer a new parser that is simply wrapped."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1552
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1553
	^ PPDelegateParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1554
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1555
!!PPParser methodsFor: ''operators'' stamp: ''lr 5/31/2010 16:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1556
memoized
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1557
	"Answer a new memoized parser, for refraining redundant computations. This ensures polynomial time O(n^4) for left-recursive grammars and O(n^3) for non left-recursive grammars in the worst case. Not necessary for most grammars that are carefully written and in O(n) anyway."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1558
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1559
	^ PPMemoizedParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1560
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1561
!!PPParser methodsFor: ''operators'' stamp: ''lr 5/31/2010 15:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1562
and
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1563
	"Answer a new parser (logical and-predicate) that succeeds whenever the receiver does, but never consumes input."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1564
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1565
	^ PPAndParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1566
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1567
!!PPParser methodsFor: ''operators'' stamp: ''lr 4/14/2010 11:46''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1568
/ aParser 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1569
	"Answer a new parser that parses the receiver, if the receiver fails try with aParser (ordered-choice)."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1570
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1571
	^ PPChoiceParser with: self with: aParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1572
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1573
!!PPParser methodsFor: ''operators'' stamp: ''lr 4/30/2010 12:13''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1574
end
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1575
	"Answer a new parser that succeeds at the end of the input and return the result of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1576
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1577
	^ PPEndOfInputParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1578
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1579
!!PPParser methodsFor: ''operators'' stamp: ''lr 5/31/2010 15:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1580
not
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1581
	"Answer a new parser (logical not-predicate) that succeeds whenever the receiver fails, but never consumes input."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1582
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1583
	^ PPNotParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1584
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1585
!!PPParser methodsFor: ''operators'' stamp: ''lr 4/14/2010 11:53''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1586
| aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1587
	"Answer a new parser that either parses the receiver or aParser. Fail if both pass or fail (exclusive choice, unordered choice)."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1588
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1589
	^ (self not , aParser) / (aParser not , self) ==> #second!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1590
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1591
!!PPParser methodsFor: ''operators'' stamp: ''lr 9/23/2008 18:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1592
, aParser 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1593
	"Answer a new parser that parses the receiver followed by aParser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1594
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1595
	^ PPSequenceParser with: self with: aParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1596
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1597
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1598
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1599
PPParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1600
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1601
!!PPParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1602
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1603
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1604
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1605
!!PPParser class methodsFor: ''instance creation'' stamp: ''lr 10/27/2008 11:17''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1606
named: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1607
	^ self new name: aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1608
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1609
!!PPParser class methodsFor: ''instance creation'' stamp: ''lr 4/18/2008 14:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1610
new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1611
	^ self basicNew initialize!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1612
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1613
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1614
PPParser subclass: #PPPluggableParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1615
	instanceVariableNames: ''block''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1616
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1617
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1618
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1619
!!PPPluggableParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1620
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.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1621
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1622
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1623
	block	<BlockClosure>	The pluggable one-argument block.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1624
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1625
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1626
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1627
!!PPPluggableParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 6/18/2010 14:09''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1628
match: aParser inContext: aDictionary seen: anIdentitySet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1629
	^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self block = aParser block ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1630
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1631
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1632
!!PPPluggableParser methodsFor: ''initialization'' stamp: ''lr 5/2/2010 16:52''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1633
initializeOn: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1634
	block := aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1635
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1636
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1637
!!PPPluggableParser methodsFor: ''pp-context'' stamp: ''JanKurs 11/11/2013 09:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1638
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1639
	| position result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1640
	position := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1641
	result := block value: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1642
	result isPetitFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1643
		ifTrue: [ aPPContext restore: position ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1644
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1645
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1646
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1647
!!PPPluggableParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:41''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1648
displayName
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1649
	^ String streamContents: [ :stream | block decompile shortPrintOn: stream ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1650
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1651
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1652
!!PPPluggableParser methodsFor: ''accessing'' stamp: ''lr 4/30/2010 11:10''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1653
block
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1654
	"Answer the pluggable block."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1655
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1656
	^ block!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1657
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1658
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1659
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1660
PPPluggableParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1661
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1662
!!PPPluggableParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1663
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1664
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1665
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1666
!!PPPluggableParser class methodsFor: ''instance creation'' stamp: ''lr 5/2/2010 16:52''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1667
on: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1668
	^ self new initializeOn: aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1669
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1670
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1671
PPParser subclass: #PPFailingParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1672
	instanceVariableNames: ''message''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1673
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1674
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1675
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1676
!!PPFailingParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1677
A parser that consumes nothing and always fails.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1678
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1679
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1680
	message <String>	The failure message.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1681
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1682
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1683
!!PPFailingParser methodsFor: ''initialization'' stamp: ''lr 5/2/2010 19:16''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1684
setMessage: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1685
	message := aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1686
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1687
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1688
!!PPFailingParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 16:59''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1689
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1690
	^ PPFailure message: message context: aPPContext!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1691
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1692
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1693
!!PPFailingParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/6/2009 18:43''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1694
displayName
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1695
	^ message!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1696
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1697
!!PPFailingParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:16''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1698
displayColor
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1699
	^ Color red!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1700
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1701
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1702
!!PPFailingParser methodsFor: ''printing'' stamp: ''lr 4/16/2010 21:27''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1703
printNameOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1704
	super printNameOn: aStream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1705
	aStream nextPutAll: '', ''; print: message!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1706
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1707
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1708
!!PPFailingParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 4/30/2010 12:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1709
match: aParser inContext: aDictionary seen: anIdentitySet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1710
	^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self message = aParser message ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1711
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1712
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1713
!!PPFailingParser methodsFor: ''accessing'' stamp: ''lr 4/30/2010 11:10''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1714
message
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1715
	"Answer the error message of the receiving parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1716
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1717
	^ message!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1718
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1719
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1720
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1721
PPFailingParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1722
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1723
!!PPFailingParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1724
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1725
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1726
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1727
!!PPFailingParser class methodsFor: ''instance creation'' stamp: ''lr 5/2/2010 19:16''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1728
message: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1729
	^ self new setMessage: aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1730
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1731
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1732
PPParser subclass: #PPLiteralParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1733
	instanceVariableNames: ''literal message''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1734
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1735
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1736
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1737
!!PPLiteralParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1738
Abstract literal parser that parses some kind of literal type (to be specified by subclasses).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1739
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1740
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1741
	literal	<Object>	The literal object to be parsed.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1742
	message	<String>	The error message to be generated.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1743
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1744
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1745
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1746
!!PPLiteralParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 9/15/2010 12:08''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1747
match: aParser inContext: aDictionary seen: anIdentitySet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1748
	^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self literal = aParser literal and: [ self message = aParser message ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1749
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1750
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1751
!!PPLiteralParser methodsFor: ''*petitgui-mondrian'' stamp: ''AlexandreBergel 12/18/2013 17:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1752
visualizationGraphType
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1753
	^ literal printString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1754
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1755
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1756
!!PPLiteralParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:19''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1757
displayName
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1758
	^ literal printString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1759
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1760
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1761
!!PPLiteralParser methodsFor: ''accessing'' stamp: ''lr 5/2/2010 13:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1762
message
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1763
	"Answer the failure message."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1764
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1765
	^ message!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1766
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1767
!!PPLiteralParser methodsFor: ''accessing'' stamp: ''lr 5/2/2010 13:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1768
literal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1769
	"Answer the parsed literal."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1770
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1771
	^ literal!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1772
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1773
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1774
!!PPLiteralParser methodsFor: ''operators'' stamp: ''lr 6/1/2010 22:24''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1775
caseInsensitive
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1776
	"Answer a parser that can parse the receiver case-insensitive."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1777
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1778
	self subclassResponsibility!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1779
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1780
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1781
!!PPLiteralParser methodsFor: ''initialization'' stamp: ''lr 5/2/2010 13:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1782
initializeOn: anObject message: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1783
	literal := anObject.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1784
	message := aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1785
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1786
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1787
!!PPLiteralParser methodsFor: ''printing'' stamp: ''lr 4/16/2010 16:38''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1788
printNameOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1789
	super printNameOn: aStream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1790
	aStream nextPutAll: '', ''; print: literal!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1791
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1792
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1793
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1794
PPLiteralParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1795
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1796
!!PPLiteralParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1797
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1798
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1799
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1800
!!PPLiteralParser class methodsFor: ''instance creation'' stamp: ''lr 1/7/2010 15:29''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1801
on: anObject message: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1802
	^ self new initializeOn: anObject message: aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1803
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1804
!!PPLiteralParser class methodsFor: ''instance creation'' stamp: ''lr 1/7/2010 15:30''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1805
on: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1806
	^ self on: anObject message: anObject printString , '' expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1807
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1808
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1809
PPLiteralParser subclass: #PPLiteralObjectParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1810
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1811
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1812
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1813
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1814
!!PPLiteralObjectParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1815
A parser that accepts a single literal object, such as a character. This is the same as the predicate parser ''PPPredicateParser expect: literal'' but slightly more efficient.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1816
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1817
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1818
!!PPLiteralObjectParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/9/2009 14:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1819
exampleOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1820
	aStream nextPut: literal!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1821
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1822
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1823
!!PPLiteralObjectParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 17:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1824
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1825
	^ (aPPContext stream atEnd not and: [ literal = aPPContext stream uncheckedPeek ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1826
		ifFalse: [ PPFailure message: message context: aPPContext ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1827
		ifTrue: [ aPPContext stream next ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1828
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1829
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1830
!!PPLiteralObjectParser methodsFor: ''operators'' stamp: ''lr 8/18/2010 20:16''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1831
caseInsensitive
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1832
	"Answer a parser that can parse the receiver case-insensitive."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1833
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1834
	literal asUppercase = literal asLowercase ifTrue: [ ^ self ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1835
	^ PPPredicateObjectParser on: [ :value | literal sameAs: value ] message: message!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1836
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1837
!!PPLiteralObjectParser methodsFor: ''operators'' stamp: ''lr 4/28/2011 20:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1838
negate
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1839
	^ (PPPredicateObjectParser expect: literal message: message) negate!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1840
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1841
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1842
PPParser subclass: #PPPredicateParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1843
	instanceVariableNames: ''predicate predicateMessage negated negatedMessage''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1844
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1845
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1846
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1847
!!PPPredicateParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1848
An abstract parser that accepts if a given predicate holds.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1849
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1850
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1851
	predicate	<BlockClosure>	The block testing for the predicate.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1852
	predicateMessage	<String>	The error message of the predicate.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1853
	negated	<BlockClosure>	The block testing for the negation of the predicate.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1854
	negatedMessage	<String>	The error message of the negated predicate.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1855
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1856
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1857
!!PPPredicateParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 9/15/2010 11:56''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1858
match: aParser inContext: aDictionary seen: anIdentitySet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1859
	^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self block = aParser block and: [ self message = aParser message ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1860
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1861
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1862
!!PPPredicateParser methodsFor: ''printing'' stamp: ''lr 5/2/2010 13:37''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1863
printNameOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1864
	super printNameOn: aStream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1865
	aStream nextPutAll: '', ''; print: predicateMessage!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1866
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1867
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1868
!!PPPredicateParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 5/1/2010 17:05''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1869
exampleOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1870
	"Produce a random character that is valid. If there are characters in the alpha-numeric range prefer those over all others."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1871
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1872
	| valid normal |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1873
	valid := Character allCharacters
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1874
		select: [ :char | self matches: (String with: char) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1875
	normal := valid
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1876
		select: [ :char | char asInteger < 127 and: [ char isAlphaNumeric ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1877
	aStream nextPut: (normal isEmpty
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1878
		ifTrue: [ valid atRandom ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1879
		ifFalse: [ normal atRandom ])!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1880
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1881
!!PPPredicateParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 5/2/2010 19:35''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1882
displayName
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1883
	^ predicateMessage!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1884
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1885
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1886
!!PPPredicateParser methodsFor: ''accessing'' stamp: ''lr 5/2/2010 13:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1887
message
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1888
	"Answer the failure message."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1889
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1890
	^ predicateMessage!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1891
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1892
!!PPPredicateParser methodsFor: ''accessing'' stamp: ''lr 5/2/2010 13:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1893
block
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1894
	"Answer the predicate block of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1895
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1896
	^ predicate!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1897
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1898
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1899
PPPredicateParser subclass: #PPPredicateObjectParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1900
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1901
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1902
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1903
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1904
!!PPPredicateObjectParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1905
A parser that accepts if a given predicate on one element of the input sequence holds.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1906
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1907
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1908
!!PPPredicateObjectParser methodsFor: ''operators'' stamp: ''lr 6/12/2010 09:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1909
negate
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1910
	"Answer a parser that is the negation of the receiving predicate parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1911
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1912
	^ self class 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1913
		on: negated message: negatedMessage 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1914
		negated: predicate message: predicateMessage!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1915
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1916
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1917
!!PPPredicateObjectParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 17:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1918
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1919
	^ (aPPContext stream atEnd not and: [ predicate value: aPPContext stream uncheckedPeek ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1920
		ifFalse: [ PPFailure message: predicateMessage context: aPPContext ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1921
		ifTrue: [ aPPContext stream next ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1922
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1923
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1924
!!PPPredicateObjectParser methodsFor: ''initialization'' stamp: ''lr 6/12/2010 09:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1925
initializeOn: aBlock message: aString negated: aNegatedBlock message: aNegatedString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1926
	predicate := aBlock.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1927
	predicateMessage := aString.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1928
	negated := aNegatedBlock.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1929
	negatedMessage := aNegatedString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1930
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1931
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1932
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1933
PPPredicateObjectParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1934
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1935
!!PPPredicateObjectParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1936
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1937
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1938
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1939
!!PPPredicateObjectParser class methodsFor: ''*petitregex-chars'' stamp: ''lr 8/30/2010 14:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1940
control
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1941
	^ self chars: ((0 to: 31) collect: [ :each | Character value: each ]) message: ''control character expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1942
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1943
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1944
!!PPPredicateObjectParser class methodsFor: ''factory-objects'' stamp: ''lr 8/25/2010 10:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1945
expect: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1946
	^ self expect: anObject message: anObject printString , '' expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1947
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1948
!!PPPredicateObjectParser class methodsFor: ''factory-objects'' stamp: ''lr 4/1/2011 20:05''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1949
anyExceptAnyOf: aCollection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1950
	^ self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1951
		on: [ :each | (aCollection includes: each) not ] message: ''any except '' , aCollection printString , '' expected''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1952
		negated: [ :each | aCollection includes: each ] message: aCollection printString ,  '' not expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1953
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1954
!!PPPredicateObjectParser class methodsFor: ''factory-objects'' stamp: ''lr 4/1/2011 20:05''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1955
anyOf: aCollection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1956
	^ self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1957
		on: [ :each | aCollection includes: each ] message: ''any of '' , aCollection printString , '' expected''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1958
		negated: [ :each | (aCollection includes: each) not ] message: ''none of '' , aCollection printString ,  ''expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1959
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1960
!!PPPredicateObjectParser class methodsFor: ''factory-objects'' stamp: ''lr 6/12/2010 09:10''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1961
any
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1962
	^ self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1963
		on: [ :each | true ] message: ''input expected''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1964
		negated: [ :each | false ] message: ''no input expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1965
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1966
!!PPPredicateObjectParser class methodsFor: ''factory-objects'' stamp: ''lr 6/12/2010 09:10''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1967
between: min and: max
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1968
	^ self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1969
		on: [ :each | each >= min and: [ each <= max ] ] message: min printString , ''..'' , max printString , '' expected''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1970
		negated: [ :each | each < min or: [ each > max ] ] message: min printString , ''..'' , max printString , '' not expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1971
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1972
!!PPPredicateObjectParser class methodsFor: ''factory-objects'' stamp: ''lr 8/25/2010 10:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1973
expect: anObject message: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1974
	^ self 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1975
		on: [ :each | each = anObject ] message: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1976
		negated: [ :each | each ~= anObject ] message: ''no '' , aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1977
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1978
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1979
!!PPPredicateObjectParser class methodsFor: ''instance creation'' stamp: ''lr 6/12/2010 09:10''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1980
on: aBlock message: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1981
	^ self on: aBlock message: aString negated: [ :each | (aBlock value: each) not ] message: ''no '' , aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1982
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1983
!!PPPredicateObjectParser class methodsFor: ''instance creation'' stamp: ''lr 6/12/2010 09:10''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1984
on: aBlock message: aString negated: aNegatedBlock message: aNegatedString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1985
	^ self new initializeOn: aBlock message: aString negated: aNegatedBlock message: aNegatedString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1986
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1987
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1988
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1989
char: aCharacter
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1990
	^ self expect: aCharacter message: (String with: $" with: aCharacter with: $") , '' expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1991
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1992
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1993
punctuation
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1994
	^ self chars: ''.,"''''?!!!!;:#$%&()*+-/<>=@[]\^_{}|~'' message: ''punctuation expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1995
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1996
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1997
blank
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1998
	^ self chars: (String with: Character space with: Character tab) message: ''blank expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1999
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2000
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2001
hex
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2002
	^ self 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2003
		on: (PPCharSetPredicate on: [ :char | 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2004
			(char between: $0 and: $9) 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2005
				or: [ (char between: $a and: $f) 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2006
				or: [ (char between: $A and: $F) ] ] ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2007
		message: ''hex digit expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2008
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2009
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2010
newline
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2011
	^ self chars: (String with: Character cr with: Character lf) message: ''newline expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2012
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2013
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2014
word
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2015
	^ self on: (PPCharSetPredicate on: [ :char | char isAlphaNumeric ]) message: ''letter or digit expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2016
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2017
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 6/12/2010 09:10''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2018
lf
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2019
	^ self char: Character lf!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2020
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2021
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2022
digit
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2023
	^ self on: (PPCharSetPredicate on: [ :char | char isDigit ]) message: ''digit expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2024
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2025
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:05''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2026
letter
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2027
	^ self on: (PPCharSetPredicate on: [ :char | char isLetter ]) message: ''letter expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2028
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2029
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2030
uppercase
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2031
	^ self on: (PPCharSetPredicate on: [ :char | char isUppercase ]) message: ''uppercase letter expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2032
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2033
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2034
cr
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2035
	^ self char: Character cr message: ''carriage return expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2036
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2037
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2038
space
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2039
	^ self on: (PPCharSetPredicate on: [ :char | char isSeparator ]) message: ''separator expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2040
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2041
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2042
lowercase
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2043
	^ self on: (PPCharSetPredicate on: [ :char | char isLowercase ]) message: ''lowercase letter expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2044
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2045
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2046
tab
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2047
	^ self char: Character tab message: ''tab expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2048
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2049
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2050
chars: aCollection message: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2051
	^ self on: (PPCharSetPredicate on: [ :char | aCollection includes: char ]) message: aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2052
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2053
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 10:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2054
char: aCharacter message: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2055
	^ self expect: aCharacter message: aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2056
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2057
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2058
PPPredicateParser subclass: #PPPredicateSequenceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2059
	instanceVariableNames: ''size''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2060
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2061
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2062
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2063
!!PPPredicateSequenceParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2064
A parser that accepts if a given predicate on an arbitrary number of elements of the input sequence holds.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2065
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2066
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2067
	size	<Integer>	The number of elements to consume.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2068
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2069
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2070
!!PPPredicateSequenceParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 6/18/2010 14:09''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2071
match: aParser inContext: aDictionary seen: anIdentitySet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2072
	^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self size = aParser size ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2073
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2074
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2075
!!PPPredicateSequenceParser methodsFor: ''operators'' stamp: ''lr 6/12/2010 09:14''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2076
negate
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2077
	"Answer a parser that is the negation of the receiving predicate parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2078
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2079
	^ self class 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2080
		on: negated message: negatedMessage
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2081
		negated: predicate message: predicateMessage
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2082
		size: size!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2083
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2084
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2085
!!PPPredicateSequenceParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 17:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2086
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2087
	| position result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2088
	position := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2089
	result := aPPContext stream next: size.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2090
	(result size = size and: [ predicate value: result ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2091
		ifTrue: [ ^ result ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2092
	aPPContext restore: position.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2093
	^ PPFailure message: predicateMessage context: aPPContext!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2094
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2095
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2096
!!PPPredicateSequenceParser methodsFor: ''accessing'' stamp: ''lr 6/12/2010 08:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2097
size
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2098
	"Answer the sequence size of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2099
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2100
	^ size!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2101
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2102
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2103
!!PPPredicateSequenceParser methodsFor: ''initialization'' stamp: ''lr 6/12/2010 09:13''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2104
initializeOn: aBlock message: aString negated: aNegatedBlock message: aNegatedString size: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2105
	predicate := aBlock.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2106
	predicateMessage := aString.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2107
	negated := aNegatedBlock.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2108
	negatedMessage := aNegatedString.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2109
	size := anInteger !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2110
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2111
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2112
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2113
PPPredicateSequenceParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2114
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2115
!!PPPredicateSequenceParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2116
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2117
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2118
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2119
!!PPPredicateSequenceParser class methodsFor: ''instance creation'' stamp: ''lr 6/12/2010 09:14''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2120
on: aBlock message: aString negated: aNegatedBlock message: aNegatedString size: anInteger 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2121
	^ self new initializeOn: aBlock message: aString negated: aNegatedBlock message: aNegatedString size: anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2122
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2123
!!PPPredicateSequenceParser class methodsFor: ''instance creation'' stamp: ''lr 6/12/2010 09:14''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2124
on: aBlock message: aString size: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2125
	^ self on: aBlock message: aString negated: [ :each | (aBlock value: each) not ] message: ''no '' , aString size: anInteger !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2126
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2127
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2128
PPParser subclass: #PPDelegateParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2129
	instanceVariableNames: ''parser''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2130
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2131
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2132
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2133
!!PPDelegateParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2134
A parser that delegates to another parser.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2135
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2136
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2137
	parser	<PPParser>	The parser to delegate to.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2138
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2139
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2140
!!PPDelegateParser methodsFor: ''accessing'' stamp: ''lr 10/21/2009 16:37''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2141
children
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2142
	^ Array with: parser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2143
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2144
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2145
!!PPDelegateParser methodsFor: ''*petitanalyzer-transforming'' stamp: ''lr 4/13/2010 09:39''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2146
replace: aParser with: anotherParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2147
	super replace: aParser with: anotherParser.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2148
	parser == aParser ifTrue: [ parser := anotherParser ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2149
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2150
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2151
!!PPDelegateParser methodsFor: ''pp-context'' stamp: ''JanKurs 11/11/2013 09:31''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2152
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2153
	^ parser parseOn: aPPContext!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2154
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2155
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2156
!!PPDelegateParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/9/2009 14:27''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2157
exampleOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2158
	parser exampleOn: aStream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2159
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2160
!!PPDelegateParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:20''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2161
displayDescription
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2162
	^ nil!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2163
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2164
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2165
!!PPDelegateParser methodsFor: ''initialization'' stamp: ''lr 4/20/2008 16:23''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2166
setParser: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2167
	parser := aParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2168
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2169
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2170
!!PPDelegateParser methodsFor: ''*petitgui-morphic'' stamp: ''lr 11/18/2009 11:21''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2171
morphicShapeSeen: aSet depth: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2172
	^ self morphicShapeSeen: aSet depth: anInteger do: [ :cc |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2173
		self displayDescription isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2174
			ifTrue: [ cc value: parser ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2175
			ifFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2176
				self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2177
					addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2178
						addMorphBack: (self newSpacerMorph height: 10);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2179
						addMorphBack: (LineMorph from: 0 @ 0 to: 20 @ 0 color: Color black width: 1);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2180
						yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2181
					addMorphBack: (self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2182
						color: (self backgroundForDepth: anInteger);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2183
						addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2184
							addMorphBack: (cc value: parser);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2185
							addMorphBack: (self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2186
								hResizing: #spaceFill;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2187
								addMorphBack: (self newSpacerMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2188
									width: 20;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2189
									yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2190
								addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2191
									hResizing: #spaceFill;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2192
									listCentering: #center;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2193
									addMorphBack: (self newSpacerMorph);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2194
									addMorphBack: (StringMorph new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2195
										contents: self displayDescription;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2196
										yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2197
									yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2198
								yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2199
							yourself);		
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2200
						addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2201
							addMorphBack: (self newSpacerMorph height: 10);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2202
							addMorphBack: (LineMorph from: 0 @ 0 to: 20 @ 0 color: Color black width: 1);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2203
							yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2204
						yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2205
					yourself ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2206
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2207
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2208
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2209
PPDelegateParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2210
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2211
!!PPDelegateParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2212
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2213
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2214
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2215
!!PPDelegateParser class methodsFor: ''instance creation'' stamp: ''lr 4/20/2008 16:22''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2216
on: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2217
	^ self new setParser: aParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2218
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2219
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2220
PPDelegateParser subclass: #PPAndParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2221
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2222
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2223
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2224
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2225
!!PPAndParser commentStamp: ''TudorGirba 2/27/2011 22:22'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2226
The and-predicate, a parser that succeeds whenever its delegate does, but does not consume the input stream [Parr 1994, 1995].!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2227
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2228
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2229
!!PPAndParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 5/1/2010 16:16''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2230
exampleOn: aStream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2231
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2232
!!PPAndParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:17''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2233
displayDescription
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2234
	^ ''and''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2235
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2236
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2237
!!PPAndParser methodsFor: ''operators'' stamp: ''lr 5/1/2010 16:16''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2238
and
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2239
	^ self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2240
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2241
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2242
!!PPAndParser methodsFor: ''pp-context'' stamp: ''JanKurs 1/15/2014 15:50''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2243
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2244
	| element position |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2245
	position := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2246
	element := parser parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2247
	aPPContext restore: position.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2248
	^ element!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2249
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2250
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2251
PPDelegateParser subclass: #PPTrimmingParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2252
	instanceVariableNames: ''trimmer''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2253
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2254
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2255
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2256
!!PPTrimmingParser commentStamp: ''lr 4/6/2010 19:27'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2257
A parser that silently consumes spaces before and after the delegate parser.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2258
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2259
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2260
!!PPTrimmingParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 4/14/2010 20:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2261
exampleOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2262
	super exampleOn: aStream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2263
	aStream nextPut: Character space!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2264
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2265
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2266
!!PPTrimmingParser methodsFor: ''pp-context'' stamp: ''JanKurs 1/15/2014 15:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2267
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2268
	| position element |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2269
	position := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2270
	[ (trimmer parseOn: aPPContext) isPetitFailure ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2271
		whileFalse.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2272
	element := parser parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2273
	element isPetitFailure ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2274
		aPPContext restore: position.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2275
		^ element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2276
	[ (trimmer parseOn: aPPContext) isPetitFailure ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2277
		whileFalse.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2278
	^ element!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2279
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2280
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2281
!!PPTrimmingParser methodsFor: ''initialization'' stamp: ''lr 7/31/2010 12:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2282
setTrimmer: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2283
	trimmer := aParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2284
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2285
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2286
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2287
PPTrimmingParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2288
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2289
!!PPTrimmingParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2290
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2291
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2292
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2293
!!PPTrimmingParser class methodsFor: ''instance creation'' stamp: ''lr 7/31/2010 12:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2294
on: aParser trimmer: aTrimParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2295
	^ self new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2296
		setParser: aParser;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2297
		setTrimmer: aTrimParser;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2298
		yourself!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2299
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2300
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2301
PPDelegateParser subclass: #PPMemoizedParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2302
	instanceVariableNames: ''buffer context''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2303
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2304
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2305
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2306
!!PPMemoizedParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2307
A memoized parser, for refraining redundant computations.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2308
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2309
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2310
	stream	<PositionableStream>	The stream of the associated memento objects.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2311
	buffer	<Array of: PPMemento>	The buffer of memento objects.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2312
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2313
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2314
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2315
!!PPMemoizedParser methodsFor: ''operators'' stamp: ''lr 4/2/2009 19:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2316
memoized
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2317
	"Ther is no point in memoizing more than once."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2318
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2319
	^ self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2320
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2321
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2322
!!PPMemoizedParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 13:20''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2323
reset: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2324
	context := aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2325
	buffer := Dictionary new.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2326
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2327
!!PPMemoizedParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 17:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2328
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2329
	| memento contextMemento  aStream |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2330
	"TODO: JK memoizing needs review!!!!"
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2331
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2332
	contextMemento := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2333
	context == aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2334
		ifFalse: [ self reset: aPPContext ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2335
	memento := (buffer at: contextMemento ifAbsentPut: [ PPMemento new ]).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2336
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2337
	memento contextMemento isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2338
		ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2339
			aStream := aPPContext stream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2340
			memento result: (aStream size - aStream position + 2 < memento count
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2341
				ifTrue: [ PPFailure message: ''overflow'' context: aPPContext ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2342
				ifFalse: [ memento increment. parser parseOn: aPPContext ]).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2343
			memento contextMemento: aPPContext remember ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2344
		ifFalse: [ context restore: memento contextMemento ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2345
	^ memento result.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2346
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2347
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2348
PPDelegateParser subclass: #PPEndOfInputParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2349
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2350
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2351
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2352
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2353
!!PPEndOfInputParser commentStamp: ''lr 4/18/2008 13:46'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2354
A parser that succeeds only at the end of the input stream.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2355
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2356
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2357
!!PPEndOfInputParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 16:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2358
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2359
	| position result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2360
	position := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2361
	result := parser parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2362
	(result isPetitFailure or: [ aPPContext stream atEnd ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2363
		ifTrue: [ ^ result ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2364
	result := PPFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2365
		message: ''end of input expected''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2366
		context: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2367
	aPPContext restore: position.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2368
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2369
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2370
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2371
!!PPEndOfInputParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:18''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2372
displayDescription
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2373
	^ ''end of input''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2374
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2375
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2376
!!PPEndOfInputParser methodsFor: ''operators'' stamp: ''lr 12/7/2009 08:53''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2377
end
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2378
	^ self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2379
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2380
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2381
PPDelegateParser subclass: #PPActionParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2382
	instanceVariableNames: ''block''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2383
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2384
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2385
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2386
!!PPActionParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2387
A parser that performs an action block with the successful parse result of the delegate.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2388
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2389
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2390
	block	<BlockClosure>	The action block to be executed.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2391
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2392
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2393
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2394
!!PPActionParser methodsFor: ''initialization'' stamp: ''lr 5/2/2010 16:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2395
setBlock: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2396
	block := aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2397
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2398
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2399
!!PPActionParser methodsFor: ''*petitgui-mondrian'' stamp: ''AlexandreBergel 12/18/2013 16:41''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2400
visualizationGraphType
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2401
	^ ''[]''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2402
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2403
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2404
!!PPActionParser methodsFor: ''pp-context'' stamp: ''JanKurs 11/11/2013 09:31''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2405
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2406
	| element |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2407
	^ (element := parser parseOn: aPPContext) isPetitFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2408
		ifFalse: [ block value: element ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2409
		ifTrue: [ element ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2410
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2411
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2412
!!PPActionParser methodsFor: ''accessing'' stamp: ''lr 4/30/2010 11:10''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2413
block
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2414
	"Answer the action block of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2415
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2416
	^ block!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2417
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2418
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2419
!!PPActionParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 5/7/2011 15:08''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2420
match: aParser inContext: aDictionary seen: anIdentitySet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2421
	^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self block = aParser block ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2422
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2423
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2424
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2425
PPActionParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2426
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2427
!!PPActionParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2428
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2429
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2430
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2431
!!PPActionParser class methodsFor: ''instance creation'' stamp: ''lr 5/2/2010 16:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2432
on: aParser block: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2433
	^ (self on: aParser) setBlock: aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2434
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2435
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2436
PPActionParser subclass: #PPWrappingParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2437
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2438
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2439
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2440
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2441
!!PPWrappingParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2442
A parser that performs an action block upon activation with the stream and a continuation block.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2443
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2444
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2445
!!PPWrappingParser methodsFor: ''pp-context'' stamp: ''JanKurs 11/11/2013 09:31''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2446
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2447
	^ block value: aPPContext value: [ parser parseOn: aPPContext ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2448
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2449
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2450
PPParser subclass: #PPListParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2451
	instanceVariableNames: ''parsers''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2452
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2453
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2454
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2455
!!PPListParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2456
Abstract parser that parses a list of things in some way (to be specified by the subclasses).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2457
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2458
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2459
	parsers	<SequenceableCollection of: PPParser>	A sequence of other parsers to delegate to.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2460
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2461
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2462
!!PPListParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 4/30/2010 08:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2463
copyInContext: aDictionary seen: aSeenDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2464
	| copy copies |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2465
	aSeenDictionary at: self ifPresent: [ :value | ^ value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2466
	copy := aSeenDictionary at: self put: self copy.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2467
	copies := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2468
	parsers do: [ :each |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2469
		| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2470
		result := each 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2471
			copyInContext: aDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2472
			seen: aSeenDictionary.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2473
		result isCollection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2474
			ifTrue: [ copies addAll: result ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2475
			ifFalse: [ copies add: result ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2476
	^ copy
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2477
		setParsers: copies;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2478
		yourself!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2479
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2480
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2481
!!PPListParser methodsFor: ''*petitanalyzer-transforming'' stamp: ''lr 5/22/2010 10:24''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2482
replace: aParser with: anotherParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2483
	super replace: aParser with: anotherParser.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2484
	parsers keysAndValuesDo: [ :index :parser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2485
		parser == aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2486
			ifTrue: [ parsers at: index put: anotherParser ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2487
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2488
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2489
!!PPListParser methodsFor: ''initialization'' stamp: ''lr 4/29/2010 10:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2490
setParsers: aCollection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2491
	parsers := aCollection asArray!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2492
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2493
!!PPListParser methodsFor: ''initialization'' stamp: ''lr 4/29/2010 10:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2494
initialize
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2495
	super initialize.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2496
	self setParsers: #()!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2497
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2498
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2499
!!PPListParser methodsFor: ''accessing'' stamp: ''lr 10/21/2009 16:37''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2500
children
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2501
	^ parsers!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2502
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2503
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2504
!!PPListParser methodsFor: ''copying'' stamp: ''lr 9/17/2008 22:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2505
copyWith: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2506
	^ self species withAll: (parsers copyWith: aParser)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2507
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2508
!!PPListParser methodsFor: ''copying'' stamp: ''lr 5/22/2010 10:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2509
postCopy
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2510
	super postCopy.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2511
	parsers := parsers copy!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2512
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2513
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2514
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2515
PPListParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2516
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2517
!!PPListParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2518
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2519
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2520
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2521
!!PPListParser class methodsFor: ''instance creation'' stamp: ''lr 9/23/2008 18:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2522
with: aFirstParser with: aSecondParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2523
	^ self withAll: (Array with: aFirstParser with: aSecondParser)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2524
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2525
!!PPListParser class methodsFor: ''instance creation'' stamp: ''lr 5/3/2010 20:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2526
with: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2527
	^ self withAll: (Array with: aParser)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2528
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2529
!!PPListParser class methodsFor: ''instance creation'' stamp: ''lr 4/29/2010 10:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2530
withAll: aCollection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2531
	^ self basicNew setParsers: aCollection!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2532
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2533
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2534
PPListParser subclass: #PPChoiceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2535
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2536
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2537
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2538
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2539
!!PPChoiceParser commentStamp: ''lr 4/18/2008 15:35'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2540
A parser that uses the first parser that succeeds.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2541
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2542
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2543
!!PPChoiceParser methodsFor: ''*petitgui-mondrian'' stamp: ''AlexandreBergel 12/18/2013 16:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2544
visualizationGraphType
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2545
	^ ''/''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2546
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2547
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2548
!!PPChoiceParser methodsFor: ''operators'' stamp: ''lr 9/17/2008 00:16''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2549
/ aRule 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2550
	^ self copyWith: aRule!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2551
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2552
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2553
!!PPChoiceParser methodsFor: ''pp-context'' stamp: ''JanKurs 11/11/2013 09:31''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2554
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2555
	"This is optimized code that avoids unnecessary block activations, do not change. When all choices fail, the last failure is answered."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2556
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2557
	| element |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2558
	1 to: parsers size do: [ :index |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2559
		element := (parsers at: index)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2560
			parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2561
		element isPetitFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2562
			ifFalse: [ ^ element ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2563
	^ element!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2564
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2565
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2566
!!PPChoiceParser methodsFor: ''*petitgui-morphic'' stamp: ''lr 5/2/2010 20:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2567
exampleOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2568
	"If there is already a lot written, try to pick an empty possiblity."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2569
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2570
	aStream position > 512 ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2571
		(parsers anySatisfy: [ :each | each isNullable ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2572
			ifTrue: [ ^ self ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2573
	parsers atRandom exampleOn: aStream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2574
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2575
!!PPChoiceParser methodsFor: ''*petitgui-morphic'' stamp: ''lr 11/18/2009 11:14''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2576
morphicShapeSeen: aSet depth: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2577
	^ self morphicShapeSeen: aSet depth: anInteger do: [ :cc |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2578
		| morph |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2579
		morph := self newColumnMorph 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2580
			cellInset: 5;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2581
			yourself.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2582
		self children do: [ :each | 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2583
			morph addMorphBack: (self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2584
				hResizing: #spaceFill;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2585
				addMorphBack: (cc value: each);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2586
				addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2587
					hResizing: #spaceFill;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2588
					addMorphBack: (self newSpacerMorph height: 10);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2589
					addMorphBack: ((LineMorph from: 0 @ 0 to: 20 @ 0 color: Color black width: 1)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2590
						hResizing: #spaceFill;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2591
						minWidth: 20;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2592
						yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2593
					yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2594
				yourself) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2595
		morph fullBounds.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2596
		self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2597
			addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2598
				addMorphBack: (self newSpacerMorph height: 10);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2599
				addMorphBack: (LineMorph from: 0 @ 0 to: 20 @ 0 color: Color black width: 1);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2600
				yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2601
			addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2602
				addMorphBack: (self newSpacerMorph width: 1; height: 10);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2603
				addMorphBack: (LineMorph from: 0 @ 0 to: 0 @ (morph height - 23) color: Color black width: 1);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2604
				yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2605
			addMorphBack: morph;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2606
			addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2607
				addMorphBack: (self newSpacerMorph width: 1; height: 10);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2608
				addMorphBack: (LineMorph from: 0 @ (morph height - 23) to: 0 @ 0 color: Color black width: 1)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2609
					makeForwardArrow;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2610
					width: 1;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2611
				yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2612
			yourself ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2613
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2614
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2615
PPDelegateParser subclass: #PPNotParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2616
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2617
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2618
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2619
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2620
!!PPNotParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2621
The not-predicate, a parser that succeeds whenever its delegate does not, but consumes no input [Parr 1994, 1995].!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2622
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2623
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2624
!!PPNotParser methodsFor: ''*petitanalyzer-testing'' stamp: ''JanKurs 5/31/2013 11:50''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2625
isFirstSetTerminal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2626
	^ true!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2627
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2628
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2629
!!PPNotParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 17:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2630
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2631
	| element position |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2632
	position := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2633
	element := parser parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2634
	aPPContext restore: position.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2635
	^ element isPetitFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2636
		ifFalse: [ PPFailure message: '''' context: aPPContext ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2637
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2638
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2639
!!PPNotParser methodsFor: ''*petitanalyzer-private'' stamp: ''JanKurs 5/31/2013 11:50''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2640
firstSets: aFirstDictionary into: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2641
	!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2642
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2643
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2644
!!PPNotParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/11/2009 21:09''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2645
exampleOn: aStream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2646
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2647
!!PPNotParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:17''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2648
displayDescription
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2649
	^ ''not''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2650
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2651
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2652
PPLiteralParser subclass: #PPLiteralSequenceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2653
	instanceVariableNames: ''size''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2654
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2655
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2656
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2657
!!PPLiteralSequenceParser commentStamp: ''lr 12/4/2009 18:39'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2658
A parser accepts a sequence of literal objects, such as a String. This is an optimization to avoid having to compose longer sequences from PPSequenceParser.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2659
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2660
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2661
!!PPLiteralSequenceParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 16:38''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2662
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2663
	| memento result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2664
	memento := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2665
	result := aPPContext stream next: size.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2666
	literal = result ifTrue: [ ^ result ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2667
	aPPContext restore: memento.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2668
	^ PPFailure message: message context: aPPContext!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2669
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2670
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2671
!!PPLiteralSequenceParser methodsFor: ''initialization'' stamp: ''lr 6/1/2010 22:21''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2672
initializeOn: anObject message: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2673
	super initializeOn: anObject message: aString.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2674
	size := literal size!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2675
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2676
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2677
!!PPLiteralSequenceParser methodsFor: ''accessing'' stamp: ''lr 9/15/2010 11:16''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2678
size
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2679
	"Answer the sequence size of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2680
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2681
	^ size!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2682
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2683
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2684
!!PPLiteralSequenceParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/9/2009 14:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2685
exampleOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2686
	aStream nextPutAll: literal!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2687
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2688
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2689
!!PPLiteralSequenceParser methodsFor: ''operators'' stamp: ''lr 8/18/2010 20:16''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2690
caseInsensitive
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2691
	"Answer a parser that can parse the receiver case-insensitive."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2692
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2693
	literal asUppercase = literal asLowercase ifTrue: [ ^ self ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2694
	^ PPPredicateSequenceParser on: [ :value | literal sameAs: value ] message: message size: size!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2695
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2696
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2697
PPDelegateParser subclass: #PPOptionalParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2698
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2699
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2700
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2701
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2702
!!PPOptionalParser commentStamp: ''lr 4/3/2011 14:46'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2703
A parser that optionally parsers its delegate, or answers nil.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2704
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2705
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2706
!!PPOptionalParser methodsFor: ''*petitanalyzer-testing'' stamp: ''lr 9/1/2010 22:10''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2707
isNullable
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2708
	^ true!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2709
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2710
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2711
!!PPOptionalParser methodsFor: ''*petitgui-mondrian'' stamp: ''AlexandreBergel 12/18/2013 16:44''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2712
visualizationGraphType
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2713
	^ ''?''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2714
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2715
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2716
!!PPOptionalParser methodsFor: ''pp-context'' stamp: ''JanKurs 3/19/2014 15:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2717
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2718
	| element |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2719
	element := parser parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2720
	^ element isPetitFailure ifFalse: [ element ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2721
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2722
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2723
PPDelegateParser subclass: #PPFlattenParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2724
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2725
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2726
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2727
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2728
!!PPFlattenParser commentStamp: ''lr 11/22/2009 13:09'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2729
A parser that answers a flat copy of the range my delegate parses.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2730
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2731
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2732
!!PPFlattenParser methodsFor: ''private'' stamp: ''lr 2/25/2013 23:31''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2733
on: aCollection start: aStartInteger stop: aStopInteger value: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2734
	^ aCollection copyFrom: aStartInteger to: aStopInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2735
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2736
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2737
!!PPFlattenParser methodsFor: ''pp-context'' stamp: ''JanKurs 1/15/2014 15:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2738
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2739
	| start element |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2740
	start := aPPContext stream position.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2741
	element := parser parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2742
	element isPetitFailure ifTrue: [ ^ element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2743
	^ self on: aPPContext stream collection start: start + 1 stop: aPPContext stream position value: element!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2744
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2745
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2746
PPFlattenParser subclass: #PPTokenParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2747
	instanceVariableNames: ''tokenClass''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2748
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2749
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2750
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2751
!!PPTokenParser commentStamp: ''lr 2/25/2013 23:31'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2752
A parser that answers a token with the value of my delegate parses.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2753
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2754
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2755
	tokenClass	<PPToken class>	The token sub-class to be used.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2756
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2757
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2758
!!PPTokenParser methodsFor: ''private'' stamp: ''lr 4/6/2010 19:18''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2759
defaultTokenClass
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2760
	^ PPToken!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2761
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2762
!!PPTokenParser methodsFor: ''private'' stamp: ''lr 2/25/2013 23:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2763
on: aCollection start: aStartInteger stop: aStopInteger value: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2764
	^ self tokenClass on: aCollection start: aStartInteger stop: aStopInteger value: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2765
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2766
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2767
!!PPTokenParser methodsFor: ''initialization'' stamp: ''lr 4/6/2010 19:19''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2768
initialize
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2769
	tokenClass := self defaultTokenClass
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2770
	!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2771
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2772
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2773
!!PPTokenParser methodsFor: ''accessing'' stamp: ''lr 4/6/2010 19:23''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2774
tokenClass
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2775
	^ tokenClass!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2776
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2777
!!PPTokenParser methodsFor: ''accessing'' stamp: ''lr 4/6/2010 19:24''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2778
tokenClass: aTokenClass
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2779
	tokenClass := aTokenClass!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2780
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2781
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2782
!!PPTokenParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 6/18/2010 14:09''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2783
match: aParser inContext: aDictionary seen: anIdentitySet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2784
	^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self tokenClass = aParser tokenClass ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2785
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2786
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2787
PPDelegateParser subclass: #PPRepeatingParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2788
	instanceVariableNames: ''min max''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2789
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2790
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2791
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2792
!!PPRepeatingParser commentStamp: ''lr 4/3/2011 14:45'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2793
An abstract parser that repeatedly parses between ''min'' and ''max'' instances of its delegate. The default configuration parses an infinite number of elements, as ''min'' is set to 0 and ''max'' to infinity (SmallInteger maxVal).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2794
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2795
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2796
	min	<Integer>	The minimum number of repetitions.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2797
	max	<Integer>	The maximum number of repetitions.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2798
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2799
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2800
!!PPRepeatingParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 6/18/2010 14:09''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2801
match: aParser inContext: aDictionary seen: anIdentitySet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2802
	^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self min = aParser min and: [ self max = aParser max ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2803
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2804
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2805
!!PPRepeatingParser methodsFor: ''initialization'' stamp: ''lr 4/1/2011 21:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2806
setMax: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2807
	max := anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2808
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2809
!!PPRepeatingParser methodsFor: ''initialization'' stamp: ''lr 4/1/2011 21:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2810
setMin: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2811
	min := anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2812
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2813
!!PPRepeatingParser methodsFor: ''initialization'' stamp: ''lr 4/1/2011 21:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2814
initialize
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2815
	super initialize.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2816
	self setMin: 0; setMax: SmallInteger maxVal!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2817
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2818
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2819
!!PPRepeatingParser methodsFor: ''accessing'' stamp: ''lr 4/30/2010 11:08''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2820
max
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2821
	"Answer the maximum number of repetitions."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2822
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2823
	^ max!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2824
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2825
!!PPRepeatingParser methodsFor: ''accessing'' stamp: ''lr 4/30/2010 11:08''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2826
min
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2827
	"Answer the minimum number of repetitions."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2828
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2829
	^ min!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2830
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2831
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2832
!!PPRepeatingParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/11/2009 20:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2833
exampleOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2834
	"Perform the minimal repeatitions required, and a random amount of more if possible and if not that much output has been produced yet."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2835
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2836
	min timesRepeat: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2837
		super exampleOn: aStream ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2838
	(max - min min: 5) atRandom timesRepeat: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2839
		aStream position > 512
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2840
			ifTrue: [ ^ self ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2841
		super exampleOn: aStream ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2842
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2843
!!PPRepeatingParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:18''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2844
displayDescription
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2845
	^ String streamContents: [ :stream |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2846
		min = 0 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2847
			ifFalse: [ stream print: min; nextPutAll: ''..'' ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2848
		max = SmallInteger maxVal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2849
			ifTrue: [ stream nextPut: $* ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2850
			ifFalse: [ stream print: max ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2851
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2852
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2853
!!PPRepeatingParser methodsFor: ''*petitanalyzer-testing'' stamp: ''lr 10/21/2009 12:13''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2854
isNullable
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2855
	^ min = 0!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2856
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2857
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2858
!!PPRepeatingParser methodsFor: ''*petitanalyzer-private'' stamp: ''JanKurs 5/31/2013 11:51''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2859
followSets: aFollowDictionary firstSets: aFirstDictionary into: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2860
	| firstSet |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2861
	super followSets: aFollowDictionary firstSets:  aFirstDictionary into: aSet.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2862
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2863
	firstSet := aFirstDictionary at: self.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2864
	self children do: [:p | (aFollowDictionary at: p) addAll: (firstSet reject: [:each | each isNullable]) ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2865
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2866
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2867
!!PPRepeatingParser methodsFor: ''*petitgui-mondrian'' stamp: ''AlexandreBergel 12/18/2013 16:44''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2868
visualizationGraphType
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2869
	^ ''*''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2870
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2871
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2872
!!PPRepeatingParser methodsFor: ''printing'' stamp: ''lr 6/3/2010 14:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2873
printOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2874
	super printOn: aStream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2875
	aStream nextPutAll: '' [''; print: min; nextPutAll: '', ''; nextPutAll: (max = SmallInteger maxVal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2876
		ifTrue: [ ''*'' ] ifFalse: [ max printString ]); nextPut: $]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2877
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2878
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2879
PPRepeatingParser subclass: #PPPossessiveRepeatingParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2880
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2881
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2882
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2883
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2884
!!PPPossessiveRepeatingParser commentStamp: ''lr 4/3/2011 14:35'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2885
The default repeating parser with standard PEG semantics (i.e. possessive, blind, eager).!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2886
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2887
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2888
!!PPPossessiveRepeatingParser methodsFor: ''pp-context'' stamp: ''JanKurs 1/15/2014 15:43''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2889
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2890
	| start element elements |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2891
	start := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2892
	elements := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2893
	[ elements size < min ] whileTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2894
		(element := parser parseOn: aPPContext) isPetitFailure ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2895
			aPPContext restore: start.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2896
			^ element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2897
		elements addLast: element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2898
	[ elements size < max ] whileTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2899
	 	(element := parser parseOn: aPPContext) isPetitFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2900
			ifTrue: [ ^ elements asArray ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2901
		elements addLast: element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2902
	^ elements asArray!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2903
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2904
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2905
PPRepeatingParser subclass: #PPLimitedRepeatingParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2906
	instanceVariableNames: ''limit''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2907
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2908
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2909
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2910
!!PPLimitedRepeatingParser commentStamp: ''lr 4/3/2011 14:37'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2911
An abstract parser that repeatedly parses between ''min'' and ''max'' instances of my delegate and that requires the input to be completed with a specified parser ''limit''. Subclasses provide repeating behavior as typically seen in regular expression implementations (non-blind).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2912
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2913
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2914
	limit	<PPParser>	The parser to complete the input with.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2915
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2916
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2917
!!PPLimitedRepeatingParser methodsFor: ''*petitanalyzer-transforming'' stamp: ''lr 4/4/2011 18:46''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2918
replace: aParser with: anotherParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2919
	super replace: aParser with: anotherParser.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2920
	limit == aParser ifTrue: [ limit := anotherParser ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2921
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2922
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2923
!!PPLimitedRepeatingParser methodsFor: ''initialization'' stamp: ''lr 4/2/2011 10:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2924
setLimit: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2925
	limit := aParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2926
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2927
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2928
!!PPLimitedRepeatingParser methodsFor: ''accessing'' stamp: ''lr 4/4/2011 18:46''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2929
children
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2930
	^ Array with: parser with: limit!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2931
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2932
!!PPLimitedRepeatingParser methodsFor: ''accessing'' stamp: ''lr 4/2/2011 10:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2933
limit
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2934
	"Answer the parser that limits (or ends) this repetition."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2935
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2936
	^ limit!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2937
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2938
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2939
!!PPLimitedRepeatingParser methodsFor: ''pp-context'' stamp: ''JanKurs 1/15/2014 16:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2940
matchesLimitOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2941
	| element position |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2942
	position := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2943
	element := limit parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2944
	aPPContext restore: position.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2945
	^ element isPetitFailure not!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2946
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2947
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2948
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2949
PPLimitedRepeatingParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2950
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2951
!!PPLimitedRepeatingParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2952
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2953
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2954
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2955
!!PPLimitedRepeatingParser class methodsFor: ''instance creation'' stamp: ''lr 4/3/2011 14:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2956
on: aParser limit: aLimitParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2957
	^ (self on: aParser) setLimit: aLimitParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2958
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2959
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2960
PPLimitedRepeatingParser subclass: #PPGreedyRepeatingParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2961
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2962
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2963
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2964
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2965
!!PPGreedyRepeatingParser commentStamp: ''lr 4/3/2011 15:08'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2966
A greedy repeating parser, commonly seen in regular expression implementations. It aggressively consumes as much input as possible and then backtracks to meet the ''limit'' condition.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2967
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2968
This class essentially implements the iterative version of the following recursive parser composition:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2969
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2970
	| parser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2971
	parser := PPChoiceParser new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2972
	parser setParsers: (Array
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2973
		with: (self , parser map: [ :each :rest | rest addFirst: each; yourself ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2974
		with: (limit and ==> [ :each | OrderedCollection new ])).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2975
	^ parser ==> [ :rest | rest asArray ]!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2976
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2977
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2978
!!PPGreedyRepeatingParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 16:59''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2979
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2980
	| start element elements positions |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2981
	start := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2982
	elements := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2983
	[ elements size < min ] whileTrue: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2984
		(element := parser parseOn: aPPContext) isPetitFailure ifTrue: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2985
			aPPContext restore: start.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2986
			^ element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2987
		elements addLast: element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2988
	positions := OrderedCollection with: aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2989
	[ elements size < max and: [ (element := parser parseOn: aPPContext) isPetitFailure not ] ] whileTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2990
		elements addLast: element.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2991
		positions addLast: aPPContext remember ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2992
	[ positions isEmpty ] whileFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2993
		aPPContext restore: positions last.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2994
		element := limit parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2995
		element isPetitFailure ifFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2996
			aPPContext restore: positions last.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2997
			^ elements asArray ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2998
		elements isEmpty ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2999
			aPPContext restore: start.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3000
			^ element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3001
		elements removeLast.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3002
		positions removeLast ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3003
	aPPContext restore: start.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3004
	^ PPFailure message: ''overflow'' context: aPPContext at: start!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3005
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3006
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3007
PPParser subclass: #PPEpsilonParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3008
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3009
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3010
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3011
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3012
!!PPEpsilonParser commentStamp: ''lr 5/15/2008 15:09'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3013
A parser that consumes nothing and always succeeds.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3014
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3015
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3016
!!PPEpsilonParser methodsFor: ''*petitanalyzer-testing'' stamp: ''lr 10/21/2009 12:11''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3017
isNullable
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3018
	^ true!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3019
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3020
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3021
!!PPEpsilonParser methodsFor: ''*petitgui-morphic'' stamp: ''lr 11/18/2009 11:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3022
morphicShapeSeen: aSet depth: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3023
	^ self morphicShapeSeen: aSet depth: anInteger do: [ :cc |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3024
		self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3025
			addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3026
				addMorphBack: (self newSpacerMorph height: 10);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3027
				addMorphBack: (LineMorph from: 0 @ 0 to: 20 @ 0 color: Color black width: 1);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3028
				yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3029
			yourself ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3030
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3031
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3032
!!PPEpsilonParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/6/2009 18:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3033
displayName
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3034
	^ ''epsilon''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3035
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3036
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3037
!!PPEpsilonParser methodsFor: ''parsing'' stamp: ''lr 2/7/2010 20:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3038
parseOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3039
	^ nil!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3040
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3041
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3042
PPLimitedRepeatingParser subclass: #PPLazyRepeatingParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3043
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3044
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3045
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3046
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3047
!!PPLazyRepeatingParser commentStamp: ''lr 4/3/2011 15:08'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3048
A lazy repeating parser, commonly seen in regular expression implementations. It limits its consumption to meet the ''limit'' condition as early as possible.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3049
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3050
This class essentially implements the iterative version of the following recursive parser composition:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3051
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3052
	| parser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3053
	parser := PPChoiceParser new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3054
	parser setParsers: (Array
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3055
		with: (limit and ==> [ :each | OrderedCollection new ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3056
		with: (self , parser map: [ :each :rest | rest addFirst: each; yourself ])).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3057
	^ parser ==> [ :rest | rest asArray ]!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3058
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3059
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3060
!!PPLazyRepeatingParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 17:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3061
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3062
	| start element elements |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3063
	start := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3064
	elements := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3065
	[ elements size < min ] whileTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3066
		(element := parser parseOn: aPPContext) isPetitFailure ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3067
			aPPContext restore: start.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3068
			^ element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3069
		elements addLast: element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3070
	[ self matchesLimitOn: aPPContext ] whileFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3071
		elements size < max ifFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3072
			aPPContext restore: start.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3073
			^ PPFailure message: ''overflow'' context: aPPContext at: start ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3074
		element := parser parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3075
		element isPetitFailure ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3076
			aPPContext restore: start.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3077
			^ element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3078
		elements addLast: element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3079
	^ elements asArray!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3080
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3081
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3082
PPListParser subclass: #PPSequenceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3083
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3084
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3085
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3086
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3087
!!PPSequenceParser commentStamp: ''lr 4/18/2008 15:34'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3088
A parser that parses a sequence of parsers.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3089
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3090
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3091
!!PPSequenceParser methodsFor: ''operators-mapping'' stamp: ''lr 5/6/2011 20:27''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3092
map: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3093
	^ aBlock numArgs = self children size
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3094
		ifTrue: [ self ==> [ :nodes | aBlock valueWithArguments: nodes ] ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3095
		ifFalse: [ self error: aBlock numArgs asString , '' arguments expected.'' ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3096
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3097
!!PPSequenceParser methodsFor: ''operators-mapping'' stamp: ''lr 1/8/2010 12:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3098
permutation: anArrayOfIntegers
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3099
	"Answer a permutation of the receivers sequence."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3100
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3101
	anArrayOfIntegers do: [ :index |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3102
		(index isInteger and: [ index between: 1 and: parsers size ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3103
			ifFalse: [ self error: ''Invalid permutation index: '' , index printString ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3104
	^ self ==> [ :nodes | anArrayOfIntegers collect: [ :index | nodes at: index ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3105
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3106
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3107
!!PPSequenceParser methodsFor: ''*petitgui-morphic'' stamp: ''lr 11/17/2009 21:54''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3108
morphicShapeSeen: aSet depth: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3109
	^ self morphicShapeSeen: aSet depth: anInteger do: [ :cc |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3110
		self children
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3111
			inject: self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3112
			into: [ :result :each | 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3113
				result 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3114
					addMorphBack: (cc value: each);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3115
					yourself ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3116
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3117
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3118
!!PPSequenceParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/9/2009 14:24''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3119
exampleOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3120
	parsers do: [ :each | each exampleOn: aStream ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3121
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3122
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3123
!!PPSequenceParser methodsFor: ''pp-context'' stamp: ''JanKurs 11/11/2013 09:43''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3124
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3125
	"This is optimized code that avoids unnecessary block activations, do not change."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3126
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3127
	| start elements element |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3128
	start := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3129
	elements := Array new: parsers size.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3130
	1 to: parsers size do: [ :index |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3131
		element := (parsers at: index) 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3132
			parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3133
		element isPetitFailure ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3134
			aPPContext restore: start.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3135
			^ element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3136
		elements at: index put: element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3137
	^ elements!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3138
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3139
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3140
!!PPSequenceParser methodsFor: ''operators'' stamp: ''lr 9/17/2008 00:17''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3141
, aRule
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3142
	^ self copyWith: aRule!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3143
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3144
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3145
!!PPSequenceParser methodsFor: ''*petitanalyzer-private'' stamp: ''lr 12/9/2010 10:37''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3146
cycleSet: aDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3147
	| firstSet |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3148
	1 to: parsers size do: [ :index |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3149
		firstSet := aDictionary at: (parsers at: index).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3150
		(firstSet anySatisfy: [ :each | each isNullable ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3151
			ifFalse: [ ^ parsers copyFrom: 1 to: index ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3152
	^ parsers!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3153
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3154
!!PPSequenceParser methodsFor: ''*petitanalyzer-private'' stamp: ''lr 9/16/2010 17:56''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3155
firstSets: aFirstDictionary into: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3156
	| nullable |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3157
	parsers do: [ :parser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3158
		nullable := false.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3159
		(aFirstDictionary at: parser) do: [ :each |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3160
			each isNullable
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3161
				ifTrue: [ nullable := true ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3162
				ifFalse: [ aSet add: each ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3163
		nullable
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3164
			ifFalse: [ ^ self ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3165
	aSet add: PPSentinel instance!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3166
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3167
!!PPSequenceParser methodsFor: ''*petitanalyzer-private'' stamp: ''lr 8/14/2010 13:51''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3168
followSets: aFollowDictionary firstSets: aFirstDictionary into: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3169
	parsers keysAndValuesDo: [ :index :parser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3170
		| followSet firstSet |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3171
		followSet := aFollowDictionary at: parser.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3172
		index = parsers size
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3173
			ifTrue: [ followSet addAll: aSet ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3174
			ifFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3175
				(self class withAll: (parsers 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3176
					copyFrom: index + 1 to: parsers size))
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3177
						firstSets: aFirstDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3178
						into: (firstSet := IdentitySet new).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3179
				(firstSet anySatisfy: [ :each | each isNullable ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3180
					ifTrue: [ followSet addAll: aSet ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3181
				followSet addAll: (firstSet 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3182
					reject: [ :each | each isNullable ]) ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3183
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3184
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3185
!!PPSequenceParser methodsFor: ''*petitgui-mondrian'' stamp: ''AlexandreBergel 12/18/2013 16:44''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3186
visualizationGraphType
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3187
	^ '',''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3188
Object subclass: #PPFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3189
	instanceVariableNames: ''message context position''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3190
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3191
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3192
	category: ''PetitParser-Core''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3193
!!PPFailure commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3194
The failure object in PetitParser. It is the only class that responds to #isPetitFailure with true. It contains an error message and a position of the occurrence of the failure.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3195
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3196
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3197
	message	<String>	The error message of this failure.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3198
	position	<Integer>	The position of this failure in the input stream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3199
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3200
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3201
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3202
!!PPFailure methodsFor: ''*petitgui'' stamp: ''JanKurs 8/19/2014 16:39''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3203
sampleIn: composite
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3204
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3205
	(composite text)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3206
		title: ''Sample'';
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3207
		display: [:res | res findStream contents ifNil: [''''] ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3208
		allowNil.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3209
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3210
!!PPFailure methodsFor: ''*petitgui'' stamp: ''JanKurs 8/19/2014 16:40''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3211
treeViewIn: composite
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3212
	composite tree
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3213
		title: ''Execution Traces'';
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3214
		format: [:resultNode | resultNode formattedText ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3215
		children: [:resultNode | resultNode showChildren 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3216
											ifTrue: [ resultNode children ] 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3217
											ifFalse: [ #() ] ]. !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3218
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3219
!!PPFailure methodsFor: ''*petitgui'' stamp: ''JanKurs 8/19/2014 16:53''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3220
gtDebugView: composite
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3221
	<gtInspectorPresentationOrder: 40>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3222
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3223
	| browser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3224
	browser := 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3225
		composite tabulator.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3226
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3227
	browser title: ''Debug View''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3228
	browser row: #tree;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3229
			  row: #source.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3230
	browser transmit 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3231
		fromOutsideEntityPort; 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3232
		toOutsidePort: #debugResult;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3233
		transformed: [ :failure | failure debugResult  ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3234
				
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3235
	browser transmit 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3236
		from: #tree;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3237
		to: #source port: #selectionInterval;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3238
		transformed: [:debuggingResult |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3239
			debuggingResult ifNotNil: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3240
			debuggingResult start to: debuggingResult end]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3241
		].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3242
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3243
	browser transmit
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3244
		fromOutsidePort: #debugResult;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3245
		to: #source;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3246
		andShow: [ :a |  self sampleIn: a ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3247
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3248
	browser transmit 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3249
		fromOutsidePort: #debugResult;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3250
		to: #tree;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3251
		andShow: [ :a | self treeViewIn: a ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3252
		
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3253
	browser startOn: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3254
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3255
!!PPFailure methodsFor: ''*petitgui'' stamp: ''JanKurs 8/19/2014 16:54''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3256
debugResult
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3257
	^ context root enableDebug parse: context stream reset!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3258
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3259
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3260
!!PPFailure methodsFor: ''testing'' stamp: ''lr 2/7/2010 20:54''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3261
isPetitFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3262
	"I am the only class that should implement this method to return true."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3263
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3264
	^ true!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3265
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3266
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3267
!!PPFailure methodsFor: ''printing'' stamp: ''JanKurs 8/19/2014 16:30''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3268
printOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3269
	aStream nextPutAll: self message; nextPutAll: '' at ''; print: self position!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3270
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3271
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3272
!!PPFailure methodsFor: ''initialization'' stamp: ''JanKurs 8/19/2014 16:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3273
initializeMessage: aString context: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3274
	self initializeMessage: aString context:  aPPContext position: aPPContext position!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3275
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3276
!!PPFailure methodsFor: ''initialization'' stamp: ''JanKurs 8/19/2014 16:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3277
initializeMessage: aString at: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3278
	self halt: ''deprecated''.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3279
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3280
!!PPFailure methodsFor: ''initialization'' stamp: ''JanKurs 8/19/2014 16:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3281
initializeMessage: aString context: aPPContext position: position
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3282
	message := aString.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3283
	context := aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3284
	position := position.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3285
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3286
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3287
!!PPFailure methodsFor: ''accessing'' stamp: ''lr 5/5/2010 13:56''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3288
message
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3289
	"Answer a human readable error message of this parse failure."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3290
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3291
	^ message!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3292
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3293
!!PPFailure methodsFor: ''accessing'' stamp: ''lr 5/5/2010 13:55''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3294
position
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3295
	"Answer the position in the source string that caused this parse failure."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3296
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3297
	^ position!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3298
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3299
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3300
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3301
PPFailure class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3302
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3303
!!PPFailure class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3304
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3305
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3306
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3307
!!PPFailure class methodsFor: ''instance creation'' stamp: ''JanKurs 8/19/2014 16:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3308
message: aString at: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3309
	self halt: ''deprecated, use message:context:''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3310
	^ self basicNew initializeMessage: aString at: anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3311
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3312
!!PPFailure class methodsFor: ''instance creation'' stamp: ''JanKurs 8/19/2014 16:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3313
message: aString context: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3314
	^ self basicNew initializeMessage: aString context: aPPContext!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3315
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3316
!!PPFailure class methodsFor: ''instance creation'' stamp: ''JanKurs 8/19/2014 16:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3317
message: aString context: aPPContext at: position
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3318
	^ self basicNew initializeMessage: aString context: aPPContext position: position!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3319
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3320
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3321
ReadStream subclass: #PPStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3322
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3323
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3324
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3325
	category: ''PetitParser-Core''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3326
!!PPStream commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3327
A positional stream implementation used for parsing. It overrides some methods for optimization reasons.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3328
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3329
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3330
!!PPStream methodsFor: ''accessing'' stamp: ''lr 4/29/2008 21:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3331
peek
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3332
	"An improved version of peek, that is slightly faster than the built in version."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3333
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3334
	^ self atEnd ifFalse: [ collection at: position + 1 ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3335
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3336
!!PPStream methodsFor: ''accessing'' stamp: ''lr 10/5/2010 16:29''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3337
uncheckedPeek
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3338
	"An unchecked version of peek that throws an error if we try to peek over the end of the stream, even faster than #peek."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3339
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3340
	^ collection at: position + 1!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3341
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3342
!!PPStream methodsFor: ''accessing'' stamp: ''lr 2/13/2012 20:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3343
collection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3344
	"Answer the underlying collection."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3345
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3346
	^ collection!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3347
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3348
!!PPStream methodsFor: ''accessing'' stamp: ''lr 8/25/2010 11:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3349
position: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3350
	"The receiver does not check for invalid arguments passed to this method, as it is solely used with valid indexes for backtracking."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3351
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3352
	position := anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3353
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3354
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3355
!!PPStream methodsFor: ''printing'' stamp: ''lr 11/4/2010 19:23''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3356
printOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3357
	collection isString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3358
		ifFalse: [ ^ super printOn: aStream ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3359
	aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3360
		nextPutAll: (collection copyFrom: 1 to: position);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3361
		nextPutAll: ''·'';
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3362
		nextPutAll: (collection copyFrom: position + 1 to: readLimit)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3363
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3364
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3365
!!PPStream methodsFor: ''converting'' stamp: ''lr 2/7/2010 20:53''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3366
asPetitStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3367
	^ self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3368
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3369
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3370
Object subclass: #PPToken
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3371
	instanceVariableNames: ''collection start stop value''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3372
	classVariableNames: ''NewLineParser''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3373
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3374
	category: ''PetitParser-Core''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3375
!!PPToken commentStamp: ''lr 2/25/2013 23:34'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3376
PPToken represents a parsed part of the input stream. Contrary to a simple String it remembers where it came from, the original collection, its start and stop position and its parse value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3377
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3378
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3379
	collection	<SequenceableCollection>	The collection this token comes from.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3380
	start	<Integer>	The start position in the collection.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3381
	stop	<Integer>	The stop position in the collection.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3382
	value <Object>	The parse result.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3383
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3384
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3385
!!PPToken methodsFor: ''querying'' stamp: ''lr 9/7/2011 20:41''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3386
line
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3387
	"Answer the line number of this token in the underlying collection."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3388
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3389
	| line |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3390
	line := 1.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3391
	(NewLineParser , [ :stream |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3392
		start <= stream position
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3393
			ifTrue: [ ^ line ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3394
		line := line + 1 ] asParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3395
		/ #any asParser) star
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3396
			parse: collection.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3397
	^ line!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3398
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3399
!!PPToken methodsFor: ''querying'' stamp: ''lr 9/7/2011 20:40''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3400
column
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3401
	"Answer the column number of this token in the underlying collection."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3402
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3403
	| position |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3404
	position := 0.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3405
	(NewLineParser , [ :stream |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3406
		start <= stream position
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3407
			ifTrue: [ ^ start - position ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3408
		position := stream position ] asParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3409
		/ #any asParser) star
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3410
			parse: collection.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3411
	 ^ start - position!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3412
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3413
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3414
!!PPToken methodsFor: ''initialization'' stamp: ''lr 2/25/2013 23:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3415
initializeOn: aSequenceableCollection start: aStartInteger stop: aStopInteger value: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3416
	collection := aSequenceableCollection.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3417
	start := aStartInteger.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3418
	stop := aStopInteger.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3419
	value := anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3420
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3421
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3422
!!PPToken methodsFor: ''accessing'' stamp: ''lr 6/15/2010 23:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3423
stop
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3424
	"Answer the stop position of this token in the underlying collection."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3425
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3426
	^ stop!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3427
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3428
!!PPToken methodsFor: ''accessing'' stamp: ''lr 2/25/2013 23:56''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3429
size
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3430
	"Answer the size of this token in the underlying collection."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3431
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3432
	^ stop - start + 1!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3433
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3434
!!PPToken methodsFor: ''accessing'' stamp: ''lr 6/15/2010 23:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3435
collection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3436
	"Answer the underlying collection of this token."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3437
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3438
	^ collection!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3439
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3440
!!PPToken methodsFor: ''accessing'' stamp: ''lr 6/15/2010 23:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3441
start
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3442
	"Answer the start position of this token in the underlying collection."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3443
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3444
	^ start!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3445
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3446
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3447
!!PPToken methodsFor: ''printing'' stamp: ''lr 2/26/2013 00:37''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3448
printOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3449
	super printOn: aStream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3450
	aStream nextPut: $[; print: self start; nextPut: $,; print: self stop; nextPut: $].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3451
	aStream nextPut: $(; print: self parsedValue; nextPut: $)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3452
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3453
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3454
!!PPToken methodsFor: ''copying'' stamp: ''lr 2/26/2013 00:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3455
copyFrom: aStartInteger to: aStopInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3456
	^ self class on: collection start: start + aStartInteger - 1 stop: stop + aStopInteger - 3 value: value!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3457
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3458
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3459
!!PPToken methodsFor: ''accessing-values'' stamp: ''lr 2/26/2013 00:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3460
value
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3461
	self notify: ''Token>>#value is no longer supported. Instead use Token>>#inputValue or the more pragmatic #parsedValue.''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3462
	^ self inputValue!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3463
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3464
!!PPToken methodsFor: ''accessing-values'' stamp: ''lr 2/26/2013 00:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3465
inputValue
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3466
	"Answer the consumed input of this token."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3467
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3468
	^ collection copyFrom: start to: stop!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3469
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3470
!!PPToken methodsFor: ''accessing-values'' stamp: ''lr 2/26/2013 00:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3471
parsedValue
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3472
	"Answer the parsed value of this token."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3473
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3474
	^ value!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3475
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3476
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3477
!!PPToken methodsFor: ''comparing'' stamp: ''lr 2/26/2013 00:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3478
= anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3479
	^ self class = anObject class and: [ self parsedValue = anObject parsedValue ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3480
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3481
!!PPToken methodsFor: ''comparing'' stamp: ''lr 2/26/2013 00:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3482
hash
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3483
	^ self parsedValue hash!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3484
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3485
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3486
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3487
PPToken class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3488
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3489
!!PPToken class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3490
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3491
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3492
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3493
!!PPToken class methodsFor: ''initialization'' stamp: ''lr 11/29/2011 20:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3494
initialize
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3495
	"Platform independent newline sequence. LF: Unix, CR+LF: Windows, and CR: Apple."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3496
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3497
	NewLineParser := (Character lf asParser) / (Character cr asParser , Character lf asParser optional)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3498
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3499
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3500
!!PPToken class methodsFor: ''instance creation'' stamp: ''lr 2/25/2013 23:39''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3501
on: aSequenceableCollection start: aStartInteger stop: aStopInteger value: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3502
	^ self basicNew 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3503
		initializeOn: aSequenceableCollection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3504
		start: aStartInteger stop: aStopInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3505
		value: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3506
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3507
!!PPToken class methodsFor: ''instance creation'' stamp: ''lr 2/25/2013 23:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3508
on: aSequenceableCollection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3509
	^ self on: aSequenceableCollection start: 1 stop: aSequenceableCollection size value: nil!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3510
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3511
!!PPToken class methodsFor: ''instance creation'' stamp: ''lr 4/6/2010 20:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3512
new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3513
	self error: ''Token can only be created using a dedicated constructor.''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3514
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3515
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3516
Object subclass: #PPContextMemento
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3517
	instanceVariableNames: ''stream position properties''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3518
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3519
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3520
	category: ''PetitParser-Core''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3521
!!PPContextMemento commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3522
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3523
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3524
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3525
!!PPContextMemento methodsFor: ''comparing'' stamp: ''JanKurs 3/19/2014 13:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3526
= anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3527
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3528
	(self == anObject) ifTrue: [ ^ true ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3529
	(anObject class = PPContextMemento) ifFalse: [ ^ false ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3530
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3531
	(anObject stream == stream) ifFalse: [ ^ false ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3532
	(anObject position = position) ifFalse: [ ^ false ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3533
	(anObject properties = properties) ifFalse: [ ^ false ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3534
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3535
	^ true.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3536
!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3537
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3538
!!PPContextMemento methodsFor: ''comparing'' stamp: ''JanKurs 3/19/2014 13:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3539
hash
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3540
	^ (position hash bitXor: stream hash) bitXor: properties hash.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3541
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3542
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3543
!!PPContextMemento methodsFor: ''accessing - properties'' stamp: ''JanKurs 3/19/2014 12:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3544
propertyAt: aKey ifAbsentPut: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3545
	"Answer the property associated with aKey or, if aKey isn''t found store the result of evaluating aBlock as new value."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3546
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3547
	^ self propertyAt: aKey ifAbsent: [ self propertyAt: aKey put: aBlock value ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3548
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3549
!!PPContextMemento methodsFor: ''accessing - properties'' stamp: ''JanKurs 3/19/2014 12:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3550
removeProperty: aKey ifAbsent: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3551
	"Remove the property with aKey. Answer the value or, if aKey isn''t found, answer the result of evaluating aBlock."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3552
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3553
	| answer |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3554
	properties isNil ifTrue: [ ^ aBlock value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3555
	answer := properties removeKey: aKey ifAbsent: aBlock.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3556
	properties isEmpty ifTrue: [ properties := nil ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3557
	^ answer!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3558
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3559
!!PPContextMemento methodsFor: ''accessing - properties'' stamp: ''JanKurs 3/19/2014 12:14''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3560
propertyAt: aKey
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3561
	"Answer the property value associated with aKey."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3562
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3563
	^ self propertyAt: aKey ifAbsent: [ self error: ''Property not found'' ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3564
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3565
!!PPContextMemento methodsFor: ''accessing - properties'' stamp: ''JanKurs 3/19/2014 12:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3566
propertyAt: aKey ifAbsent: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3567
	"Answer the property value associated with aKey or, if aKey isn''t found, answer the result of evaluating aBlock."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3568
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3569
	^ properties isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3570
		ifTrue: [ aBlock value ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3571
		ifFalse: [ properties at: aKey ifAbsent: aBlock ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3572
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3573
!!PPContextMemento methodsFor: ''accessing - properties'' stamp: ''JanKurs 3/19/2014 12:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3574
propertyAt: aKey put: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3575
	"Set the property at aKey to be anObject. If aKey is not found, create a new entry for aKey and set is value to anObject. Answer anObject."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3576
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3577
	^ (properties ifNil: [ properties := Dictionary new: 1 ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3578
		at: aKey put: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3579
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3580
!!PPContextMemento methodsFor: ''accessing - properties'' stamp: ''JanKurs 3/19/2014 12:14''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3581
hasProperty: aKey
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3582
	"Test if the property aKey is present."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3583
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3584
	^ properties notNil and: [ properties includesKey: aKey ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3585
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3586
!!PPContextMemento methodsFor: ''accessing - properties'' stamp: ''JanKurs 3/19/2014 12:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3587
removeProperty: aKey
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3588
	"Remove the property with aKey. Answer the property or raise an error if aKey isn''t found."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3589
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3590
	^ self removeProperty: aKey ifAbsent: [ self error: ''Property not found'' ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3591
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3592
!!PPContextMemento methodsFor: ''accessing - properties'' stamp: ''JanKurs 3/19/2014 13:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3593
properties
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3594
	^ properties !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3595
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3596
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3597
!!PPContextMemento methodsFor: ''as yet unclassified'' stamp: ''JanKurs 10/28/2013 16:52''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3598
stream: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3599
	stream := aStream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3600
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3601
!!PPContextMemento methodsFor: ''as yet unclassified'' stamp: ''JanKurs 10/28/2013 16:51''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3602
position
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3603
	^ position!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3604
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3605
!!PPContextMemento methodsFor: ''as yet unclassified'' stamp: ''JanKurs 10/28/2013 16:52''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3606
position: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3607
	position := anInteger !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3608
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3609
!!PPContextMemento methodsFor: ''as yet unclassified'' stamp: ''JanKurs 10/28/2013 16:51''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3610
stream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3611
	^ stream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3612
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3613
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3614
Object subclass: #PPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3615
	instanceVariableNames: ''stream root properties''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3616
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3617
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3618
	category: ''PetitParser-Core''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3619
!!PPContext commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3620
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3621
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3622
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3623
!!PPContext methodsFor: ''memoization'' stamp: ''JanKurs 3/19/2014 16:27''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3624
remember
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3625
	| memento |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3626
	memento := PPContextMemento new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3627
		stream: stream;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3628
		position: stream position;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3629
		yourself.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3630
		
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3631
	self rememberProperties: memento.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3632
	^ memento!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3633
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3634
!!PPContext methodsFor: ''memoization'' stamp: ''JanKurs 3/19/2014 16:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3635
restore: aPPContextMemento
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3636
	aPPContextMemento stream == stream ifFalse: [ self error: ''Oops!!!!'' ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3637
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3638
	stream position: aPPContextMemento position.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3639
	self restoreProperties: aPPContextMemento.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3640
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3641
!!PPContext methodsFor: ''memoization'' stamp: ''JanKurs 3/19/2014 16:29''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3642
restoreProperties: aPPContextMemento
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3643
	aPPContextMemento stream == stream ifFalse: [ self error: ''Oops!!!!'' ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3644
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3645
	aPPContextMemento class selectorsAndMethodsDo: [ :selector :method |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3646
		(selector beginsWith: ''restore'') ifTrue: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3647
			aPPContextMemento withArgs: (Array with: self) executeMethod: method.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3648
		]	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3649
	]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3650
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3651
!!PPContext methodsFor: ''memoization'' stamp: ''JanKurs 3/19/2014 16:28''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3652
rememberProperties: aPPContextMemento
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3653
	aPPContextMemento class selectorsAndMethodsDo: [ :selector :method |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3654
		(selector beginsWith: ''remember'') ifTrue: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3655
			aPPContextMemento withArgs: (Array with: self) executeMethod: method.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3656
		]	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3657
	]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3658
!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3659
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3660
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3661
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 4/29/2014 16:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3662
peekTwice
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3663
	^ stream peekTwice!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3664
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3665
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 1/15/2014 16:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3666
position
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3667
	^ stream position!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3668
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3669
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 8/19/2014 14:08''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3670
uncheckedPeek
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3671
	^ stream uncheckedPeek!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3672
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3673
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 1/15/2014 16:11''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3674
upTo: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3675
	^ stream upTo: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3676
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3677
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 8/19/2014 14:08''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3678
collection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3679
	^ stream collection  !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3680
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3681
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 1/16/2014 12:13''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3682
atEnd
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3683
	^ stream atEnd!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3684
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3685
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 4/29/2014 16:24''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3686
peek
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3687
	^ stream peek!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3688
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3689
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 4/29/2014 16:29''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3690
upToAll: whatever
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3691
	^ stream upToAll: whatever!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3692
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3693
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 8/19/2014 14:08''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3694
skip: anInteger 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3695
	^ stream skip: anInteger !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3696
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3697
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 4/29/2014 16:31''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3698
upToAnyOf: whatever
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3699
	^ stream upToAnyOf: whatever!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3700
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3701
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 1/15/2014 16:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3702
next
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3703
	^ stream next!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3704
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3705
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3706
!!PPContext methodsFor: ''accessing-properties'' stamp: ''JanKurs 1/16/2014 11:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3707
propertyAt: aKey ifAbsentPut: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3708
	"Answer the property associated with aKey or, if aKey isn''t found store the result of evaluating aBlock as new value."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3709
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3710
	^ self propertyAt: aKey ifAbsent: [ self propertyAt: aKey put: aBlock value ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3711
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3712
!!PPContext methodsFor: ''accessing-properties'' stamp: ''JanKurs 1/16/2014 11:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3713
removeProperty: aKey ifAbsent: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3714
	"Remove the property with aKey. Answer the value or, if aKey isn''t found, answer the result of evaluating aBlock."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3715
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3716
	| answer |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3717
	properties isNil ifTrue: [ ^ aBlock value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3718
	answer := properties removeKey: aKey ifAbsent: aBlock.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3719
	properties isEmpty ifTrue: [ properties := nil ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3720
	^ answer!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3721
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3722
!!PPContext methodsFor: ''accessing-properties'' stamp: ''JanKurs 1/16/2014 11:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3723
propertyAt: aKey
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3724
	"Answer the property value associated with aKey."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3725
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3726
	^ self propertyAt: aKey ifAbsent: [ self error: ''Property not found'' ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3727
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3728
!!PPContext methodsFor: ''accessing-properties'' stamp: ''JanKurs 1/16/2014 11:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3729
propertyAt: aKey ifAbsent: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3730
	"Answer the property value associated with aKey or, if aKey isn''t found, answer the result of evaluating aBlock."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3731
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3732
	^ properties isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3733
		ifTrue: [ aBlock value ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3734
		ifFalse: [ properties at: aKey ifAbsent: aBlock ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3735
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3736
!!PPContext methodsFor: ''accessing-properties'' stamp: ''JanKurs 1/16/2014 11:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3737
propertyAt: aKey put: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3738
	"Set the property at aKey to be anObject. If aKey is not found, create a new entry for aKey and set is value to anObject. Answer anObject."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3739
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3740
	^ (properties ifNil: [ properties := Dictionary new: 1 ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3741
		at: aKey put: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3742
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3743
!!PPContext methodsFor: ''accessing-properties'' stamp: ''JanKurs 1/16/2014 11:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3744
hasProperty: aKey
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3745
	"Test if the property aKey is present."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3746
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3747
	^ properties notNil and: [ properties includesKey: aKey ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3748
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3749
!!PPContext methodsFor: ''accessing-properties'' stamp: ''JanKurs 1/16/2014 11:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3750
removeProperty: aKey
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3751
	"Remove the property with aKey. Answer the property or raise an error if aKey isn''t found."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3752
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3753
	^ self removeProperty: aKey ifAbsent: [ self error: ''Property not found'' ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3754
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3755
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3756
!!PPContext methodsFor: ''initialization'' stamp: ''JanKurs 1/16/2014 11:24''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3757
initialize
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3758
	stream := nil.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3759
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3760
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3761
!!PPContext methodsFor: ''as yet unclassified'' stamp: ''JanKurs 3/19/2014 16:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3762
parsed: aPPParser at: anInteger result: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3763
	self halt.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3764
	^ anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3765
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3766
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3767
!!PPContext methodsFor: ''acessing'' stamp: ''JanKurs 10/29/2013 10:13''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3768
root: aPPParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3769
	root := aPPParser !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3770
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3771
!!PPContext methodsFor: ''acessing'' stamp: ''JanKurs 10/29/2013 10:13''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3772
root
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3773
	^ root !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3774
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3775
!!PPContext methodsFor: ''acessing'' stamp: ''JanKurs 1/15/2014 15:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3776
stream: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3777
	stream := aStream.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3778
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3779
!!PPContext methodsFor: ''acessing'' stamp: ''JanKurs 1/16/2014 15:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3780
stream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3781
	^ stream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3782
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3783
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3784
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3785
PPContext class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3786
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3787
!!PPContext class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3788
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3789
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3790
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3791
!!PPContext class methodsFor: ''as yet unclassified'' stamp: ''JanKurs 1/16/2014 14:38''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3792
on: aPPParser stream: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3793
	^ self basicNew 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3794
		initialize;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3795
		root: aPPParser;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3796
		stream: aStream asPetitStream;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3797
		yourself!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3798
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3799
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3800
Object subclass: #PPMemento
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3801
	instanceVariableNames: ''result count context''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3802
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3803
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3804
	category: ''PetitParser-Core''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3805
!!PPMemento commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3806
PPMemento is an internal class used by PPMemoizedParser to cache results and detect left-recursive calls.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3807
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3808
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3809
	result	<Object>	The cached result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3810
	count	<Integer>	The number of recursive cycles followed.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3811
	position	<Integer>	The position of the cached result in the input stream.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3812
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3813
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3814
!!PPMemento methodsFor: ''accessing'' stamp: ''JanKurs 1/15/2014 16:09''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3815
contextMemento: aPPContextMemento
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3816
	context  := aPPContextMemento 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3817
!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3818
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3819
!!PPMemento methodsFor: ''accessing'' stamp: ''JanKurs 1/15/2014 16:09''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3820
contextMemento
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3821
	^ context!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3822
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3823
!!PPMemento methodsFor: ''accessing'' stamp: ''lr 4/24/2008 10:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3824
result
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3825
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3826
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3827
!!PPMemento methodsFor: ''accessing'' stamp: ''lr 4/22/2008 18:23''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3828
result: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3829
	result := anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3830
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3831
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3832
!!PPMemento methodsFor: ''accessing-readonly'' stamp: ''lr 4/22/2008 18:23''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3833
count
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3834
	^ count!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3835
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3836
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3837
!!PPMemento methodsFor: ''initialization'' stamp: ''lr 4/22/2008 18:21''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3838
initialize
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3839
	count := 0
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3840
	!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3841
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3842
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3843
!!PPMemento methodsFor: ''actions'' stamp: ''lr 4/22/2008 18:20''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3844
increment
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3845
	count := count + 1!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3846
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3847
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3848
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3849
PPMemento class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3850
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3851
!!PPMemento class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3852
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3853
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3854
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3855
!!PPMemento class methodsFor: ''instance creation'' stamp: ''lr 4/22/2008 18:21''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3856
new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3857
	^ self basicNew initialize!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3858
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3859
PPToken initialize!!''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3860
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3861
!!SequenceableCollection methodsFor: ''*petitparser-core-converting'' stamp: ''lr 2/7/2010 20:53''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3862
asPetitStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3863
	^ PPStream on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3864
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3865
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3866
!!Character methodsFor: ''*petitparser-core-operators'' stamp: ''lr 6/12/2010 09:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3867
- aCharacter
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3868
	"Create a range of characters between the receiver and the argument."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3869
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3870
	^ PPPredicateObjectParser between: self and: aCharacter!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3871
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3872
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3873
!!Character methodsFor: ''*petitparser-core-converting'' stamp: ''lr 12/18/2011 15:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3874
asParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3875
	"Answer a parser that accepts the receiving character."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3876
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3877
	^ PPLiteralObjectParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3878
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3879
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3880
!!PositionableStream methodsFor: ''*petitparser-core'' stamp: ''sback 9/3/2010 10:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3881
peekTwice
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3882
	"Answer what would be returned if the message next were sent to the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3883
	receiver. If the receiver is at the end, answer nil."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3884
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3885
	| array |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3886
	self atEnd 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3887
		ifTrue: [^Array with: nil with: nil].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3888
	array := Array with: (self next) with: (self peek).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3889
	position := position - 1.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3890
	^array!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3891
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3892
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3893
!!Stream methodsFor: ''*petitparser-core-converting'' stamp: ''lr 4/8/2010 14:46''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3894
asPetitStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3895
	^ self contents asPetitStream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3896
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3897
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3898
!!Symbol methodsFor: ''*petitparser-core-converting'' stamp: ''lr 12/18/2011 15:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3899
asParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3900
	"Answer a predicate parser named after the receiving symbol. Possible symbols are the method selectors on the class-side of PPPredicateObjectParser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3901
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3902
	^ PPPredicateObjectParser perform: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3903
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3904
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3905
!!String methodsFor: ''*petitparser-core-converting'' stamp: ''lr 11/29/2011 20:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3906
asParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3907
	"Answer a parser that accepts the receiving string."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3908
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3909
	^ PPLiteralSequenceParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3910
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3911
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3912
!!BlockClosure methodsFor: ''*petitparser-core-converting'' stamp: ''lr 11/29/2011 20:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3913
asParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3914
	"Answer a parser implemented in the receiving one-argument block."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3915
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3916
	^ PPPluggableParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3917
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3918
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3919
!!UndefinedObject methodsFor: ''*petitparser-converting'' stamp: ''lr 11/29/2011 20:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3920
asParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3921
	"Answer a parser that succeeds and does not consume anything."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3922
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3923
	^ PPEpsilonParser new!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3924
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3925
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3926
!!Text methodsFor: ''*petitparser-core-converting'' stamp: ''lr 2/7/2010 20:53''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3927
asPetitStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3928
	^ string asPetitStream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3929
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3930
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3931
!!Collection methodsFor: ''*petitparser-core-converting'' stamp: ''lr 11/29/2011 20:38''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3932
asChoiceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3933
	^ PPChoiceParser withAll: (self collect: [ :each | each asParser ])!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3934
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3935
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3936
!!Collection methodsFor: ''*petitparser-core-converting'' stamp: ''lr 11/29/2011 20:38''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3937
asSequenceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3938
	^ PPSequenceParser withAll: (self collect: [ :each | each asParser ])!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3939
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3940
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3941
!!Object methodsFor: ''*petitparser-core-testing'' stamp: ''lr 8/6/2010 16:44''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3942
isPetitParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3943
	^ false!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3944
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3945
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3946
!!Object methodsFor: ''*petitparser-core-converting'' stamp: ''lr 12/18/2011 15:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3947
asParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3948
	"Answer a parser accepting the receiving object."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3949
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3950
	^ PPPredicateObjectParser expect: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3951
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.314418 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3952
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3953
!!Object methodsFor: ''*petitparser-core-testing'' stamp: ''lr 2/7/2010 20:54''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3954
isPetitFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3955
	^ false!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3956
'
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3957
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3958
421
7e08b31e0dae Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 420
diff changeset
  3959
smalltalkInDirectory: directory
7e08b31e0dae Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 420
diff changeset
  3960
	| files |
7e08b31e0dae Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 420
diff changeset
  3961
	files := self readDirectory: directory.
7e08b31e0dae Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 420
diff changeset
  3962
	files := self files: files withExtension: 'st'.
7e08b31e0dae Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 420
diff changeset
  3963
	
7e08b31e0dae Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 420
diff changeset
  3964
	^ files collect: [ :f | (FileStream fileNamed: f) contents ]
7e08b31e0dae Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 420
diff changeset
  3965
!
7e08b31e0dae Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 420
diff changeset
  3966
420
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3967
smalltalkObjectMethods
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3968
	^ Object allMethods collect: [ :m | m sourceCode ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3969
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3970
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3971
smalltalkSourcesBig
421
7e08b31e0dae Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 420
diff changeset
  3972
	^ self smalltalkInDirectory: '../smalltalk-src/'
7e08b31e0dae Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 420
diff changeset
  3973
!
7e08b31e0dae Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 420
diff changeset
  3974
7e08b31e0dae Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 420
diff changeset
  3975
smalltalkSourcesBig_old
420
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3976
	^ ((Smalltalk allClasses copyFrom: 1 to: 30) collect: [ :c |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3977
			c allMethods collect: [ :m | m sourceCode ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3978
	  ]) gather: [:each | each ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3979
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3980
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3981
workingJavaInDirectory: directory
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3982
	| sources parser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3983
	"return only such a files, that can be parsed by PPJavaSyntax"
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3984
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3985
	javaCache ifNil: [ javaCache := Dictionary new ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3986
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3987
	^ javaCache at: directory ifAbsentPut: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3988
		sources := self javaInDirectory: directory.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3989
		parser := PPJavaSyntax new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3990
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3991
		sources select: [ :source | ([parser parse: source ] on: Error do: [ PPFailure new ]) isPetitFailure not ]	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3992
	]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3993
! !
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3994
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3995
!PPCBenchmarkResources methodsFor:'private utilities'!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3996
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3997
files: files withExtension: extension
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3998
	^ files select: [ :f | f extension = extension ] 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3999
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4000
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4001
readDirectory: directory
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4002
	| file |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4003
	file := directory asFileReference.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4004
	file exists ifTrue: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4005
		^ file allFiles
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4006
	].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4007
	^ #()
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4008
! !
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4009