2

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

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

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

4

1 回答 1

4

你有Statements = Statements Statement,它是左递归的。

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

于 2015-01-25T18:56:53.203 回答