【发布时间】:2023-03-30 06:43:01
【问题描述】:
下面是我想与 Jison 一起使用的最小语法示例。
/* lexical grammar */
%lex
%%
\s+ /* skip whitespace */
[0-9]+("."[0-9]+)?\b return 'NUMBER'
[0-9] return 'DIGIT'
[,-] return 'SEPARATOR'
// EOF means "end of file"
<<EOF>> return 'EOF'
. return 'INVALID'
/lex
%start expressions
%% /* language grammar */
expressions
: e SEPARATOR d EOF
{return $1;}
;
d
: DIGIT
{$$ = Number(yytext);}
;
e
: NUMBER
{$$ = Number(yytext);}
;
在这里,我定义了NUMBER 和DIGIT,以便根据上下文同时允许数字和数字。我不知道的是我如何定义上下文。上面的例子总是返回
Expecting 'DIGIT', got 'NUMBER'
当我尝试在Jison debugger 中运行它时。如何定义语法以始终期望分隔符后有一个数字?我尝试了以下也不起作用
/* lexical grammar */
%lex
%%
\s+ /* skip whitespace */
[,-] return 'SEPARATOR'
// EOF means "end of file"
<<EOF>> return 'EOF'
. return 'INVALID'
/lex
%start expressions
%% /* language grammar */
expressions
: e SEPARATOR d EOF
{return $1;}
;
d
: [0-9]
{$$ = Number(yytext);}
;
e
: [0-9]+("."[0-9]+)?\b
{$$ = Number(yytext);}
;
【问题讨论】:
标签: parsing grammar bison jison