2

我正在研究应该解析 BBcodes 的 JavaCC 解析器。

我的 Javacc 源代码:patebin.com(Junit 测试:这里

源代码有点工作,但它不想接受带有单个字符的标记,只能识别多字符串。

它确实解析了这个字符串:

"test[b]bold[/b]nothing[b]bold[/b]after"

但不是:

"t[b]bold[/b]nothing[b]bold[/b]after"

我有点迷路了,这里欢迎任何提示。

4

1 回答 1

3

我想到了。下载 JavaCC 并编译所有内容。单字符输入,输出为:

字符串:t
长度:1
调用:解析
  称呼:身体
  返回:身体
返回:解析
线程“主”ParseException 中的异常:在行遇到“<LETTER>”t“”
1,第 1 列。
期待其中之一:
    <EOF>
    “[b]”...
    “[一世]” ...
    “[你]” ...
    “[s]”……
    “[网址]” ...
    “[网址=”...
    “[图片]” ...
    “[引用]” ...
    “[代码]” ...
    “[颜色=”...
    “[br]” ...
    <停产> ...
    <文本> ...
    <标签字符> ...

我注意到它找到了一个<LETTER>令牌,但没有将其识别为<TEXT>.

这就是问题所在。您已将所有内容声明为标记,并且根据标记定义的顺序,字符串"t"<LETTER>第一个,而不是<TEXT>. 之后移动<LETTER>令牌<TEXT>,它现在应该可以工作了。您需要对<DIGIT>s 和其他此类标记应用相同的更改。

于 2010-09-26T17:14:12.907 回答