[antlr-interest] Problemns with Predicate using last version...
Alexandre Porcelli
porcelli at uol.com.br
Thu Apr 12 16:21:52 PDT 2007
I could solve this problem... I just did the following:
LABEL_STATEMENT
: {getCharPositionInLine() == 0}? {!isLineContinuation}? LABEL_NAME
;
LINE_NUMBER
: {!isLineContinuation && getCharPositionInLine() == 0}? LINE_NUMBER_DIGIT
{ token = Token.SKIP_TOKEN;}
;
On 4/12/07, Alexandre Porcelli <porcelli at uol.com.br> wrote:
> I still trying to fix it.. and I could observe that when I change the
> following Lexical Rules using a simple semantic predicate, it works
> (the result is OK):
>
> LABEL_STATEMENT
> : {!isLineContinuation && getCharPositionInLine() == 0}? WS? LABEL_NAME
> ;
>
> LINE_NUMBER
> : {!isLineContinuation && getCharPositionInLine() == 0}? WS?
> LINE_NUMBER_DIGIT
> { token = Token.SKIP_TOKEN;}
> ;
>
> But... I got an output messages reporting some problems with a failed
> predicate:
>
> line 8:2 rule LABEL_STATEMENT failed predicate: {!isLineContinuation
> && getCharPositionInLine() == 0}?
> line 9:2 rule LABEL_STATEMENT failed predicate: {!isLineContinuation
> && getCharPositionInLine() == 0}?
> line 10:2 rule LABEL_STATEMENT failed predicate:
> {!isLineContinuation && getCharPositionInLine() == 0}?
> line 11:2 rule LABEL_STATEMENT failed predicate:
> {!isLineContinuation && getCharPositionInLine() == 0}?
> line 11:12 rule LABEL_STATEMENT failed predicate:
> {!isLineContinuation && getCharPositionInLine() == 0}?
> line 11:18 rule LABEL_STATEMENT failed predicate:
> {!isLineContinuation && getCharPositionInLine() == 0}?
> line 12:6 rule LABEL_STATEMENT failed predicate:
> {!isLineContinuation && getCharPositionInLine() == 0}?
>
> Any suggestion? Any help is welcomed!
>
> Thanks in Advance!
> Alexandre Porcelli
>
> >
> > On 4/11/07, Alexandre Porcelli <porcelli at uol.com.br> wrote:
> > > I started today develop a Visual Basic 6 grammar based using ANTLR v3
> > > (last build).
> > >
> > > I started with just the lexer rules... here is my job result:
> > >
> > > grammar VBGrammar;
> > >
> > > @lexer::members
> > > {
> > > boolean isLineContinuation = false;
> > > }
> > >
> > > compilationUnit
> > > : statementList*
> > > ;
> > >
> > > statementList
> > > : identifier
> > > | numeric
> > > | label
> > > ;
> > >
> > > identifier
> > > : IDENTIFIER
> > > ;
> > >
> > > numeric : NUMERIC
> > > ;
> > >
> > > label : LABEL_STATEMENT
> > > ;
> > >
> > > LABEL_STATEMENT
> > > : {!isLineContinuation && getCharPositionInLine() == 0}?=> WS?
> > > (LABEL_NAME|DIGIT+ { token = Token.SKIP_TOKEN;})
> > > ;
> > >
> > > COMMENT
> > > : '\'' (ANY_EXCLUDING_NL
> > > {
> > > if(input.LA(1) == '_' && (input.LA(2) == '\r' || input.LA(2) == '\n')){
> > > input.consume();
> > > input.consume();
> > > if (input.LA(1) == '\n'){
> > > input.consume();
> > > }
> > > }
> > > })*
> > > {token = Token.SKIP_TOKEN;}
> > > ;
> > >
> > > IDENTIFIER
> > > : (DIGIT|'_')* LETTER ('-' | LETTER|DIGIT|'_' | '$' | '#')*
> > > ;
> > >
> > > NUMERIC
> > > : DIGIT+ ('.' DIGIT+)
> > > | DIGIT+
> > > ;
> > >
> > > WS : (' ' | '\t' )+
> > > { token = Token.SKIP_TOKEN;}
> > > ;
> > >
> > > LINE_CONTINUATION
> > > : '_' F_NL
> > > { isLineContinuation = true; }
> > > ;
> > >
> > > NL : ('\r' | '\n')+
> > > { token = Token.SKIP_TOKEN; isLineContinuation = false;}
> > > ;
> > >
> > > fragment
> > > LABEL_NAME
> > > : LETTER (LETTER | '_' | DIGIT)+ ':'
> > > ;
> > >
> > > fragment
> > > LETTER
> > > : 'a'..'z' | 'A'..'Z'
> > > ;
> > >
> > > fragment
> > > DIGIT
> > > : '0'..'9'
> > > ;
> > >
> > > fragment
> > > ANY_EXCLUDING_NL
> > > : '\u0000'..'\t'|'\u000B'..'\f'|'\u000E'..'\uFFFE'
> > > ;
> > >
> > > fragment
> > > F_NL : ('\r' | '\n')+
> > > ;
> > >
> > > I use to test this grammar this file:
> > >
> > > 'teste
> > > 'dkjshfkjs ksjdhf lksjhdf lskjhf lskjdhf ldfsdf _
> > > dsdfsgfhsffd _
> > > asdkjhskjdhfhkj _
> > > soghskjs djkfhglksj lkjshdf glkjhsdf gsfg sdfg
> > >
> > >
> > > 20 teste _
> > > 30 teste _
> > > 40 sss
> > > 50 asdsdfsdf dsfad fjjh
> > > label: teste
> > >
> > > Everything seens to be fine... but I got this error when I try to test
> > > this grammar:
> > >
> > > line 8:2 no viable alternative at character ' '
> > > line 8:3 no viable alternative at character 't'
> > > line 8:4 no viable alternative at character 'e'
> > > line 8:5 no viable alternative at character 's'
> > > line 8:6 no viable alternative at character 't'
> > > line 8:7 no viable alternative at character 'e'
> > > line 8:8 no viable alternative at character ' '
> > > line 9:0 no viable alternative at character '3'
> > > line 9:1 no viable alternative at character '0'
> > > line 9:2 no viable alternative at character ' '
> > > line 9:3 no viable alternative at character 't'
> > > line 9:4 no viable alternative at character 'e'
> > > line 9:5 no viable alternative at character 's'
> > > line 9:6 no viable alternative at character 't'
> > > line 9:7 no viable alternative at character 'e'
> > > line 9:8 no viable alternative at character ' '
> > > line 10:0 no viable alternative at character '4'
> > > line 10:1 no viable alternative at character '0'
> > > line 10:2 no viable alternative at character ' '
> > > line 10:3 no viable alternative at character 's'
> > > line 10:4 no viable alternative at character 's'
> > > line 10:5 no viable alternative at character 's'
> > > line 11:2 no viable alternative at character ' '
> > > line 11:3 no viable alternative at character 'a'
> > > line 11:4 no viable alternative at character 's'
> > > line 11:5 no viable alternative at character 'd'
> > > line 11:6 no viable alternative at character 's'
> > > line 11:7 no viable alternative at character 'd'
> > > line 11:8 no viable alternative at character 'f'
> > > line 11:9 no viable alternative at character 's'
> > > line 11:10 no viable alternative at character 'd'
> > > line 11:11 no viable alternative at character 'f'
> > > line 11:12 no viable alternative at character ' '
> > > line 11:13 no viable alternative at character 'd'
> > > line 11:14 no viable alternative at character 's'
> > > line 11:15 no viable alternative at character 'f'
> > > line 11:16 no viable alternative at character 'a'
> > > line 11:17 no viable alternative at character 'd'
> > > line 11:18 no viable alternative at character ' '
> > > line 11:19 no viable alternative at character 'f'
> > > line 11:20 no viable alternative at character 'j'
> > > line 11:21 no viable alternative at character 'j'
> > > line 11:22 no viable alternative at character 'h'
> > > line 12:5 no viable alternative at character ':'
> > > line 12:6 no viable alternative at character ' '
> > > line 12:7 no viable alternative at character 't'
> > > line 12:8 no viable alternative at character 'e'
> > > line 12:9 no viable alternative at character 's'
> > > line 12:10 no viable alternative at character 't'
> > > line 12:11 no viable alternative at character 'e'
> > >
> > > Any suggestion?
> > >
> > > Best Regards,
> > > Alexandre Porcelli
> > >
> >
>
More information about the antlr-interest
mailing list