Greetings!
On Tue, 2009-09-29 at 16:54 +0200, Thierry USO wrote: > A complete example which shows my problem. > ....remainder snipped.... Your grammar does not handle New-Line characters ('\n' and possibly '\r'). You should have received many "no viable alternative at ..." error messages.... As others have stated you should: 1) make LETTER and DIGIT fragement rules. 2) make ConstDef be a parser rule 3) when you do 2) you should add a WHITESPACE lexer rule, perhaps putting the WHITESPACE (including new-lines) on the HIDDEN channel (e.g. { $channel = HIDDEN; } ) attached is a complete example with the above suggestions applied. Oh by the way.... in my example I construct an AST during the parse and then print the AST at the end; rather than doing the System.out stuff during the parse.... Hope this helps... -jbb --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "il-antlr-interest" group. To post to this group, send email to il-antlr-interest@googlegroups.com To unsubscribe from this group, send email to il-antlr-interest+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/il-antlr-interest?hl=en -~----------~----~----~----~------~----~------~--~---
grammar ADL; // Rally Application Development Language options { output = AST; ASTLabelType = CommonTree; } @members { private static final String [] x = new String[]{ "\nCONST str1 = \"ok\" ;\n str2=\"ko\";\n str3 = \"end\";" }; public static void main(String [] args) { for( int i = 0; i < x.length; ++i ) { try { System.out.println("about to parse:`"+x[i]+"`"); ADLLexer lexer = new ADLLexer(new ANTLRStringStream(x[i])); CommonTokenStream tokens = new CommonTokenStream(lexer); ADLParser parser = new ADLParser(tokens); ADLParser.start_return p_result = parser.start(); CommonTree ast = p_result.tree; if( ast == null ) { System.out.println("resultant tree: is NULL"); } else { System.out.println("resultant tree: " + ast.toStringTree()); } System.out.println(); } catch(Exception e) { e.printStackTrace(); } } } } start : constant_definition EOF!; constant_definition : constDef ; constDef : CONST ( Identifier EQUAL CharString SEMICOLON )+ ; CharString : '"' (LETTER)+ '"' ; CONST : 'CONST' ; fragment LETTER : ('a'..'z'|'A'..'Z') ; fragment DIGIT : ('0'..'9') ; SEMICOLON : ';' ; EQUAL : '=' ; Identifier : LETTER (LETTER|'_'|DIGIT)+ ; WHITESPACE : (' '|'\t')+ { $channel = HIDDEN; } ; NEWLINE : ('\r'|'\n')+ { $channel = HIDDEN; } ;
List: http://www.antlr.org/mailman/listinfo/antlr-interest Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address