编译的C#是否使用反向波兰表示法?

Pav*_*kov 3 c#

我对反向波兰表示法感兴趣,我已经读过它用于机器级别的计算,而某些语言如F#正在使用它,而编译器也将Infix转换为Postfix(反向波兰表示法).

但是我不确定这是否适用于每个编译器,更具体地说是C#.

此外,当我们谈论这个主题时,我看过这个视频 - https://www.youtube.com/watch?v=7ha78yWRDlE,它使用汇编代码解释了Postfix.汇编代码是否使用Postfix?

我很抱歉,如果答案有点愚蠢,但我之前没有使用机器代码,所以我有点暗.

Evk*_*Evk 5

考虑一下这个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)