为什么我的JavaCC解析器不解析小于2个字符的标记?

时间:2010-09-24 22:02:41

标签: java parsing bbcode javacc

我正在研究一个应该解析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"

我有点迷失在这里,欢迎任何提示。

1 个答案:

答案 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>和其他此类令牌应用相同的更改。