我尝试使用 sablecc 解析有效消息。有三种有效的消息格式。
- 啊;(三个连续的字母字符 +semi
{messageid} messageid semi
) - 毫米; (或两个连续的字母或数字字符
{flightnum} carriercode semi
) - -amm(或连字符 + 字母字符 + 2 个连续的字母或数字字符
{load} hypene co semi
)
当我向程序输入有效字符串时,它不起作用。
输入:
美国广播公司;//类型 1
Z Z; //类型 2
Z Z; //类型 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,'-'
即使第一个字符串是有效的。