[英]What exactly makes grammar rules left-recursive in antlr?
所以,我想知道什么使解析器像:
line : expression EOF;
expression : m_expression (PLUS m_expression)?;
m_expression: basic (TIMES basic)?;
basic : NUMBER | VARIABLE | (OPENING expression CLOSING) | expression;
左遞歸和無效,而解析器像
line : expression EOF;
expression : m_expression (PLUS m_expression)?;
m_expression: basic (TIMES basic)?;
basic : NUMBER | VARIABLE | (OPENING expression CLOSING);
是有效的,並且即使“基本”的定義仍指“表達式”,它仍然有效。 特別是,我希望能夠以以下形式解析表達式
a+b+c
而不引入作用於兩個以上操作數的運算。
行調用表達式調用m_expression調用基本調用表達式,而表達式則間接地遞歸,對v3 antlr和v4都是不利的。 左遞歸的定義意味着您可以不消耗令牌而回到相同的規則。 在第二個實例中,表達式前面有OPENING令牌。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.