有没有办法在BNFC中使用空格?

时间:2013-09-10 21:17:50

标签: regex compiler-construction bnfc

如何在BNFC定义中使用空格?

例如,假设我想为lambda演算生成一个解析器,我允许抽象变量列表:

\x y z.x z (y z)

“显而易见”的事情是使用标记规则,如:

ListAbs . Exp ::= "\\" [Ident] "." Exp ;
separator Ident " "

但是,BNFC默认剥离空格,因此不起作用。使用逗号分隔符的工作原理是什么。有点丑,但我可以忍受它......仍然能够通过空间分开会很好。

BNFC中是否有空白字符类?

1 个答案:

答案 0 :(得分:2)

您可以将空字符串声明为分隔符:

separator Ident ""

在实践中,这允许您使用空格(或任何空格字符)作为分隔符:

$ cat test.cf
A . A ::= [Ident] ;
separator Ident ""
$ bnfc -haskell -m test.cf
$ make
$ echo 'x y z' | ./Testtest

Parse Successful!

[Abstract Syntax]

A [Ident "x",Ident "y",Ident "z"]

[Linearized tree]

x y z