【问题标题】:How does the sample grammar on the antlr4 home page work?antlr4主页上的示例语法是如何工作的?
【发布时间】:2016-12-05 11:30:21
【问题描述】:

计算器数学运算符优先级通常被记住肺炎 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]+ ;

这是如何工作的?

【问题讨论】:

  • 你尝试解析哪些表达式?

标签: antlr4


【解决方案1】:

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

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 可能对你很有用。无论如何,如果您发布您正在努力理解的树,我们可以尝试进一步帮助您。祝你的项目好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2018-06-07
    • 2021-06-15
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    相关资源
    最近更新 更多