tools/JavaBlockParser.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sat, 15 Dec 2012 23:25:19 +0100
branchdevelopment
changeset 1883 b36e52129040
parent 1879 7d232ff32dde
permissions -rw-r--r--
Initial implementation of JavaCompiler using Oracle javac toolbox. Not yet finished.

"{ Package: 'stx:libjava/tools' }"

PPParser subclass:#JavaBlockParser
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'Languages-Java-Parser'
!


!JavaBlockParser methodsFor:'parsing'!

parseOn: aStream

    | openCount peekC start stop |

    aStream skipSeparators.
    peekC := aStream peek.
    peekC == #/ ifTrue:[
        aStream next.
        aStream skipComment
    ].

    peekC ~~ ${ ifTrue:[
        ^ PPFailure message: ('unexpected char (got ', peekC, ' expecting { )') at: aStream position
    ].
    openCount := 1.
    aStream next.
    start := aStream position.
    [ openCount ~~ 0 ] whileTrue:[
        aStream atEnd ifTrue:[
            ^ PPFailure message: ('unexpected end of input') at: aStream position
        ].
        peekC := aStream peek.
        peekC == ${ ifTrue:[
            aStream next.    
            openCount := openCount + 1
        ] ifFalse:[peekC == $} ifTrue:[
            aStream next.
            openCount := openCount - 1
        ] ifFalse:[peekC == $/ ifTrue:[
            aStream next.
            aStream peek == $*  ifTrue:[
                aStream next.
                aStream rememberTokenStartPosition:2.
                aStream skipComment
            ] ifFalse:[
                aStream peek == $/ ifTrue:[
                    aStream next.
                    aStream rememberTokenStartPosition:0.
                    aStream skipEOLComment
                ]
            ]
        ] ifFalse:[peekC == $" ifTrue:[
            aStream rememberTokenStartPosition.
            aStream nextString: $" character: false.
        ] ifFalse:[peekC == $' ifTrue:[
            aStream rememberTokenStartPosition.
            aStream  nextString: $' character: true.
        ] ifFalse:[
            aStream next
        ]]]]]
    ].
    stop := aStream position.
    JavaToken new
        type: #__Block__;
        value: nil;
        startPosition: start;
        endPosition: stop;
        yourself.



    "
        ( JavaBlockParser new trim , ';' asParser trim) parse: '{ } ;'

    "

    "Modified: / 17-03-2012 / 19:16:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaBlockParser class methodsFor:'documentation'!

version_HG

    ^ '$Changeset: <not expanded> $'
!

version_SVN
    ^ '§Id§'
! !