Почему мой анализатор JavaCC не анализирует токены размером менее 2 символов? - PullRequest
2 голосов
/ 25 сентября 2010

Я работаю над анализатором JavaCC, который должен анализировать BB-коды.

Мой исходный код Javacc: patebin.com (тест Junit: здесь )

Исходный код выключен, но он не хочет принимать токены с одним символом, распознаются только многосимвольные строки.

Он анализирует эту строку:

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

Но не:

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

Я немного растерялся, любые советы приветствуются здесь.

1 Ответ

3 голосов
/ 26 сентября 2010

Я понял это.Скачал 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> s и других подобных токенов.

...