compiler/extensions.st
changeset 438 20598d7ce9fa
parent 422 116d2b2af905
child 452 9f4558b3be66
equal deleted inserted replaced
437:54b3bc9e3987 438:20598d7ce9fa
    37 asCompilerNode
    37 asCompilerNode
    38 	^ PPCAndNode new
    38 	^ PPCAndNode new
    39 		name: self name;
    39 		name: self name;
    40 		child: parser;
    40 		child: parser;
    41 		yourself
    41 		yourself
       
    42 ! !
       
    43 
       
    44 !PPCharSetPredicate methodsFor:'*petitcompiler'!
       
    45 
       
    46 = anObject
       
    47 	self == anObject ifTrue: [ ^ true ].
       
    48 	self class == anObject class ifFalse: [ ^ false ].
       
    49 	^ classification = anObject classification
    42 ! !
    50 ! !
    43 
    51 
    44 !PPCharSetPredicate methodsFor:'*petitcompiler'!
    52 !PPCharSetPredicate methodsFor:'*petitcompiler'!
    45 
    53 
    46 block
    54 block
    60 	self class == anotherPredicate class ifFalse: [ ^ false ].
    68 	self class == anotherPredicate class ifFalse: [ ^ false ].
    61 	
    69 	
    62 	^ classification  = anotherPredicate classification.
    70 	^ classification  = anotherPredicate classification.
    63 ! !
    71 ! !
    64 
    72 
       
    73 !PPCharSetPredicate methodsFor:'*petitcompiler'!
       
    74 
       
    75 hash
       
    76 	^ classification hash
       
    77 ! !
       
    78 
    65 !PPChoiceParser methodsFor:'*petitcompiler'!
    79 !PPChoiceParser methodsFor:'*petitcompiler'!
    66 
    80 
    67 asCompilerNode
    81 asCompilerNode
    68 	^ PPCChoiceNode new
    82 	^ PPCChoiceNode new
    69 		name: self name;
    83 		name: self name;
    86 		
   100 		
    87 ! !
   101 ! !
    88 
   102 
    89 !PPContext methodsFor:'*petitcompiler'!
   103 !PPContext methodsFor:'*petitcompiler'!
    90 
   104 
       
   105 atWs
       
   106 	^ false
       
   107 ! !
       
   108 
       
   109 !PPContext methodsFor:'*petitcompiler'!
       
   110 
    91 comment
   111 comment
    92 	^ self globalAt: #comment ifAbsent: [ nil ].
   112 	^ self globalAt: #comment ifAbsent: [ nil ].
    93 ! !
   113 ! !
    94 
   114 
    95 !PPContext methodsFor:'*petitcompiler'!
   115 !PPContext methodsFor:'*petitcompiler'!
   122 	^ self position: position
   142 	^ self position: position
   123 ! !
   143 ! !
   124 
   144 
   125 !PPContext methodsFor:'*petitcompiler'!
   145 !PPContext methodsFor:'*petitcompiler'!
   126 
   146 
       
   147 methodInvoked: whatever
       
   148 	"nothing to do"
       
   149 ! !
       
   150 
       
   151 !PPContext methodsFor:'*petitcompiler'!
       
   152 
   127 peek: anInteger
   153 peek: anInteger
   128 	^ stream peek: anInteger
   154 	^ stream peek: anInteger
       
   155 ! !
       
   156 
       
   157 !PPContext methodsFor:'*petitcompiler'!
       
   158 
       
   159 setWs
       
   160 	"nothing to do"
   129 ! !
   161 ! !
   130 
   162 
   131 !PPContext methodsFor:'*petitcompiler'!
   163 !PPContext methodsFor:'*petitcompiler'!
   132 
   164 
   133 whitespace
   165 whitespace
   196 
   228 
   197 position: anInteger
   229 position: anInteger
   198 	position := anInteger
   230 	position := anInteger
   199 ! !
   231 ! !
   200 
   232 
       
   233 !PPJavaWhitespaceParser methodsFor:'*petitcompiler'!
       
   234 
       
   235 = anotherParser
       
   236 	anotherParser == self ifTrue: [ ^ true ].
       
   237    anotherParser class = self class ifFalse: [ ^ false ].
       
   238  ^ anotherParser name = self name
       
   239 ! !
       
   240 
       
   241 !PPJavaWhitespaceParser methodsFor:'*petitcompiler'!
       
   242 
       
   243 hash
       
   244 	^ self name hash
       
   245 ! !
       
   246 
   201 !PPLiteralObjectParser methodsFor:'*petitcompiler'!
   247 !PPLiteralObjectParser methodsFor:'*petitcompiler'!
   202 
   248 
   203 asCompilerNode
   249 asCompilerNode
   204 	^ PPCCharacterNode new
   250 	^ PPCCharacterNode new
   205 		character: literal;
   251 		character: literal;
   288 ! !
   334 ! !
   289 
   335 
   290 !PPParser methodsFor:'*petitcompiler'!
   336 !PPParser methodsFor:'*petitcompiler'!
   291 
   337 
   292 compile
   338 compile
   293 	^ self compile: #PPGeneratedParser
   339 	^ self compile: PPCArguments default
   294 ! !
   340 ! !
   295 
   341 
   296 !PPParser methodsFor:'*petitcompiler'!
   342 !PPParser methodsFor:'*petitcompiler'!
   297 
   343 
   298 compile: name
   344 compile: arguments
   299 	^ self compile: name parameters: #()
   345 	self assert: (arguments isKindOf: PPCArguments).
   300 ! !
   346 	
   301 
   347 	^ PPCConfiguration default
   302 !PPParser methodsFor:'*petitcompiler'!
   348 		arguments: arguments;
   303 
   349 		compile: self
   304 compile: name andParse: input
   350 ! !
   305 	^ (self compile: name) parse: input
   351 
   306 ! !
   352 !PPParser methodsFor:'*petitcompiler'!
   307 
   353 
   308 !PPParser methodsFor:'*petitcompiler'!
   354 compile: arguments andParse: input
   309 
   355 	^ (self compile: arguments) parse: input
   310 compile: name parameters: params
   356 ! !
   311 	^ (PPCCompiler new parameters: params; compile: self as: name) new
   357 
   312 ! !
   358 !PPParser methodsFor:'*petitcompiler'!
   313 
   359 
   314 !PPParser methodsFor:'*petitcompiler'!
   360 compileAs: name
   315 
   361 	| arguments |
   316 compileWith: aPetitCompiler
   362 	arguments := PPCArguments default.
   317 	| compiled |
   363 	arguments name: name.
   318 	self children do: [ :child |
   364 	
   319 		compiled := child compileWith: aPetitCompiler.
   365 	^ self compile: arguments
   320 		self replace: child with: compiled bridge.
   366 ! !
   321 	].
   367 
   322 	^ aPetitCompiler compileBridgeTo: self
   368 !PPParser methodsFor:'*petitcompiler'!
   323 ! !
   369 
   324 
   370 compileWithConfiguration: configuration
   325 !PPParser methodsFor:'*petitcompiler'!
   371 	^ configuration compile: self
   326 
       
   327 compileWithParameters: params
       
   328 	^ self compile: #PPGeneratedParser parameters: params
       
   329 ! !
   372 ! !
   330 
   373 
   331 !PPParser methodsFor:'*petitcompiler'!
   374 !PPParser methodsFor:'*petitcompiler'!
   332 
   375 
   333 firstSetSuchThat: block
   376 firstSetSuchThat: block
   382 
   425 
   383 !PPParser methodsFor:'*petitcompiler'!
   426 !PPParser methodsFor:'*petitcompiler'!
   384 
   427 
   385 isTokenParser
   428 isTokenParser
   386 	^ false
   429 	^ false
       
   430 ! !
       
   431 
       
   432 !PPParser methodsFor:'*petitcompiler'!
       
   433 
       
   434 javaToken
       
   435 	| ws |
       
   436 	ws := PPJavaWhitespaceParser new.
       
   437 	^ ((ws, ((PPTokenParser on: self) tokenClass: PPJavaToken; yourself), ws) ==> #second)
       
   438 		propertyAt: #'trimmingToken' put: true;
       
   439 		yourself
   387 ! !
   440 ! !
   388 
   441 
   389 !PPParser methodsFor:'*petitcompiler'!
   442 !PPParser methodsFor:'*petitcompiler'!
   390 
   443 
   391 optimize
   444 optimize
   518 
   571 
   519 !PPSmalltalkGrammar methodsFor:'*petitcompiler'!
   572 !PPSmalltalkGrammar methodsFor:'*petitcompiler'!
   520 
   573 
   521 comment
   574 comment
   522  	^ $" asParser, $" asParser negate star, $" asParser.	
   575  	^ $" asParser, $" asParser negate star, $" asParser.	
   523 ! !
       
   524 
       
   525 !PPSmalltalkGrammar methodsFor:'*petitcompiler'!
       
   526 
       
   527 updateContext: aPPContext
       
   528 	super updateContext: aPPContext.
       
   529 "	
       
   530 	aPPContext globalAt: #comment ifAbsentPut: [ self comment ].
       
   531 	aPPContext globalAt: #whitespace ifAbsentPut: [  PPSmalltalkWhitespaceParser new ].
       
   532 "
       
   533 ! !
   576 ! !
   534 
   577 
   535 !PPSmalltalkGrammar methodsFor:'*petitcompiler'!
   578 !PPSmalltalkGrammar methodsFor:'*petitcompiler'!
   536 
   579 
   537 whitespace
   580 whitespace
   564 	^ token comments: comments
   607 	^ token comments: comments
   565 ! !
   608 ! !
   566 
   609 
   567 !PPSmalltalkTokenParser methodsFor:'*petitcompiler'!
   610 !PPSmalltalkTokenParser methodsFor:'*petitcompiler'!
   568 
   611 
   569 updateContext: aPPContext
       
   570 	aPPContext globalAt: #whitespace ifAbsentPut: PPSmalltalkWhitespaceParser new
       
   571 ! !
       
   572 
       
   573 !PPSmalltalkTokenParser methodsFor:'*petitcompiler'!
       
   574 
       
   575 whitespace
   612 whitespace
   576 	^ PPSmalltalkWhitespaceParser new
   613 	^ PPSmalltalkWhitespaceParser new
   577 ! !
   614 ! !
   578 
   615 
   579 !PPSmalltalkWhitespaceParser methodsFor:'*petitcompiler'!
   616 !PPSmalltalkWhitespaceParser methodsFor:'*petitcompiler'!
   644 	^ 'TOKEN[', parser displayName, ']'
   681 	^ 'TOKEN[', parser displayName, ']'
   645 ! !
   682 ! !
   646 
   683 
   647 !PPTokenParser methodsFor:'*petitcompiler'!
   684 !PPTokenParser methodsFor:'*petitcompiler'!
   648 
   685 
   649 firstSets: aFirstDictionary into: aSet
       
   650 	"Or keep empty, if token is a terminal"
       
   651 	^ super firstSets: aFirstDictionary  into: aSet 
       
   652 ! !
       
   653 
       
   654 !PPTokenParser methodsFor:'*petitcompiler'!
       
   655 
       
   656 isFirstSetTerminal
   686 isFirstSetTerminal
   657 	^ false
   687 	^ false
   658 ! !
   688 ! !
   659 
   689 
   660 !PPTokenParser methodsFor:'*petitcompiler'!
   690 !PPTokenParser methodsFor:'*petitcompiler'!
   676 ! !
   706 ! !
   677 
   707 
   678 !PPTokenParser methodsFor:'*petitcompiler'!
   708 !PPTokenParser methodsFor:'*petitcompiler'!
   679 
   709 
   680 startsWith: aCharacter
   710 startsWith: aCharacter
   681 	self first do: [:first | (first startsWith: aCharacter) ifTrue: [ ^ true ] ].
   711 	^ self first anySatisfy: [ :first | first startsWith: aCharacter ]
   682 	^ false
       
   683 ! !
   712 ! !
   684 
   713 
   685 !PPTokenParser methodsFor:'*petitcompiler'!
   714 !PPTokenParser methodsFor:'*petitcompiler'!
   686 
   715 
   687 whitespace
   716 whitespace
   695 		child: parser;
   724 		child: parser;
   696 		name: self name;
   725 		name: self name;
   697 		yourself
   726 		yourself
   698 ! !
   727 ! !
   699 
   728 
   700 !PPTrimmingParser methodsFor:'*petitcompiler'!
       
   701 
       
   702 compileWith: aPetitCompiler
       
   703 	^ aPetitCompiler compileTrim: self.
       
   704 ! !
       
   705 
       
   706 !PPTrimmingParser methodsFor:'*petitcompiler'!
       
   707 
       
   708 firstSets: aFirstDictionary into: aSet
       
   709 	super firstSets: aFirstDictionary into: aSet
       
   710 ! !
       
   711 
       
   712 !UndefinedObject methodsFor:'*petitcompiler'!
   729 !UndefinedObject methodsFor:'*petitcompiler'!
   713 
   730 
   714 asInteger
   731 asInteger
   715 	^ 256
   732 	^ 256
   716 ! !
   733 ! !