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

Reply via email to