我应该如何在网络汇编中实现“ else if”?

问题描述 投票:2回答:2

[我正在建立一个项目,该项目使用ANTLR来解析我创建的自定义语言语法,而我的任务是将该代码编译/转换为Web Assembly。

这是示例代码的片段,我可以尝试使用该程序进行转换:

if (<condition>) {
    <some code>
}
else if (<condition>) {
    <some code>
}
else {
    <some code>
}

我丝毫没有Web组装方面的经验,但这是该项目的要求。似乎“ if”和“ else”语句相当简单,我唯一的问题是“ else if”语句。

我可以想到的唯一方法是将所有“ else if”语句嵌套在其上方的选择的“ else”子句中,因为似乎没有任何Web程序集语法支持直接的“ else”如果”语句。

任何可以提出的建议都很棒,欢呼。

if-statement compiler-construction antlr webassembly
2个回答
0
投票

我可以想到的唯一实现方法是将所有“ else if”语句嵌套在其上方的选择的“ else”子句中

是的,这就是您的做法。

PS:您可能想知道许多语言实际上没有专用的else-if语法。例如,在C及其许多后代中,if语句的语法如下:

statement: 'if' '(' expression ')' statement ('else' statement)?

因此else if就是else,后接if语句。因此,即使在许多语言的语法级别上,else if也是else分支中的if语句。

由于您的语法看起来很相似,您可能也可以用这种方式编写语法,因此您根本不需要做任何事情来支持else if


0
投票

我唯一可以想到的实现方法是嵌套所有“ else if”其上方所选内容的“ else”子句中的语句]

是的,这是一种完全有效的方法。但是,除了ifif指令外,还可以选择使用else,它会根据条件返回第一个或第二个操作数。

要了解其他语言如何解决此问题,建议您使用else

例如,下面的ActionScript代码:

select

编译为以下内容:

select

上面的代码使用三个不同的返回值加载堆栈,然后使用两个select语句基于两个if条件返回正确的值。

尽管使用“函数调用”语法重写逻辑可以更容易遵循:

WebAssembly Studio
© www.soinside.com 2019 - 2024. All rights reserved.