Peg.JS中的左递归错误

时间:2015-01-24 19:41:37

标签: grammar pegjs

我目前正在为科学博览会制作编程语言。

这是我的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]*

我收到以下错误:“检测到规则'语句'的左递归。” 但我无法弄清楚为什么会这样。

1 个答案:

答案 0 :(得分:4)

你有Statements = Statements Statement,这是递归的。

使用PEG时,最好写Statements = Statement+Statements = Statement Statement*