我一直在使用strtok来分割各种指令的字符串。我对拆分指令的偏移量感到震惊,如下所示
lw $2,100($2)
如何拆分并存储到变量中。
答案 0 :(得分:0)
strtok
is terrible:它会覆盖输入字符串,所以如果你给它 " ,()"
作为分隔符,当它完成它的工作时,它会清除原始字符串的实际分隔字符,你会否则不知道找到了什么分隔符。另一方面,如果你只给它一个分隔符,那么它就不够分隔。
建议避免使用 strtok
,并编写自己的代码来逐个字符地执行 — 您可以完全控制何时找到哪些标记,并且还可以在找到各种分隔符时了解。
通过初始化指向行首的字符指针 (char *p
) 并一次推进一个字符 (p++
) 来完成此操作。跳过可选空格字符,然后是操作码,然后跳过可选空格,然后是寄存器名称、可选空格、可选逗号、可选整数、左括号、可选空格、寄存器名称、可选空格、右括号、可选空格和注释。>
在引用的答案中,Eric Lippert 建议编写一个不可变的词法分析器,但要清楚的是,词法分析器不需要解析事物——解析器可以直接处理字符——而且由于汇编语言通常相当简单,我建议只按顺序执行上述操作,一个字符一个字符。