【发布时间】:2010-09-24 22:02:40
【问题描述】:
我正在开发一个可以解析 BBcodes 的 JavaCC 解析器。
我的 Javacc 源代码:patebin.com(Junit 测试:here)
源代码有点用,但它不想接受带有单个字符的标记,只能识别多字符串。
它会解析这个字符串:
"test[b]bold[/b]nothing[b]bold[/b]after"
但不是:
"t[b]bold[/b]nothing[b]bold[/b]after"
我有点迷路了,欢迎在这里提供任何提示。
【问题讨论】:
-
虽然这很可能无法解决您的问题,但我注意到在您的语法中您已将
TEXT设置为(<LETTER>|<DIGIT>|<PUNCT>|<OTHER>)*。这不应该是(<LETTER>|<DIGIT>|<PUNCT>|<OTHER>)+,因为缺少文本不是文本(除非这是故意的)? -
@Paul,你是对的。我把它改回“+”,因为我最初用“+”而不是“*”,这只是一个绝望的举动,看看它是否会改变行为。顺便说一句,它确实没有帮助。
-
我不熟悉 JavaCC 语法,但查看
content()部分,LOOKAHEAD(2)在text()之前有什么意义吗?我猜它应该是LOOKAHEAD(1)或者不在那里。 -
谢谢杰夫。你是对的,它不需要(不再需要)。但这并没有解决我的问题。解析器仍然不匹配单个字符标记...
-
我倾向于认为
body()部分有问题。就我个人而言,我写出了所有扩展的语法规则,只是感觉*可能会引起一些冲突。您是否尝试过只解析像"t"这样的单个字符串?还有上一步,两个字符串?
标签: java parsing bbcode javacc