Antlr et C# - comment utiliser le parseur
Bonjour,
Je débute avec Antlr et je rencontre un problème plutôt gênant.
J'ai écris une grammaire:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| grammar Antlr_HEHE;
options {
language=CSharp2;
}
@parser::namespace { CDM.SD.HEHE.Shared.HEHE }
@lexer::namespace { CDM.SD.HEHE.Shared.HEHE }
OP_NOT : 'NOT';
OP_1 : 'OR';
OP_2 : 'AND';
OP_3 : '!='|'<='|'>='|'<'|'>'|'=';
BROPEN : '(';
BRCLOSE : ')';
NUMBER : ('0'..'9')+ ('.' ('0'..'9')+)?;
ISSIGNED : 'isSigned';
FEDERATION : 'Federation';
MEDIA : 'Media';
STRING : ('a'..'z'|'A'..'Z'|'0'..'9'|'_')+;
prog : instr_2 (OP_1 instr_2)* EOF { System.out.println("INT .. INT"); };
instr_2 : instr_3 (OP_2 instr_3)*;
instr_3 : atom (OP_3 atom )?;
atom : OP_NOT? (ISSIGNED | FEDERATION | MEDIA | NUMBER | STRING | (BROPEN prog BRCLOSE)); |
L'idée étant de pouvoir écrire des choses comme: "FEDERATION = 1 AND IsSigned".
Ensuite le code c# doit pouvoir exécuter l'opération. Il va remplacer FEDERATION par le numéro courant, remplacer la valeur de isSigned et executer le tout. En gros:
Citation:
return getFederation() == 1 && isSigned().
La grammaire compile bien et j'ai bien le lexer et le parser qui est généré. Seulement je n'arrive pas à l'utiliser dans mon code.
Code:
1 2 3
| Antlr_HEHELexer lex = new Antlr_HEHELexer(new ANTLRStringStream("FEDERATION = 1 AND IsSigned"));
CommonTokenStream tokens = new CommonTokenStream(lex);
Antlr_HEHEParser parser = new Antlr_HEHEParser(tokens); |
Je ne sais pas quoi faire ensuite avec le parser. J'ai trouvé plusieurs exemples sur internet mais aucun n'est utilisable. Ils utilisent des méthodes dans l'objet parser que je n'ai pas. Exemple:
Code:
1 2
| Antlr_HEHEParser.expr_return ret = parser.expr();
//je n'ai ni la classe expr_return, no la méthode expr(). |
Quelqu'un aurait une idée de comment je dois utiliser le code C# générer ?