我正在研究应该解析 BBcodes 的 JavaCC 解析器。
我的 Javacc 源代码:patebin.com(Junit 测试:这里)
源代码有点工作,但它不想接受带有单个字符的标记,只能识别多字符串。
它确实解析了这个字符串:
"test[b]bold[/b]nothing[b]bold[/b]after"
但不是:
"t[b]bold[/b]nothing[b]bold[/b]after"
我有点迷路了,这里欢迎任何提示。
我想到了。下载 JavaCC 并编译所有内容。单字符输入,输出为:
字符串:t 长度:1 调用:解析 称呼:身体 返回:身体 返回:解析 线程“主”ParseException 中的异常:在行遇到“<LETTER>”t“” 1,第 1 列。 期待其中之一: <EOF> “[b]”... “[一世]” ... “[你]” ... “[s]”…… “[网址]” ... “[网址=”... “[图片]” ... “[引用]” ... “[代码]” ... “[颜色=”... “[br]” ... <停产> ... <文本> ... <标签字符> ...
我注意到它找到了一个<LETTER>
令牌,但没有将其识别为<TEXT>
.
这就是问题所在。您已将所有内容声明为标记,并且根据标记定义的顺序,字符串"t"
是<LETTER>
第一个,而不是<TEXT>
. 之后移动<LETTER>
令牌<TEXT>
,它现在应该可以工作了。您需要对<DIGIT>
s 和其他此类标记应用相同的更改。