Functional programming 抑制来自'的空结果;许多';在';顺序(p,多(p))和#x27;使用解析器组合器构造

Functional programming 抑制来自'的空结果;许多';在';顺序(p,多(p))和#x27;使用解析器组合器构造,functional-programming,postscript,parser-combinators,Functional Programming,Postscript,Parser Combinators,我正试图按照Hutton和Meijer的“一元解析器组合器”构建解析器组合器。我的实现是PostScript,但我认为我的问题是combinator解析器的一般性问题,而不是我的具体实现 作为一个小练习,我将使用解析器识别正则表达式 (pc9.ps)run /Dot (.) char def /Meta (*+?) anyof def /Character (*+?.|()) noneof def /Atom //Do

我正试图按照Hutton和Meijer的“一元解析器组合器”构建解析器组合器。我的实现是PostScript,但我认为我的问题是combinator解析器的一般性问题,而不是我的具体实现

作为一个小练习,我将使用解析器识别正则表达式

(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
它正在工作,但输出中有大量的
[]
空数组,当我尝试
绑定
处理程序来处理值时,这些数组确实会造成阻碍

$ gsnd -q -dNOSAFER pc9re2.ps
stack:
[[[[[97 []] [[98 []] [[99 []] []]]] [[[100 []] [[101 []] [[102 []]
[]]]] [[[103 []] [[104 []] [[105 []] []]]] []]]] null]]
每当排序组合器接受来自零次出现的
可能
多个
(使用
可能
)的结果时,就会发生这种情况

使用解析器组合器排除输出中的额外噪声的正常方法是什么


叹气。似乎我可以围绕它来实施。我在
seq
中添加了特殊代码,以检测右手边的空边,并将其丢弃。关于其他问题…

叹气。似乎我可以围绕它来实施。我在
seq
中添加了特殊代码,以检测右手边的空边,并将其丢弃。关于其他问题