我正在研究应该解析 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 和其他此类标记应用相同的更改。