在PEG中,处理输入两次

时间:2015-05-17 13:12:05

标签: javascript parsing recursion grammar peg

背景

我正在使用PEG.js online

我有一个PEG接受一个函数(只有数学赋值和表达式有效)并返回一个等价的文字数学表达式,如3+2*5

示例输入(功能):

main()
{
    a = 1
    b = a
    return a+b
}

示例输出(表达式):(1)+((1))

具体细节

'去抽象'每个变量

首先我们读取每个语句,并为每个赋值语句执行哈希分配

示例结果哈希:

{
    a => 1
    b => a
}

然后我们获取返回的表达式,并通过迭代地替换有效密钥的任何令牌。执行与赋值语句一样多的迭代(在本例中为2)。

  • 返回表达式示例:a+b
  • 迭代后1:(1)+(a)
  • 迭代后2:(1)+((1)),这是最终输出

问题

我过去只接受输出并在其上调用eval(),以获得最终值。 但是这是一个任务(构建一个PEG解析器),老师不赞成“外包”解析数学表达式本身。

我有另一个(更简单)PEG,它接受​​数学表达式并计算其值。 我想避免的可能选项:

  • 可以将第一个PEG的输出传输到第二个。
  • 可以缩小我的PEG范围并说它只计算原始的文字数学表达式(而不是它的值)。

所以,问题是我想在相同的语法中执行两个步骤,但我不知道如何。< / p>

采取先前的“潜水”将变量解除抽象为文字数字。

  • 如果我可以在替换变量的同时计算数学 - 如何?
  • 如果不是 - 一旦我'潜入'语法解析,我怎么能走另一条路?

0 个答案:

没有答案