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*