raa0121 / GoBCDice

GoBCDice is BCDice reimplemented by Go.
BSD 3-Clause "New" or "Revised" License
9 stars 2 forks source link

文法をPEGで書き直す #30

Closed ochaochaocha3 closed 5 years ago

ochaochaocha3 commented 5 years ago

以下の問題が発覚したため、構文解析を現在のLALR(1)構文解析器で行うことが不可能と分かった。原因は、トークンの先読みが1個しかできないことだった。

そこで、これらの問題を解消できるPEG(Parsing Expression Grammar)構文解析器を作る。PEG構文解析器の特長は、トークンを無限回先読みできることと、解析の順番を明記できることである。一方、PEG構文解析器には左再帰(a <- a PLUS b など)を単純に書けないという弱点もある。これまでのLALR(1)構文解析器のテストコードをほぼそのまま使えるようにし、最終的に生成される抽象構文木が等しくなるように作る。