equal
deleted
inserted
replaced
110 ^ self globalAt: #compiledParser put: aPPParser |
110 ^ self globalAt: #compiledParser put: aPPParser |
111 ! ! |
111 ! ! |
112 |
112 |
113 !PPContext methodsFor:'*petitcompiler'! |
113 !PPContext methodsFor:'*petitcompiler'! |
114 |
114 |
115 lastTokenResult |
|
116 ^ scanner lastResult |
|
117 ! ! |
|
118 |
|
119 !PPContext methodsFor:'*petitcompiler'! |
|
120 |
|
121 lwRemember |
115 lwRemember |
122 ^ self position |
116 ^ self position |
123 ! ! |
117 ! ! |
124 |
118 |
125 !PPContext methodsFor:'*petitcompiler'! |
119 !PPContext methodsFor:'*petitcompiler'! |
126 |
120 |
127 lwRestore: position |
121 lwRestore: position |
128 ^ self position: position |
122 ^ self position: position |
129 ! ! |
|
130 |
|
131 !PPContext methodsFor:'*petitcompiler'! |
|
132 |
|
133 matchToken: id |
|
134 ^ scanner matchToken: id |
|
135 ! ! |
|
136 |
|
137 !PPContext methodsFor:'*petitcompiler'! |
|
138 |
|
139 nextToken |
|
140 scanner next |
|
141 ! ! |
|
142 |
|
143 !PPContext methodsFor:'*petitcompiler'! |
|
144 |
|
145 nextToken: id |
|
146 ^ scanner next: id |
|
147 ! ! |
123 ! ! |
148 |
124 |
149 !PPContext methodsFor:'*petitcompiler'! |
125 !PPContext methodsFor:'*petitcompiler'! |
150 |
126 |
151 peek: anInteger |
127 peek: anInteger |
235 |
211 |
236 compileWith: aPetitCompiler |
212 compileWith: aPetitCompiler |
237 ^ aPetitCompiler compileCharacter: literal. |
213 ^ aPetitCompiler compileCharacter: literal. |
238 ! ! |
214 ! ! |
239 |
215 |
240 !PPLiteralObjectParser methodsFor:'*petitcompiler'! |
|
241 |
|
242 firstCharParser |
|
243 ^ self |
|
244 ! ! |
|
245 |
|
246 !PPLiteralParser methodsFor:'*petitcompiler'! |
216 !PPLiteralParser methodsFor:'*petitcompiler'! |
247 |
217 |
248 id |
218 id |
249 ^ literal printString |
219 ^ literal printString |
250 ! ! |
220 ! ! |
262 |
232 |
263 compileWith: aPetitCompiler |
233 compileWith: aPetitCompiler |
264 ^ aPetitCompiler compileLiteral: literal. |
234 ^ aPetitCompiler compileLiteral: literal. |
265 ! ! |
235 ! ! |
266 |
236 |
267 !PPLiteralSequenceParser methodsFor:'*petitcompiler'! |
|
268 |
|
269 firstCharParser |
|
270 ^ literal first asParser |
|
271 ! ! |
|
272 |
|
273 !PPNotParser methodsFor:'*petitcompiler'! |
237 !PPNotParser methodsFor:'*petitcompiler'! |
274 |
238 |
275 asCompilerNode |
239 asCompilerNode |
276 ^ PPCNotNode new |
240 ^ PPCNotNode new |
277 child: parser; |
241 child: parser; |
283 |
247 |
284 compileWith: aPetitCompiler |
248 compileWith: aPetitCompiler |
285 ^ aPetitCompiler compileNot: self |
249 ^ aPetitCompiler compileNot: self |
286 ! ! |
250 ! ! |
287 |
251 |
288 !PPNotParser methodsFor:'*petitcompiler'! |
|
289 |
|
290 firstCharParser |
|
291 ^ parser firstCharParser not |
|
292 ! ! |
|
293 |
|
294 !PPOptionalParser methodsFor:'*petitcompiler'! |
252 !PPOptionalParser methodsFor:'*petitcompiler'! |
295 |
253 |
296 asCompilerNode |
254 asCompilerNode |
297 ^ PPCOptionalNode new |
255 ^ PPCOptionalNode new |
298 name: self name; |
256 name: self name; |
325 |
283 |
326 !PPParser methodsFor:'*petitcompiler'! |
284 !PPParser methodsFor:'*petitcompiler'! |
327 |
285 |
328 bridge |
286 bridge |
329 ^ self |
287 ^ self |
330 ! ! |
|
331 |
|
332 !PPParser methodsFor:'*petitcompiler'! |
|
333 |
|
334 cached |
|
335 "Faster way of memoizing --- it ignores context information, therefore it is not suitable for context-sensitive rules" |
|
336 |
|
337 ^ PPCachingParser on: self |
|
338 ! ! |
288 ! ! |
339 |
289 |
340 !PPParser methodsFor:'*petitcompiler'! |
290 !PPParser methodsFor:'*petitcompiler'! |
341 |
291 |
342 compile |
292 compile |
374 |
324 |
375 !PPParser methodsFor:'*petitcompiler'! |
325 !PPParser methodsFor:'*petitcompiler'! |
376 |
326 |
377 compileWithParameters: params |
327 compileWithParameters: params |
378 ^ self compile: #PPGeneratedParser parameters: params |
328 ^ self compile: #PPGeneratedParser parameters: params |
379 ! ! |
|
380 |
|
381 !PPParser methodsFor:'*petitcompiler'! |
|
382 |
|
383 first |
|
384 first ifNil: [ |
|
385 first := self firstSet |
|
386 ]. |
|
387 ^ first |
|
388 ! ! |
|
389 |
|
390 !PPParser methodsFor:'*petitcompiler'! |
|
391 |
|
392 first: firstSet |
|
393 first := firstSet |
|
394 ! ! |
329 ! ! |
395 |
330 |
396 !PPParser methodsFor:'*petitcompiler'! |
331 !PPParser methodsFor:'*petitcompiler'! |
397 |
332 |
398 firstSetSuchThat: block |
333 firstSetSuchThat: block |
518 ]. |
453 ]. |
519 |
454 |
520 ^ super compileWith: aPetitCompiler. |
455 ^ super compileWith: aPetitCompiler. |
521 ! ! |
456 ! ! |
522 |
457 |
523 !PPPossessiveRepeatingParser methodsFor:'*petitcompiler'! |
|
524 |
|
525 optimized |
|
526 ^ (PPFastPossessiveRepeatingParser on: parser) |
|
527 setMin: min; |
|
528 setMax: max; |
|
529 yourself |
|
530 ! ! |
|
531 |
|
532 !PPPredicateObjectParser methodsFor:'*petitcompiler'! |
458 !PPPredicateObjectParser methodsFor:'*petitcompiler'! |
533 |
459 |
534 asCompilerNode |
460 asCompilerNode |
535 ^ PPCPredicateNode new |
461 ^ PPCPredicateNode new |
536 name: self name; |
462 name: self name; |
547 ^ aPetitCompiler compilePredicate: predicate. |
473 ^ aPetitCompiler compilePredicate: predicate. |
548 ! ! |
474 ! ! |
549 |
475 |
550 !PPPredicateObjectParser methodsFor:'*petitcompiler'! |
476 !PPPredicateObjectParser methodsFor:'*petitcompiler'! |
551 |
477 |
552 firstCharParser |
|
553 ^ self |
|
554 ! ! |
|
555 |
|
556 !PPPredicateObjectParser methodsFor:'*petitcompiler'! |
|
557 |
|
558 firstCharSet |
478 firstCharSet |
559 ^ predicate |
479 ^ predicate |
560 ! ! |
480 ! ! |
561 |
481 |
562 !PPPredicateObjectParser methodsFor:'*petitcompiler'! |
482 !PPPredicateObjectParser methodsFor:'*petitcompiler'! |
571 ^ PPCSequenceNode new |
491 ^ PPCSequenceNode new |
572 children: parsers; |
492 children: parsers; |
573 name: self name; |
493 name: self name; |
574 properties: properties; |
494 properties: properties; |
575 yourself |
495 yourself |
576 ! ! |
|
577 |
|
578 !PPSequenceParser methodsFor:'*petitcompiler'! |
|
579 |
|
580 checkFirst: context |
|
581 first isEmpty ifTrue: [ ^ true ]. |
|
582 |
|
583 first do: [ :elem | |
|
584 (context matchToken: elem id) ifTrue: [ ^ true ]. |
|
585 ]. |
|
586 ^ false |
|
587 ! ! |
496 ! ! |
588 |
497 |
589 !PPSequenceParser methodsFor:'*petitcompiler'! |
498 !PPSequenceParser methodsFor:'*petitcompiler'! |
590 |
499 |
591 compileWith: aPetitCompiler |
500 compileWith: aPetitCompiler |
605 child acceptsEpsilon ifFalse: [ ^ aCollection ] |
514 child acceptsEpsilon ifFalse: [ ^ aCollection ] |
606 ]. |
515 ]. |
607 ^ aCollection |
516 ^ aCollection |
608 ! ! |
517 ! ! |
609 |
518 |
610 !PPSequenceParser methodsFor:'*petitcompiler'! |
|
611 |
|
612 optimized |
|
613 ^ PPFastSequenceParser withAll: parsers |
|
614 ! ! |
|
615 |
|
616 !PPSmalltalkGrammar methodsFor:'*petitcompiler'! |
519 !PPSmalltalkGrammar methodsFor:'*petitcompiler'! |
617 |
520 |
618 comment |
521 comment |
619 ^ $" asParser, $" asParser negate star, $" asParser. |
522 ^ $" asParser, $" asParser negate star, $" asParser. |
620 ! ! |
523 ! ! |
631 |
534 |
632 !PPSmalltalkGrammar methodsFor:'*petitcompiler'! |
535 !PPSmalltalkGrammar methodsFor:'*petitcompiler'! |
633 |
536 |
634 whitespace |
537 whitespace |
635 ^ #space asParser plus |
538 ^ #space asParser plus |
636 ! ! |
|
637 |
|
638 !PPSmalltalkGrammar methodsFor:'*petitcompiler'! |
|
639 |
|
640 whitespaceOld |
|
641 ^ #space asParser plus |
|
642 ! ! |
|
643 |
|
644 !PPSmalltalkGrammar methodsFor:'*petitcompiler'! |
|
645 |
|
646 whitespaceX |
|
647 whitespace ifNil: [ |
|
648 whitespace := PPSmalltalkWhitespaceParser new |
|
649 ]. |
|
650 ^ whitespace |
|
651 ! ! |
539 ! ! |
652 |
540 |
653 !PPSmalltalkTokenParser methodsFor:'*petitcompiler'! |
541 !PPSmalltalkTokenParser methodsFor:'*petitcompiler'! |
654 |
542 |
655 compileWith: aPetitCompiler |
543 compileWith: aPetitCompiler |
708 ^ true |
596 ^ true |
709 ! ! |
597 ! ! |
710 |
598 |
711 !PPSmalltalkWhitespaceParser methodsFor:'*petitcompiler'! |
599 !PPSmalltalkWhitespaceParser methodsFor:'*petitcompiler'! |
712 |
600 |
713 firstCharParser |
|
714 ^ PPFailingParser new |
|
715 ! ! |
|
716 |
|
717 !PPSmalltalkWhitespaceParser methodsFor:'*petitcompiler'! |
|
718 |
|
719 firstCharSet |
601 firstCharSet |
720 ^ PPCharSetPredicate on: [:e | false ] |
602 ^ PPCharSetPredicate on: [:e | false ] |
721 ! ! |
603 ! ! |
722 |
604 |
723 !PPStream methodsFor:'*petitcompiler'! |
605 !PPStream methodsFor:'*petitcompiler'! |
769 ^ super firstSets: aFirstDictionary into: aSet |
651 ^ super firstSets: aFirstDictionary into: aSet |
770 ! ! |
652 ! ! |
771 |
653 |
772 !PPTokenParser methodsFor:'*petitcompiler'! |
654 !PPTokenParser methodsFor:'*petitcompiler'! |
773 |
655 |
774 id |
|
775 id ifNil: [ |
|
776 id := ('TOK[', parser id, ']') asSymbol |
|
777 ]. |
|
778 ^ id |
|
779 ! ! |
|
780 |
|
781 !PPTokenParser methodsFor:'*petitcompiler'! |
|
782 |
|
783 isFirstSetTerminal |
656 isFirstSetTerminal |
784 ^ false |
657 ^ false |
785 ! ! |
658 ! ! |
786 |
659 |
787 !PPTokenParser methodsFor:'*petitcompiler'! |
660 !PPTokenParser methodsFor:'*petitcompiler'! |
790 ^ true |
663 ^ true |
791 ! ! |
664 ! ! |
792 |
665 |
793 !PPTokenParser methodsFor:'*petitcompiler'! |
666 !PPTokenParser methodsFor:'*petitcompiler'! |
794 |
667 |
795 isUnique |
|
796 unique ifNil: [ |
|
797 unique := parser firstSet size = 1 and: [ (parser firstSet anyOne isKindOf: PPLiteralParser) ] |
|
798 ]. |
|
799 ^ unique |
|
800 ! ! |
|
801 |
|
802 !PPTokenParser methodsFor:'*petitcompiler'! |
|
803 |
|
804 optimize |
668 optimize |
805 ^ self transform: [ :each | each optimized ] |
669 ^ self transform: [ :each | each optimized ] |
806 ! ! |
670 ! ! |
807 |
671 |
808 !PPTokenParser methodsFor:'*petitcompiler'! |
672 !PPTokenParser methodsFor:'*petitcompiler'! |
809 |
673 |
810 parseOnX: aPPContext |
|
811 (aPPContext matchToken: self id) ifTrue: [ |
|
812 ^ aPPContext nextToken: self id. |
|
813 ]. |
|
814 ^ PPFailure message: self id, ' not found' context: aPPContext. |
|
815 ! ! |
|
816 |
|
817 !PPTokenParser methodsFor:'*petitcompiler'! |
|
818 |
|
819 parser |
674 parser |
820 ^ parser |
675 ^ parser |
821 ! ! |
676 ! ! |
822 |
677 |
823 !PPTokenParser methodsFor:'*petitcompiler'! |
678 !PPTokenParser methodsFor:'*petitcompiler'! |