首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#表达式使用什么类型的算法?

C#表达式使用什么类型的算法?
EN

Stack Overflow用户
提问于 2012-09-22 00:23:17
回答 1查看 643关注 0票数 3

调车码算法用于将表达式从infix转换为后缀符号(反向波兰符号),以便由编译器计算它们。例如,2 + 3 * 2将被转换为2 3 2 * +。在维基百科中,提到了该算法在许多应用程序中使用,包括

任何面向堆栈的编程语言,如:第四,因子,PostScript页面描述语言,Befunge,Joy

我看不到C#,甚至没有任何流行的高级语言。那么,C#是否将此算法用于表达式?如果不是,C#编译器是如何编译和计算表达式的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-22 00:53:04

是的,C#被转换成面向堆栈的编程语言- 电子邮件.当编译器将表达式转换为内部语言时,它会列出遵循RPN的操作列表。

例如,此方法

代码语言:javascript
运行
复制
int x(int a, int b, int c, int d) {
    return a+b*(c+d);
}

转换为这种内部语言(请参阅注释以了解所发生的事情):

代码语言:javascript
运行
复制
IL_0001:  ldarg.0 // Push a on the stack
IL_0002:  ldarg.1 // Push b on the stack
IL_0003:  ldarg.2 // Push c on the stack
IL_0004:  ldarg.3 // Push d on the stack
IL_0005:  add     // Add d+c, push the result
IL_0006:  mul     // Multiply (d+c) by b
IL_0007:  add     // Add b*(d+c)+a

如您所见,操作数按顺序推到堆栈上,这样就可以方便地执行操作,从表达式的后面工作到前面--这正是本文解释的方式。

精确的转换算法依赖于编译器(严格地说,最终结果也依赖于编译器,因为有多种方法将表达式转换为有效的RPN序列),但RPN的基本思想是存在的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12539679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档