gpt4 book ai didi

javascript - Jison 递归

转载 作者:行者123 更新时间:2023-11-29 16:59:17 25 4
gpt4 key购买 nike

我正在努力了解 Jison。不过我有点麻烦。下面的解析器总是返回 [],不管你给它什么。

%lex
%%

"data"\s* return 'DATA'
[A-Za-z][A-Za-z0-9_]* return 'IDENTIFIER'
[0-9]+("."[0-9]+)?\b return 'NUMBER'
"=" return 'ASSIGN'
("<-"|"<+-") return 'REACT'
"+" return '+'
"-" return '-'
"*" return '*'
"/" return '/'
"^" return '^'
\n+ return 'NL'
<<EOF>> return 'EOF'
. return 'INVALID'

/lex

%token NL

/* operator associations and precedence */

%left ASSIGN
%left REACT
%left '+' '-'
%left '*' '/'
%left '^'
%left UMINUS

%start program

%% /* language grammar */

program
:
{return [];}
| program statement
{return $1.concat([$2]);}
| program statement EOF
{return $1.concat([$2]);}
;

statement
: assign NL
{return $1;}
;

assign
: IDENTIFIER ASSIGN expression
{return ['assign', $1, $3];}
| IDENTIFIER REACT expression
{return ['react', $1, $2, $3];}
;

expression
: NUMBER
{return +$1;}
| IDENTIFIER
;

问题显然出在我对非终端程序的定义上。声明它的正确方法是什么?

最佳答案

正如 Aadit M. Shah 在评论中指出的那样,问题是在解析完成之前,您不能在 jison 语法操作中return。如果解析器规则执行return,解析器本身将返回。您需要将语义值分配给 $$

关于javascript - Jison 递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29655780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com