与EBNF的Antlr语法

时间:2014-09-17 21:33:43

标签: antlr ebnf

我尝试使用ANTLR通过简单的语法生成Lexer / Parser。我现在做了什么:

grammar ExprV2;

@header {
package mypack.parte2; 
}

@lexer::header {
package mypack.parte2;
}

start 
:   expr EOF            { System.out.println($expr.val);}
;

expr returns [int val]
:   term e=exprP[$term.val]                      { $val = $e.val; } 
;

exprP[int i] returns [int val]
:                                        { $val = $i; }
|   '+' term    e=exprP[$i + $term.val]  { $val = $e.val; }
|   '-' term    e=exprP[$i - $term.val]  { $val = $e.val; }     
;

term returns [int val]
:   fact    e=termP[$fact.val]                   { $val = $e.val; } 
;

termP[int i] returns [int val]
:                                                {$val = $i;}
|   '*' fact    e=termP[$i * $fact.val] {$val = $e.val; }
|   '/' fact    e=termP[$i / $fact.val] {$val = $e.val; }
;

fact returns [int val]
:   '(' expr    ')'                     { $val = $expr.val; }
|   NUM                                  { $val=Integer.parseInt($NUM.text); }
;

NUM :   '0'..'9'+ ;

WS  :   (' '    |   '\t'    |'\r'   |   '\n')+  {   skip(); };

我想要获得的是生成一个使用EBNF编写的语法的Lexer / Parser,但是我被困了,我不知道如何继续。我在互联网上看了一眼,但我没有成功找到任何清楚的东西。谢谢大家!

0 个答案:

没有答案