Javascript 吉森多行发行

Javascript 吉森多行发行,javascript,parsing,jison,Javascript,Parsing,Jison,我用Jison编写了一个小型pharser,并编写了以下代码: %lex %% "BISMILLAH" return "BM"; [0-9]+("."[0-9]+)?\b return "NUMBER"; \n return "LB"; \s+ /* skip whitespace */ "ST" re

我用Jison编写了一个小型pharser,并编写了以下代码:

%lex
%%
"BISMILLAH" return "BM";
[0-9]+("."[0-9]+)?\b  return "NUMBER";
\n         return "LB";
\s+                   /* skip whitespace */
"ST"            return "START";
"ED"            return "END";
"AD"    return 'ADD';
"SU"    return 'SUBSTRACTION';
<<EOF>>               return 'EOF'

/lex

%start abn

%% 

    abn
    : 
    | abn bm
    | abn start
    | abn exp {arra.push($2);}
    | abn end   
    ;
number
    : NUMBER {$$=Number($1);}
    | ADD NUMBER NUMBER {$$=Number($2)+Number($3);}
    | SUBSTRACTION NUMBER NUMBER {$$=Number($2)-Number($3);}
    ;
end 
    : END EOF
    ;
bm
    : BM LB
    ;
start
    : START LB
    ;
exp 
    : number LB {$$=$1}
    ;
%%
arra=[]
%lex
%%
“BISMILLAH”返回“BM”;
[0-9]+(“[0-9]+)?\b返回“数字”;
\n返回“LB”;
\s+/*跳过空格*/
“ST”返回“START”;
“ED”返回“END”;
“AD”返回“ADD”;
“SU”返回“减法”;
返回“EOF”
/莱克斯
%启动abn
%% 
荷兰银行
: 
|荷兰银行
|abn启动
|abn exp{arra.push($2);}
|abn端
;
数
:NUMBER{$$=NUMBER($1);}
|添加数字{$$=数字($2)+数字($3);}
|减法数{$$=NUMBER($2)-NUMBER($3);}
;
结束
:结束EOF
;
bm
:BM磅
;
开始
:开始磅
;
经验
:编号LB{$$=$1}
;
%%
阿拉=[]
我使用以下代码对其进行了测试,它可以正常工作(单行): 比斯米拉 装货单 公元6年8月 预计起飞时间
它返回14你到底是怎么测试的?您的解析器不会“返回”任何内容;它所做的只是尝试将数字添加到
arra
。如果解析器可以看到一个名为
arra
的数组,那么就我所见,它工作得很好。因此,有必要对你所做的事情进行更精确的描述。