我对反向波兰表示法感兴趣,我已经读过它用于机器级别的计算,而某些语言如F#正在使用它,而编译器也将Infix转换为Postfix(反向波兰表示法).
但是我不确定这是否适用于每个编译器,更具体地说是C#.
此外,当我们谈论这个主题时,我看过这个视频 - https://www.youtube.com/watch?v=7ha78yWRDlE,它使用汇编代码解释了Postfix.汇编代码是否使用Postfix?
我很抱歉,如果答案有点愚蠢,但我之前没有使用机器代码,所以我有点暗.
考虑一下这个C#程序:
int x = 10;
int y = 100;
int z = 11;
int r = (x + y) * z - (y + x);
Console.WriteLine(r);
Run Code Online (Sandbox Code Playgroud)
如果编译然后查看已编译的程序集,您将看到这一点(请注意,它不是汇编语言,而是IL - 中间语言,它将仅在运行时编译为本机汇编语言):
IL_0001: ldc.i4.s 10 // x variable
IL_0003: stloc.0 // store in slot 0
IL_0004: ldc.i4.s 100 // y variable
IL_0006: stloc.1 // store in slot 1
IL_0007: ldc.i4.s 11 // z variable
IL_0009: stloc.2 // store in slot 2
IL_000a: ldloc.0 // x
IL_000b: ldloc.1 // y
IL_000c: add // +
IL_000d: ldloc.2 // z
IL_000e: mul // *
IL_000f: ldloc.1 // y
IL_0010: ldloc.0 // x
IL_0011: add // +
IL_0012: sub // -
IL_0013: stloc.3 // V_3
IL_0014: ldloc.3 // V_3
IL_0015: call void [mscorlib]System.Console::WriteLine(int32)
IL_001b: ret
Run Code Online (Sandbox Code Playgroud)
如你所见,我们的中缀符号确实被C#编译器"转向"反向抛光(后缀)表示法,所以
(x + y) * z - (y + x)
Run Code Online (Sandbox Code Playgroud)
成为
x y + z * y x + -
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
237 次 |
| 最近记录: |