Antlr 3 を使用した簡単な文法があります。
grammar i;
@header {
package com.data;
}
null : 'null';
value : null | STRING;
elements : value? | (value ',' value)+;
STRING : ('a'..'z'|'A'..'Z')+;
WS : (' '|'\t'|'\f'|'\n'|'\r')+ {skip();}; // handle white space between keywords
私が達成しようとしているのは、私には価値があるということです。したがって、値はオプションにすることも、コンマの後に別の値を続ける値にすることもできます。たとえば、次のようになります。
value は true の場合もあれば、true、true、true、true の場合もあります。
解釈を行うと、次のように機能します。
真実
または真、真
true、true、true を試すと、ツリーは true、true で表示されますが、NoViableAltException が表示されます。
私も試しました:
elements: value? | (value ',' value)*;
しかし、これもうまくいきません。
私が間違っているアイデアはありますか?
編集:
insert : 'INSERT INTO TABLE' 'VALUES' '('elements')'';';