我正在研究一个应该解析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"
我有点迷失在这里,欢迎任何提示。
答案 0 :(得分:3)
我明白了。下载了JavaCC并编译了所有内容。使用单字符输入时,输出为:
String: t Length: 1 Call: parse Call: body Return: body Return: parse Exception in thread "main" ParseException: Encountered " <LETTER> "t "" at line 1, column 1. Was expecting one of: <EOF> "[b]" ... "[i]" ... "[u]" ... "[s]" ... "[url]" ... "[url=" ... "[img]" ... "[quote]" ... "[code]" ... "[color=" ... "[br]" ... <EOL> ... <TEXT> ... <TAGCHAR> ...
我注意到它找到了<LETTER>
令牌但未将其识别为<TEXT>
。
这就是问题所在。您已将所有内容声明为令牌,并根据令牌定义的顺序,字符串"t"
首先是<LETTER>
,而不是<TEXT>
。在<LETTER>
之后移动<TEXT>
令牌,它现在可以正常工作。您需要对<DIGIT>
和其他此类令牌应用相同的更改。