我目前正在编写一个解释一种语言并输出结果的类项目。
我在一个文件中读取并用新行分割文档以获取字符串数组(也就是每一行)
然后将每一行进一步细分为和运算符,有时还为参数。我遇到的问题在于没有参数的运营商。
该语言的示例如下所示:
lvalue x //this declares a variable x
rvalue 5 //places the value 5 on the stack
:= //assign the value 5 to the variable x
我使用switch语句来读取运算符并确定要调用的函数
call(){
switch(opp)
{
case "lvalue":lvalue(param); break;
case "rvalue":rvalue(param); break;
case ":=": set(); break;
}
}
我遇到的主要问题是switch语句完全跳过了“:=”的输入。
对于opp和param的输入,并通过基于空格分解每一行来创建。由于:=行中没有其他值,因此拆分的结果只是一个项目。我怀疑这是我的问题所在。
我这样调用我的switch语句:
var args=doc[i].split(' ');
var opp=args[0];
var param=args.splice(1,args.length).join(" ");
call(opp,param);
我注意到当我在输入文件中的:=之后放置空格时,switch语句会读取它。所以我确信这是正确解析字符串的问题。对于没有参数的其他操作员也会出现此问题(再次使用修复问题的空格)。
由于我无法保证输入中的空格,我需要一种方法来确保我的switch语句能够识别我的操作符。
由于