1

テーブル作成スクリプトまたはインデックス作成スクリプトのいずれかを含むファイルを解析しようとしています。
以下は文法です。ジャンク入力でスクリプトルールを実行するとcreate xyz table 、次のline 1:0 no viable alternative at input 'create' ようなエラーが表示されますが、table_scriptまたはindex_scriptを実行すると、特定のエラーメッセージが表示されますline 1:8 missing 'table' at 'xxxtab'

不足しているテーブルまたはインデックスとしてスクリプトを実行しても、同じエラー メッセージが表示される可能性はありますか?

grammar DBScript;
options { output=AST; }
tokens {
    CREATE;
    TABLE;
    INDEX;

}

scripts
:
index_script | table_script
;

index_script
: create index index_name;


table_script
    : create table table_name ;

create
    : 'create';

table
    : 'table';

index
    : 'index';

table_name 
  :
   IDENT;

index_name 
  :
   IDENT;

fragment LETTER : ('a'..'z' | 'A'..'Z') ;
fragment DIGIT : '0'..'9';
INTEGER : DIGIT+ ;
IDENT : LETTER (LETTER | DIGIT)*;
WS : (' ' | '\t' | '\n' | '\r' | '\f')+ {$channel = HIDDEN;};
4

1 に答える 1

0

ANTLR 3.5 以降では、エラー メッセージ より具体的になる可能性があると思います。ただし、すべての種類のエラーについてエラーを報告する完全な方法はありません。私が提供できる最善のヒントは、ANTLR が LL(1) 決定で発生するエラーを報告 (およびエラーから回復) するのに最適であるということです。

上記の例では、次のように参照を左因数分解できcreateます。左因数分解の後は直接参照index_scriptも参照もしないことに注意してください。table_scriptcreate

scripts : create_script;
create_script : create (index_script | table_script);

index_script : index index_name;
table_script : table table_name;
于 2013-03-26T21:35:59.153 に答える