sablecc を使用して有効なメッセージを解析しようとしました。有効なメッセージ形式には 3 つのタイプがあります。
- ああ; (英字3文字+セミ
{messageid} messageid semi
) - んん; ( または 2 つの連続する英字または数字
{flightnum} carriercode semi
) - -amm (またはハイフン + 英字 + 2 つの連続する英字または数字
{load} hypene co semi
)
プログラムに有効な文字列を入力しても機能しませんでした。
入力:
abc; // タイプ 1
グーグー; // タイプ 2
グーグー; // タイプ 2
-ab2; //type3
sablecc 文法コード :
Helpers
/* Our helpers */
fa = ['0' .. '9'] ;
a = [['a' .. 'z'] + ['A' .. 'Z']] ;
m= [a + fa];
sp = ' ' ;
cr = 13 ; // carriage return
lf = 10 ; // line feed
tab = 9 ; // tab char
bl = sp | cr | lf | tab;
Tokens
/* Our simple token definition(s). */
semi = ';' bl*;
co = (a)(m)(m);
messageid = (a)(a)(a) ;
carriercode = (m)(m);
hypene ='-';
Productions
program = {single} statement |
{sequence} program statement;
statement = {messageid} messageid semi |
{flightnum}carriercode semi |
{load} hypene co semi ;
コンパイルが成功し、Java コードを実行すると、パーサー例外がスローされます。
simpleAdders.parser.ParserException: [1,1] 期待: messageid、carriercode、「-」
最初の文字列は有効ですが。