我正试图按照Hutton和Meijer的“ Monadic Parser Combinators”构建解析器组合器。我的实现是在PostScript中进行的,但是我认为我的问题是组合器解析器的一般问题,而不是我的特定实现。
作为一个小练习,我正在使用解析器来识别正则表达式。
(pc9.ps)run
/Dot (.) char def
/Meta (*+?) anyof def
/Character (*+?.|()) noneof def
/Atom //Dot
//Character plus def
/Factor //Atom //Meta maybe seq def
/Term //Factor //Factor many seq def
/Expression //Term (|) char //Term xthen many seq def
/regex { string-input //Expression exec ps } def
(abc|def|ghi) regex
quit
它正在工作,但是输出中有很多[]
空数组,当我尝试使用bind
处理程序来处理值时,它们确实会受到阻碍。
$ gsnd -q -dNOSAFER pc9re2.ps
stack:
[[[[[97 []] [[98 []] [[99 []] []]]] [[[100 []] [[101 []] [[102 []]
[]]]] [[[103 []] [[104 []] [[105 []] []]]] []]]] null]]
只要seq
排序组合器接受出现次数为零的maybe
或many
(使用maybe
)的结果,就会发生这种情况。
使用Parser组合器排除输出中的额外噪声的正常方法是什么?
答案 0 :(得分:0)
S。看来我可以解决它。我在seq
中添加了特殊代码以检测右侧的空白并将其丢弃。关于其他问题...