2015-11-18 129 views
0

比方说,我有一个像前瞻与后缀语言

3 2 result +  // equivalent to result = 3 + 2 
result 1 result + // equivalent to ++result 

后缀的语言,我应该如何实现一个递归下降解析器先行(我用C做这++)?

我对如何设计这样的分析算法,因为我不能只在第一个标记推断指令的类型

+1

无论您想解析此语言,还是仅仅评估其语义,最好了解[面向堆栈的编程语言](https://en.wikipedia.org/wiki/Stack-oriented_programming_language)。简而言之,您可以循环读取令牌,决定从堆栈中弹出多少元素(零个或多个),“执行”令牌的含义以及将元素推送到堆栈(零个或多个)。分析器和解释器都可以通过为令牌分配适当的含义来构建。 –

回答

1

我会说你真的不需要任何先行在所有不确定的,只是当前令牌。

将当前令牌推送到堆栈,并且当您到达行尾(可能是它自己的令牌)时,您可以查看堆栈的顶部以查看操作是什么(当然也可以将其弹出从堆栈中)。然后弹出操作所需的操作数的数量。如果在此之后在堆栈中有更多的条目,或者如果没有足够的操作数,那么你有一个错误。

+0

谢谢!我想C++不会这样工作吗?我不认为;行终止符用于在达到时从堆栈弹出参数 – Dean

+0

@Dean不,C++肯定不会像那样工作。 :)事实上,C++是非常难以正确解析的(查看[最令人头疼的解析问题](例如https://en.wikipedia.org/wiki/Most_vexing_parse))。 –