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§'
! !