BNFC中禁止尾随分隔符的列表规则

时间:2019-04-06 13:12:53

标签: parsing grammar context-free-grammar bnfc

我正在使用BNFC编写自己的编程语言语法,以便在Haskell中做进一步的解释。根据BNFC手册:

lib1是一组规则的简写:

app

这条规则几乎可以满足我的需要,但是我也希望我的语法既接受空列表又禁止尾随分隔符。换句话说,给定规则:

lib2

我希望separator nonempty Stm ";" ;是有效的输入,从而导致(:[]). [Stm] ::= Stm ; (:). [Stm] ::= Stm ";" [Stm] ; 。同时,ParseResult. S ::= "[" [Integer] "]" ; separator nonempty Integer "," ; 应该产生[],但是ParseResult []不能派生。手册中提到了该问题:

  

问题。从分隔符生成的语法非空将   实际上还接受以分号结尾的列表,而   pretty-printer将其“标准化”。这可能被视为错误,   但是一套禁止终止分号的规则会很多   更复杂。非空情况很严格。

我无法找到或提出简单的解决方案。这可以轻松完成吗?

0 个答案:

没有答案