[我正在建立一个项目,该项目使用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”如果”语句。
任何可以提出的建议都很棒,欢呼。
我可以想到的唯一实现方法是将所有“ else if”语句嵌套在其上方的选择的“ else”子句中
是的,这就是您的做法。
PS:您可能想知道许多语言实际上没有专用的else-if语法。例如,在C及其许多后代中,if语句的语法如下:
statement: 'if' '(' expression ')' statement ('else' statement)?
因此else if
就是else
,后接if语句。因此,即使在许多语言的语法级别上,else if
也是else分支中的if语句。
由于您的语法看起来很相似,您可能也可以用这种方式编写语法,因此您根本不需要做任何事情来支持else if
。
我唯一可以想到的实现方法是嵌套所有“ else if”其上方所选内容的“ else”子句中的语句]
是的,这是一种完全有效的方法。但是,除了if
和if
指令外,还可以选择使用else
,它会根据条件返回第一个或第二个操作数。
要了解其他语言如何解决此问题,建议您使用else
。
例如,下面的ActionScript代码:
select
编译为以下内容:
select
上面的代码使用三个不同的返回值加载堆栈,然后使用两个select语句基于两个if条件返回正确的值。
尽管使用“函数调用”语法重写逻辑可以更容易遵循:
WebAssembly Studio