Shunting-Yard功能定义

时间:2015-01-29 00:02:12

标签: c++ parsing shunting-yard

有没有人对基于Shunting-Yard的解析器添加函数 definition 支持有任何见解?

单语句定义很简单。我可以修改我的解析器来递归一个块(这非常模糊!)来处理函数定义作为一个子程序,但这感觉就像一个kludge。

有更好的解决方案吗?

更新

所以,我设法通过几乎没有任何修改来实现这一点。 SY阶段将{}都推送到堆栈上。

当解析器(管道中的下一个阶段)遇到{(blockstart)时,它会创建一个新的Block(AST)结构并将其推送到RPN堆栈。当解析器到达}时,它会创建一个AST节点向量,并弹出堆栈直到遇到Block。此时,块结束和块开始之间遇到的节点向量将添加到块的表达式(语句)集合中。

当解析器到达堆栈上的Block时,它会检查下一个(堆栈中较低的)节点是否是函数调用。如果是,则弹出函数调用,创建函数定义节点,并使用先前生成的块并调用以定义函数。

这是一个非常模糊/半无用的描述 - I will attempt to write up a detailed explanation and post it somewhere

0 个答案:

没有答案