Bonjour,

Je débute avec Antlr et je rencontre un problème plutôt gênant.

J'ai écris une grammaire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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:
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?