If statement 我应该如何实施;否则,如果;在web组装中?
我正在构建一个利用ANTLR解析我创建的自定义语言语法的项目,我的任务是将这些代码编译/转换为Web汇编 这是一段示例代码,我可以尝试使用该程序进行转换:If statement 我应该如何实施;否则,如果;在web组装中?,if-statement,compiler-construction,antlr,webassembly,If Statement,Compiler Construction,Antlr,Webassembly,我正在构建一个利用ANTLR解析我创建的自定义语言语法的项目,我的任务是将这些代码编译/转换为Web汇编 这是一段示例代码,我可以尝试使用该程序进行转换: if (<condition>) { <some code> } else if (<condition>) { <some code> } else { <some code> } if(){ } 如果(){ } 否则{ } 我没有经验的网页组装在一点点
if (<condition>) {
<some code>
}
else if (<condition>) {
<some code>
}
else {
<some code>
}
if(){
}
如果(){
}
否则{
}
我没有经验的网页组装在一点点,但这是一个项目的要求。“如果”和“其他”的说法似乎相当直截了当,我唯一的问题是“其他如果”的说法
我认为实现它的唯一方法是将所有“else-if”语句嵌套在它上面的选择的“else”子句中,因为似乎没有任何web程序集语法支持直接的“else-if”语句
任何可以提出的建议都是非常好的,干杯
我认为实现它的唯一方法是将所有的“elseif”语句嵌套在它上面选择的“else”子句中
是的,你就是这样做的
PS:您可能有兴趣知道,许多语言实际上没有专用的else if语法。例如,在C及其许多后代中,if语句的语法如下:
statement: 'if' '(' expression ')' statement ('else' statement)?
因此,else-if
就是后面跟着if语句的else
。因此,即使在许多语言的语法层面上,else-if
也只是else分支中的if语句
因为您的语法看起来很相似,所以也可以用这种方式编写语法,这样您就不需要做任何事情来支持else if
s
我能想到的实现它的唯一方法是嵌套所有“else if”
上面选择的“else”子句中的语句
是的,这是一个完全有效的方法。但是,除了和指令外,还可以使用选项,它根据条件返回第一个或第二个操作数
为了了解其他语言是如何解决这个问题的,我建议大家尝试一下
例如,以下ActionScript代码:
导出函数if\u else\u测试(输入:i32):i32{
如果(输入>10){
返回101;
}否则如果(输入>20){
返回102;
}否则{
返回103;
}
}
已编译为以下内容:
(func $if_else_test (export "if_else_test") (type $t1) (param $p0 i32) (result i32)
i32.const 101
i32.const 102
i32.const 103
get_local $p0
i32.const 20
i32.gt_s
select
get_local $p0
i32.const 10
i32.gt_s
select)
上面的代码使用三个不同的返回值加载堆栈,然后使用两个select语句根据两个if条件返回正确的值
虽然如果使用“函数调用”语法重新编写,逻辑更容易遵循:
(func $if_else_test (export "if_else_test") (type $t1) (param $p0 i32) (result i32)
(select
(i32.const 101)
(select
(i32.const 102)
(i32.const 103)
(i32.gt_s
(i32.const 20)
(get_local $p0)
)
)
(i32.gt_s
(i32.const 10)
(get_local $p0)
)
)