[antlr-interest] java.g - a couple of issues
Davin McCall
davmac at deakin.edu.au
Thu Mar 17 20:50:10 PST 2005
Thanks, but it actually seems like the line numbers are off if we leave
the call to "newline()" _in_.
As far as I can tell, because we are no longer matching the newline
character sequence in SL_COMMENT, it instead gets matched in the
whitespace target, which includes a call to newline() anyway:
// Whitespace -- ignored
WS : ( ' '
| '\t'
| '\f'
// handle newlines
| ( options {generateAmbigWarnings=false;}
: "\r\n" // Evil DOS
| '\r' // Macintosh
| '\n' // Unix (the right way)
)
{ newline(); }
)+
{ _ttype = Token.SKIP; }
;
- Davin
Jon Schewe wrote:
>One problem with this is that if you remove the calls to newline(),
>you're line numbers will be off. This makes error reporting rather
>difficult.
>
>On Fri, 2005-03-18 at 12:24 +1100, Davin McCall wrote:
>
>
>>To clarify, we have changed the single line comment target "SL_COMMENT"
>>as follows:
>>
>>(Original)
>>// Single-line comments
>>SL_COMMENT
>> : "//"
>> (~('\n'|'\r'))* ('\n'|'\r'('\n')?)
>> {$setType(Token.SKIP); newline();}
>> ;
>>
>>(Modified)
>>// Single-line comments
>>SL_COMMENT
>> : "//"
>> (~('\n'|'\r'))*
>> {$setType(Token.SKIP); }
>> ;
>>
>>And the typeArgumentBounds target from:
>>
>>typeArgumentBounds[boolean addImagNode]
>> {boolean isUpperBounds = false;}
>> :
>> ( "extends"! {isUpperBounds=true;} | "super"! )
>>classOrInterfaceType[addImagNode]
>> {
>> if (isUpperBounds)
>> {
>> #typeArgumentBounds =
>>#(#[TYPE_UPPER_BOUNDS,"TYPE_UPPER_BOUNDS"], #typeArgumentBounds);
>> }
>> else
>> {
>> #typeArgumentBounds =
>>#(#[TYPE_LOWER_BOUNDS,"TYPE_LOWER_BOUNDS"], #typeArgumentBounds);
>> }
>> }
>> ;
>>
>>To:
>>
>>typeArgumentBounds[boolean addImagNode]
>> {boolean isUpperBounds = false;}
>> :
>> ( "extends"! {isUpperBounds=true;} | "super"! )
>>classOrInterfaceType[addImagNode] arraySpecOpt
>> {
>> if (isUpperBounds)
>> {
>> #typeArgumentBounds =
>>#(#[TYPE_UPPER_BOUNDS,"TYPE_UPPER_BOUNDS"], #typeArgumentBounds);
>> }
>> else
>> {
>> #typeArgumentBounds =
>>#(#[TYPE_LOWER_BOUNDS,"TYPE_LOWER_BOUNDS"], #typeArgumentBounds);
>> }
>> }
>> ;
>>
>>
>>Davin
>>
>>
>>Davin McCall wrote:
>>
>>
>>
>>>Hi,
>>>We're using Michael Studman's java 1.5 grammar as a base for our own
>>>and have noticed the following issues. We've got fixes but I wanted to
>>>both highlight the issues to the community and see if anyone else has
>>>comments (especially in regards to whether the fixes are correct :-) ).
>>>
>>>1. Single line comments without a terminating newline at the end of a
>>>file cause a parse error, due to the requirement that the comment is
>>>followed by a line-end.
>>>
>>>It seems to be possible to just remove that requirement (and also the
>>>call to newline()) and then everything works fine (ie. the match is
>>>greedy anyway).
>>>
>>>2. Arrays aren't allowed as wildcard bounds (they should be).
>>>
>>>For instance, "? extends Thread[]" as a wildcard in some declaration
>>>causes a parse error. A possible fix is to add "arraySpecOpt" in to
>>>the "typeArgumentBounds" target.
>>>
>>>Davin
>>>
>>>
>>>
>>>
>>>
>
>________________________________________________________________________
>Jon Schewe | http://mtu.net/~jpschewe
>GPG signature at http://mtu.net/~jpschewe/gpg.sig.html
>For I am convinced that neither death nor life, neither angels
>nor demons, neither the present nor the future, nor any
>powers, neither height nor depth, nor anything else in all
>creation, will be able to separate us from the love of God that
>is in Christ Jesus our Lord. - Romans 8:38-39
>
>
>
>
>
>
>
More information about the antlr-interest
mailing list