1

我正在尝试学习使用 JavaCC,并意识到它支持正则表达式。叫我懒惰,但我认为定义数字的默认/常用方法有点太长了:

TOKEN : { < #DIGITS : (["0" - "9"])+ >}

我尝试使用速记字符类,例如:

TOKEN : { < #DIGITS : (\d)+ >}

但“编译器编译器”似乎不喜欢它。我得到速记字符的词汇错误。我找不到关于此事的任何文档,所以我不确定我是否做错了什么或者它根本不受支持。如果有人可以确认/否认我的假设,即 javacc 不能很好地使用速记字符类,我将不胜感激。

4

1 回答 1

1

您发现它不受支持是正确的。JavaCC 中的正则表达式仅由字符串文字、对其他正则表达式的引用以及对预定义正则表达式<EOF> 的引用组成。

但是,您使用那里的代码所做的是创建自己的快捷方式。数字符号表示该符号是私有的,即只能在正则表达式中使用。因此,将其定义为 TOKEN : { < #D : (["0" - "9"])+ > } 意味着您可以在其他令牌定义中使用 < D >。

二进制分发包中包含的示例语法 javacc.jj 是官方语法,因此查看此文件您可以看到该语法可解析的内容。输出似乎本质上是一个语法验证器。

于 2012-07-02T12:06:28.343 回答