antlr4主页上的示例语法如何工作?

时间:2016-07-31 05:14:11

标签: antlr4

计算器数学运算符优先级经常被记住肺炎PMDAS。

ANTLR home page上的语法(使用相同的缩写)具有订单MDASP。这不是PMDAS或反向PMDAS,就像我期望的那样。例如。 this stackoverflow answer包含一个看起来像PMDAS的语法。

但无论我在命令行中放入什么表达式;解析树看起来正确!

grammar Expr;       
prog:   (expr NEWLINE)* ;
expr:   expr ('*'|'/') expr
    |   expr ('+'|'-') expr
    |   INT
    |   '(' expr ')'
    ;
NEWLINE : [\r\n]+ ;
INT     : [0-9]+ ;

这是如何运作的?

1 个答案:

答案 0 :(得分:0)

回答这个问题有点棘手,因为我不完全确定你要解析的是什么,但是这个语法所期望的伪代码可以帮助你理解它:

An int is one or more numbers from 0 to 9
A new line is one or more \r\n

an (expr)ession is made up of any of these:
an expression with a '*' or '/' and another expression
an expression with a '+' or '-' and another expression
an int
a curly brace containing an expression followed by a curly brace

the (prog)ram is made up of zero or more expressions followed by new lines.

还记得ANTLR:

  

首先是最长的序列。如果两个规则或更多匹配   最长的序列然后它选择指定的词法规则   第一

This link可能对您非常有用。无论如何,如果您发布了您正在努力理解的树,我们可以尝试进一步帮助您。祝你的项目好运。