[英]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
(它可以一遍又一遍地重復,因為Factor
和Term
規則的右側是可選的)。
我要問的是:有沒有辦法用遞歸下降解析器實現左遞歸或以某種方式在我的語法中消除它?
編輯:我在四處瀏覽,似乎這種類型的遞歸稱為間接左遞歸,也許這與它有關?
如您所見,無限遞歸是無限循環的結果
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.