2008年7月15日星期二

关于treetop的一点备忘

treetop是一个PEG的解释器。
1. PEG跟CFG不同,我觉得主要有两点不同
(1)它比CFG使用要简单,速度可能更快。
另外, 它的token扫描和语法放到一起也是一个优势.
(2)匹配时依赖顺序
A/B不会等于B/A,这一点需要注意.
绝大多数的语法都可以用PEG来解析,
我开始使用的时候,出错的时候,总是怀疑是不是有些语法无法用PEG来解析,
但是最后都是我写的rule的顺序有问题, 所以请相信PEG :).

2. 使用的注意要点
(1)treetop没有可以匹配大小写混在的方法,一个解决的方法就是写成下面的形式。
rule select_keyword
[Ss] [Ee] [Ll] [Ee] [Cc] [Tt]
end
(2)左循环
PEG的算法决定了不能很好的处理左循环,所以需要我们手动的把它拆开.

(3)顺序
如果/之间的表达式都可以匹配,
要把大的顺序放到前面,然后是小的.

(4)匹配关键字,而不是以关键字开始的
rule end_keyword
'end' !(!' ' .)
end
(5)匹配标识符
rule identifier
(!keyword name) / (keyword name)
end
rule name
[a-zA-Z]+
end

没有评论: