2

私は、BBcode を解析する必要がある JavaCC パーサーに取り組んでいます。

私の Javacc ソース コード: patebin.com (Junit テスト: here )

ソースコードの種類は機能しますが、単一文字のトークンを受け入れたくないため、複数の文字列のみが認識されます。

次の文字列を解析します。

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

だがしかし:

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

私はここでちょっと迷っています。どんなヒントでも歓迎します。

4

1 に答える 1

3

私はそれを考え出した。JavaCC をダウンロードし、すべてをコンパイルしました。1 文字入力の場合、出力は次のようになります。

文字列: t
長さ: 1
呼び出し: パース
  呼び出し: 本体
  リターン:本体
戻り値: パース
スレッド "main" ParseException での例外: 行で " <LETTER> "t "" が発生しました
1、列 1。
次のいずれかを期待していました:
    <EOF>
    "[b]" ...
    "[私]" ...
    「[う]」…
    「[s]」 ...
    「[URL]」 ...
    "[url=" ...
    「[画像]」 ...
    "[見積もり]" ...
    「[コード]」...
    "[色=" ...
    「[br]」 ...
    <EOL> ...
    <テキスト> ...
    <TAGCHAR> ...

トークンが見つかったことに気付きましたが、<LETTER>それを として認識しませんでした<TEXT>

そこに問題があります。すべてをトークンとして宣言し、トークン定義の順序に基づいて、文字列"t"<LETTER>ではなく最初<TEXT>です。<LETTER>トークンを後に移動すると、<TEXT>すぐに機能するはずです。<DIGIT>s などのトークンにも同じ変更を適用する必要があります。

于 2010-09-26T17:14:12.907 に答える