Peg.JS 中的左递归错误
Left Recursion Error in Peg.JS
我目前正在为科学博览会制作一种编程语言。
这是我的 PEG.js 语法:
start
= s:Statements
{ return ['Program', {}].concat(s); }
/ _
Statements
= s:Statement ";"
{ return s; }
/ ss:Statements s:Statement ";"
{ return ss; ss.push(s); }
/ _
Statement
= SetVar
SetVar
= i:Ident "=" e:Expr
{ return ['SetVarStmt', {}, i, e]; }
Expr
= Ident
/ Number
Number
= n:[0-9]+
{ return ['Number', { val: parseInt(n.join(""), 10) }]; }
Ident
= i:[a-zA-Z._]*
{ return ['Ident', { name: i.join("") }]; }
_ = [ \t\r\n]*
我收到以下错误:"Left recursion detected for rule 'Statements'."
但我不明白为什么会这样。
你有Statements = Statements Statement
,这是递归的。
使用PEG时,最好写成Statements = Statement+
,或者Statements = Statement Statement*
。
我目前正在为科学博览会制作一种编程语言。
这是我的 PEG.js 语法:
start
= s:Statements
{ return ['Program', {}].concat(s); }
/ _
Statements
= s:Statement ";"
{ return s; }
/ ss:Statements s:Statement ";"
{ return ss; ss.push(s); }
/ _
Statement
= SetVar
SetVar
= i:Ident "=" e:Expr
{ return ['SetVarStmt', {}, i, e]; }
Expr
= Ident
/ Number
Number
= n:[0-9]+
{ return ['Number', { val: parseInt(n.join(""), 10) }]; }
Ident
= i:[a-zA-Z._]*
{ return ['Ident', { name: i.join("") }]; }
_ = [ \t\r\n]*
我收到以下错误:"Left recursion detected for rule 'Statements'." 但我不明白为什么会这样。
你有Statements = Statements Statement
,这是递归的。
使用PEG时,最好写成Statements = Statement+
,或者Statements = Statement Statement*
。