今天意外发现,prolog原来有parsing macro,这样用它来做文法分析就更方便了,写起来很直观,就跟过去学的计算理论里面的写法一模一样。
譬如有文法
S->aST.
S->e.
T->aSb.
T->c.
借助parsing macro 只需要写如下代码:
s --> "a", s, t.
s --> [ ].
t --> "a",s,"b".
t --> "c".
终结符直接用小写字母表示,非终结符需要写在双引号中,询问一个串比如aab是否可由该文法生成的时候,只需要输入查询s("aab",[]).