[antlr-interest] please help on simple parser antlr v3
Michiel Vermandel
Michiel_Vermandel at axi.be
Wed Sep 27 05:52:08 PDT 2006
Hi Tom,
Thanks for your explanation.
I made some extra lexer rules and I succeeded in eliminating the warnings.
Though I'm not sure my grammar is still correct and I don't understand why
this solution does not generate the warnings.
Do you have any idea?
Thanks!
-------------------------grammar with no warnings-----------------------
grammar TestParser;
options {k=2; backtrack=true; memoize=true;}
statement: identifier | quoted_string ;
identifier: IDENTIFIER;
quoted_string: QUOTED_STRING;
fragment
AZ_CHAR: 'a' .. 'z' | 'ç' | 'é' | 'è'| 'ê' | 'à';
fragment
SPECIAL_CHAR: '_' | '$' | '#' ;
fragment
ANY_CHAR: AZ_CHAR | SPECIAL_CHAR;
IDENTIFIER: ( AZ_CHAR | (N)+) ANY_CHAR (ANY_CHAR | N)*;
N: ('0' .. '9')+;
LF : '\n' { channel=99; };
CRLF : '\r' ('\n')? { channel=99; };
TAB : '\t' { channel=99; };
WS : (' '
| TAB
| CRLF
| LF
)+
{ channel=99; };
QUOTED_STRING: '\'' ( ~('\'') | '\'' '\'' )* '\'';
DOUBLE_QUOTED_STRING: '"' ( '""' | ~('"') )* '"';
I don't think Antlr v3 yet allows you to suppress warnings so these are
unavoidable. You want to check that Antlr is behaving correctly and
ignoring the correct alternatives. As you have no actions it does not
matter which alternative Antlr takes, and it is correctly handling your
grammar so you can ignore the warnings.
I don't think there is any way to refactor out the remaining ambiguity.
Removing the WS rule was correct. It is not needed as it is duplicated by
the ~('\'') alternative, but the ambiguity between '\n' and '\r'('\n')? is
unavoidable, though ideally you would supress the warning.
Tom.
On 9/27/06, Michiel Vermandel <Michiel_Vermandel at axi.be> wrote:
Sorry,
It would have been better to test the grammar first without the WS rule in
the QOUTES_STRING rule since I still get warnings (less though) and now I
can't
figure out how to solve this.
Can someone please tell me how to prevent the multiple alternatives
warnings?
------------------------new grammar---------------------------
grammar TestParser;
options {k=2; backtrack=true; memoize=true;}
statement: identifier | quoted_string ;
identifier: IDENTIFIER;
quoted_string: QUOTED_STRING;
fragment
AZ_CHAR: 'a' .. 'z' | 'ç' | 'é' | 'è'| 'ê' | 'à';
fragment
SPECIAL_CHAR: '_' | '$' | '#' ;
fragment
ANY_CHAR: AZ_CHAR | SPECIAL_CHAR;
IDENTIFIER: ( AZ_CHAR | (N)+) ANY_CHAR (ANY_CHAR | N)*;
N: ('0' .. '9')+;
WS : (' '
| '\t'
| ('\n'|'\r'('\n')?)
)+
{ channel=99; };
QUOTED_STRING: '\'' ( ~('\'') | '\'' '\'' )* '\'';
--------------------remaining warnings---------------------------------
[14:26:53] test1.g:28:15: Decision can match input such as "'\n'" using
multiple alternatives: 1, 2
As a result, alternative(s) 2 were disabled for that input
[14:26:53] C:\Documents and Settings\mvrm\My
Documents\Antlr\grammars\test1.g:28:15: Decision can match input such as
"'\n'" using multiple alternatives: 1, 2
As a result, alternative(s) 2 were disabled for that input
Hi,
I started converting my v2 grammars to v3 and ran against some warnings
when generating code for a very simple test grammar.
Below, you find the parser, followed by the warnings.
This grammar is a part of a grammar in v2 which I am converting.
In v2 the rule QUOTED_STRING was:
QUOTED_STRING: '\'' ( WS | '\'' '\'' | ~('\'') )* '\'';
Now in v3 I get this list of warnings (see below).
In v2 the WS was needed in the QUOTED_STRING rule in order to increment
the line counter properly.
I think I can solve the warnings by leaving out the WS rule since in Antlr
v3 I do not need to bother about incrementing the line counter.
So, Can please someone confirm that I am right in just leaving out the WS
rule from the QUOTED_STRING rule?
Thanks!
---------------------------------------------------------------------
grammar TestParser;
options {k=2; backtrack=true; memoize=true;}
statement: identifier | quoted_string ;
identifier: IDENTIFIER;
quoted_string: QUOTED_STRING;
fragment
AZ_CHAR: 'a' .. 'z' | 'ç' | 'é' | 'è'| 'ê' | 'à';
fragment
SPECIAL_CHAR: '_' | '$' | '#' ;
fragment
ANY_CHAR: AZ_CHAR | SPECIAL_CHAR;
IDENTIFIER: ( AZ_CHAR | (N)+) ANY_CHAR (ANY_CHAR | N)*;
N: ('0' .. '9')+;
WS : (' '
| '\t'
| ('\n'|'\r'('\n')?)
)+
{ channel=99; };
QUOTED_STRING: '\'' ( WS | '\'' '\'' | ~('\'') )* '\'';
-------------------------------------------------------------------------------
[14:09:37] test1.g:28:15: Decision can match input such as "'\n'" using
multiple alternatives: 1, 2
As a result, alternative(s) 2 were disabled for that input
[14:09:37] test1.g:32:48: Decision can match input such as "' '" using
multiple alternatives: 1, 3
As a result, alternative(s) 3 were disabled for that input
[14:09:37] test1.g:32:48: Decision can match input such as "'\t'" using
multiple alternatives: 1, 3
As a result, alternative(s) 3 were disabled for that input
[14:09:37] test1.g:32:48: Decision can match input such as "'\r'" using
multiple alternatives: 1, 3
As a result, alternative(s) 3 were disabled for that input
[14:09:37] test1.g:32:48: Decision can match input such as "'\n'" using
multiple alternatives: 1, 3
As a result, alternative(s) 3 were disabled for that input
[14:09:37] C:\Documents and Settings\mvrm\My
Documents\Antlr\grammars\test1.g:28:15: Decision can match input such as
"'\n'" using multiple alternatives: 1, 2
As a result, alternative(s) 2 were disabled for that input
[14:09:37] C:\Documents and Settings\mvrm\My
Documents\Antlr\grammars\test1.g:32:48: Decision can match input such as
"' '" using multiple alternatives: 1, 3
As a result, alternative(s) 3 were disabled for that input
[14:09:37] C:\Documents and Settings\mvrm\My
Documents\Antlr\grammars\test1.g:32:48: Decision can match input such as
"'\t'" using multiple alternatives: 1, 3
As a result, alternative(s) 3 were disabled for that input
[14:09:37] C:\Documents and Settings\mvrm\My
Documents\Antlr\grammars\test1.g:32:48: Decision can match input such as
"'\r'" using multiple alternatives: 1, 3
As a result, alternative(s) 3 were disabled for that input
[14:09:37] C:\Documents and Settings\mvrm\My
Documents\Antlr\grammars\test1.g:32:48: Decision can match input such as
"'\n'" using multiple alternatives: 1, 3
As a result, alternative(s) 3 were disabled for that input
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20060927/c02a80b9/attachment-0001.html
More information about the antlr-interest
mailing list