ANTLR语法后缀
|
遇到问题时,我正在为一种小语言编写简单的语法。当我尝试解释时,它会抛出一个“ 0”。哦,这是ANTLRWorks 3。
另外-我指定该语言应为Python,但仍然可以使用Java :(为什么?
这是输入:
program Test1 =
const t1 : int := 1;
const t2 : int := 2;
var x, y, z : int;
begin
x := 41;
y := 10;
z := 2 4 *;
end Test1.
这是我的代码:
grammar lang;
options {
language=Python;
output=AST;
ASTLabelType=CommonTree;
}
tokens {DECL;} // an imaginary node
start : decl ;
decl : type ID \';\' -> ^(DECL type ID)
;
type : INTTYPE // automatic tree construction builds a node for this rule
| FLOATTYPE
;
program
: \'program\' ID \'=\'
(const | variable)*
\'begin\'
statement*
\'end\' ID \'.\'
;
const
: \'const\' ID \':\' type \':=\' expr \';\'
;
variable
: \'var\' ID (\',\' ID)* \':\' type \';\'
;
statement
: assignment
;
assignment
: ID \':=\' expr \';\'
;
// expressions....fun!
term
: ID
| expr
| INTTYPE
;
negation
: \'not\'* term
;
unary
: (\'+\' | \'-\')* negation
;
mult
: unary (unary (\'*\' | \'/\' | \'mod\'))*
;
add
: mult (mult (\'+\' | \'-\'))*
;
relation
: add (add (\'==\' | \'!=\' | \'<\' | \'<=\' | \'>=\' | \'>\'))*
;
expr
: relation (relation (\'and\' | \'or\'))*
;
INTTYPE : \'int\' ;
FLOATTYPE : \'float\' ;
ID : (\'a\'..\'z\' | \'A\'..\'Z\') (\'a\'..\'z\' | \'A\'..\'Z\' | \'0\'..\'9\')* ;
INT : \'0\'..\'9\'+ ;
WS : (\' \'|\'\\n\' | \'\\t\') {$channel=HIDDEN;} ;
我究竟做错了什么?
没有找到相关结果
已邀请:
1 个回复
倾坞髓
现在,通过在命令行上执行以下操作,从中生成一个词法分析器和解析器(Python源文件!): java -cp antlr-3.1.3.jar org.antlr.Tool lang.g 如果现在执行以下脚本
您会看到以下内容已打印到控制台: