parsers/java/PPJavaTokenParser.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 21 Apr 2015 17:30:40 +0100
changeset 439 1a7d51c92b9a
parent 436 e1c44b571db9
permissions -rw-r--r--
Fixes for Smalltalk/X: * do not use Squeakism CharacterSet, use plain old String instead for portability reasons.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
435
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/petitparser/parsers/java' }"
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
"{ NameSpace: Smalltalk }"
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
PPTokenParser subclass:#PPJavaTokenParser
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	instanceVariableNames:''
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	classVariableNames:''
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
	poolDictionaries:''
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
	category:'PetitJava-Core'
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
!PPJavaTokenParser methodsFor:'parsing'!
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
parseComments: anArray on: aStream
439
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    15
        
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    16
        | start comments |
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    17
        comments := anArray.
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    18
        [ 
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    19
                | peekTwice |
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    20
        [ aStream atEnd not and: [ aStream peek isSeparator ] ]
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    21
                whileTrue: [ aStream next ].
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    22
        peekTwice := aStream peekTwice. 
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    23
          ((peekTwice  first = $/) and: 
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    24
                [ (peekTwice second = $*) or: [peekTwice second = $/]])] whileTrue: [
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    25
"               
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    26
                Transcript show: ('position ', aStream position asString, ' char ', aStream next asString); cr.
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    27
"               
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    28
                aStream next.
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    29
                start := aStream position.
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    30
                (aStream next = $*) 
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    31
                        ifTrue: [ aStream upToAll: '*/' ]
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    32
                        ifFalse: [ 
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    33
                                | position |
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    34
                                position := aStream position.
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    35
                                aStream upToAnyOf: (String with: (Character codePoint: 13) with: (Character codePoint: 10))].
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    36
                comments := comments copyWith: (start to: aStream position) ].
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    37
        ^ comments
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    38
1a7d51c92b9a Fixes for Smalltalk/X:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 436
diff changeset
    39
    "Modified: / 21-04-2015 / 17:23:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
435
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
!
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
parseOn: aPPContext
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
	| token comments memento   |
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
	memento := aPPContext remember.
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
	comments := self
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
		parseComments: #()
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
		on: aPPContext.
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
	token := super parseOn: aPPContext.
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
	token isPetitFailure ifTrue: [
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
		aPPContext restore: memento.
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
		^ token ].
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
	comments := self
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
		parseComments: comments
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
		on: aPPContext.
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
	^ token comments: comments
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
! !
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
!PPJavaTokenParser methodsFor:'private'!
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
defaultTokenClass
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
	^ PPJavaToken
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
! !
3bc08fb90133 Initial commit of PetitJava
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63