一、语言解释器
描述:
实现一个简单的语言解释器,支持以下指令:
指令格式 描述
mov a v 把数v赋值给a,其中a是变量名称,由不超过10个小写字母组成,v是变量名或者常数(常数为-10000~10000的整数)
inc a 变量a加1
dec a 变量a减1
jnz a v 如果变量a的值不是0,则相对跳转v条指令。比如-2,向上跳转两个指令
输入保证最多有100个变量,100条语句;执行inc, dec和jnz之前,相应变量一定已经用mov赋值过。
输入:
mov bx 2
mov ax 5
inc bx
dec ax
jnz ax -2
dec ax
输出:
ax -1
bx 7
–尽量优化性能
————————————————
版权声明:本文为CSDN博主「微 亻言」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wangxiangwen1998/article/details/122384767
对于该题目,首先是构建变量与其中值得关系,可以想到用hashmap来建立映射实现O(1)的查找与修改。然后dec和inc就顺理成章地++ --就好了,关键是对于jnz的处理,就事先把所有的语句存放在二维的string数组里,遇到jnz就调回去重读就可以了,jnz可以看做有循环的功效,但是有一个问题,当jnz出现嵌套时,就相当于双层或是多层循环&