簡體   English   中英

使用遞歸下降解析器解析算術表達式的無限遞歸

[英]Infinite recursion for parsing arithmetic expressions using a recursive descent parser

我正在嘗試在 python 中創建自己的遞歸下降解析器,但是當我的解析器遇到有關算術表達式的規則時,它超過了 python 遞歸限制。 這是語法:

Term --> Factor {( "+" | "-" ) Factor}
Factor --> Grouping {( "*" | "/" | "%" ) Grouping}
Grouping --> Expression | "(" Expression ")" | "-" Factor


Expression --> Integer | Float | Tuple | ID | Term

語法中的花括號表示它們可以重復(但也是可選的),並且在我的解析器中使用 while 循環來實現。 我覺得造成這種情況的原因是Grouping規則可以是和Expression (它可以一遍又一遍地重復,因為FactorTerm規則的右側是可選的)。

我要問的是:有沒有辦法用遞歸下降解析器實現左遞歸或以某種方式在我的語法中消除它?

編輯:我在四處瀏覽,似乎這種類型的遞歸稱為間接左遞歸,也許這與它有關?

如您所見,無限遞歸是無限循環的結果

Expression ⇒ Term ⇒ Factor ⇒ Grouping ⇒ Expression

必須打破。 但這是一個簡單的轉錄錯誤; Expression需要從頂部開始,在語法優先級的層次結構中:

Expression ⇒ Term {( "+" | "-" ) Term}
Term ⇒ Factor {( "*" | "/" | "%" ) Factor}
Factor ⇒ Item | "-" Factor
Item ⇒ Integer | Float | Tuple | ID | "(" Expression ")"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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