我正在使用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)+(a)
(1)+((1))
,这是最终输出。我过去只接受输出并在其上调用eval()
,以获得最终值。
但是这是一个任务(构建一个PEG解析器),老师不赞成“外包”解析数学表达式本身。
我有另一个(更简单)PEG,它接受数学表达式并计算其值。 我想避免的可能选项:
所以,问题是我想在相同的语法中执行两个步骤,但我不知道如何。< / p>
我 采取先前的“潜水”将变量解除抽象为文字数字。