Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing JavaCC:如何解析可能不存在的字符?_Parsing_Javacc - Fatal编程技术网

Parsing JavaCC:如何解析可能不存在的字符?

Parsing JavaCC:如何解析可能不存在的字符?,parsing,javacc,Parsing,Javacc,我正在尝试调整PDDL解析器,并且存在一个可选的令牌。假设这是我想读的两个选项。 (图1) 为了支持这两种情况,我在.jj中开发了如下图2所示的代码。它工作正常;然而,这样写是不合适的。 (图2) 问题:如何在.jj中编写代码以支持图1中的两种条件?换句话说,如何使其支持可选令牌:isGood,而这些令牌可能不存在于适当的编程方法中 我可能不知道前瞻是如何运作的。非常感谢阅读图1的任何解决方案。在这种情况下,您不需要前瞻性规范。只用 <LEFT_BRACKET> <NODE&g

我正在尝试调整PDDL解析器,并且存在一个可选的令牌。假设这是我想读的两个选项。 (图1)

为了支持这两种情况,我在.jj中开发了如下图2所示的代码。它工作正常;然而,这样写是不合适的。 (图2)

问题:如何在.jj中编写代码以支持图1中的两种条件?换句话说,如何使其支持可选令牌
:isGood
,而这些令牌可能不存在于适当的编程方法中


我可能不知道前瞻是如何运作的。非常感谢阅读图1的任何解决方案。

在这种情况下,您不需要前瞻性规范。只用

<LEFT_BRACKET>
<NODE>
[ <IS_GOOD> ]
<RIGHT_BRACKET>

[  ]


(  )?


(  | {} )

它们的意思是一样的。

在这种情况下不起作用的不只是
()?
。然而,我现在得到了答案,只是把括号改成了方括号。该部分将如下所示>
[LOOKAHEAD(2)]
。此代码声明“如果有访问权限,则跳过它。我感谢您的帮助,我会将此问题留给其他人。无论如何,我仍然不太确定前瞻是如何工作的。在这种情况下,您不需要前瞻规范。只需使用
…[]
…()?
@lexicore抱歉,你是对的,代码是有效的。我只是注意到在你的代码后面有“?”。但是,这些都很难找到,我尝试了很多解决方案来学习前瞻性…仍然不能很好地确定。请你解释一下前瞻性对我的示例有什么影响?我想如果你添加一个
前瞻性(2)
规范,这意味着解析器应该使用最多2个令牌的先行。由于本例只需要1个令牌,我怀疑添加
先行(2)
在这种情况下不会有任何区别。为什么不尝试一个实验。生成有前瞻性规范和没有前瞻性规范的代码,并比较生成的java代码。我猜这两种情况下都是一样的。至于“难以找到”,前两个在“语法文件”文档中。最后一个在常见问题解答中。
<LEFT_BRACKET>
<NODE>
(LOOKAHEAD(2) <IS_GOOD> <RIGHT_BRACKET> | <RIGHT_BRACKET>)
<LEFT_BRACKET>
<NODE>
(LOOKAHEAD(2) <IS_GOOD>)      // this is where it should support an optional token
<RIGHT_BRACKET>
<LEFT_BRACKET>
<NODE>
[ <IS_GOOD> ]
<RIGHT_BRACKET>
<LEFT_BRACKET>
<NODE>
( <IS_GOOD> )?
<RIGHT_BRACKET>
<LEFT_BRACKET>
<NODE>
( <IS_GOOD> | {} )
<RIGHT_BRACKET>