0
我試圖使用sablecc解析有效的消息。有三種有效的消息格式。SableCC解析給出錯誤結果
- aaa; (三個連續字符+半角
{messageid} messageid semi
) - mm; (或兩個連續字母或數字字符
{flightnum} carriercode semi
) - -amm(或連字符+字母字符+ 2個連續字母或數字字符
{load} hypene co semi
)
當我輸入有效的字符串到程序,它不工作。
輸入:
ABC; // type 1
ZZ; // type 2
ZZ; // type 2
-ab2; // 3型
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,' - '
即使第一st環是有效的。