簡體   English   中英

是什么使語法規則在antlr中左遞歸?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM