generated at
2/16/2025, 6:07:07 PM
左再帰
以下のような規則を考える
E→E+T
E→T
一行で書くなら
E → T | E + T
このとき1つ目の規則を
左再帰
という
すなわち、Eの右辺の最初の記号にEが来てしまうこと
このとき、この規則は曖昧性を含んでしまう
FIRST集合
的には、FIRST(T)
\subset
FIRST(E+T)になるから。
そこで
左再帰の除去
をする
Parsec
では
chainl
を使うと左再帰を除去したBNFを実装できる
左再帰
は無限ループになるのが問題なのであって、
曖昧な文法
という意味ではない?
直接左再帰
1つの規則による左再帰
一般の左再帰
「一般の左再帰」という用語なのかな
複数の規則による左再帰
例
bnf
A -> Bc B -> d|Aa
参考
左再帰 - Wikipedia
https://blog.tiqwab.com/2017/01/04/recursive-descent-parser.html
https://ocw.kyoto-u.ac.jp/ja/09-faculty-of-engineering-jp/compiler/pdf/compiler_04.pdf