因此,我正在用C编写用于汇编语言的解析器。 我有可以采用以下任何一种形式的宏:
# label
# dat variable_name, 3
如何使用单个sscanf(或其他方法)将表达式拆分为各个组成部分。
例如标识符(用于标签和dat),变量(用于变量名称)和值(用于值)
答案 0 :(得分:1)
如何使用单个sscanf(或其他方法)将表达式拆分为各个组成部分。
使用"%n"
记录扫描进度。
char label_dat[10 + 1];
char var_name[20 + 1];
int var_val;
int n1 = 0;
int n2 = 0;
// v-------v----v---- Tolerate trailing whitespace
sscanf(s, "# %10s %n %20s , %d %n", label_dat, &n1, var_name, &var_val, &n2);
// If scanning made it to `n1` and there was no more text
if (n1 && s[n1] == '\0') {
printf("Label '%s'\n", label_dat);
// If scanning made it to `n2` and there was no more text
} else if (n2 && s[n2] == '\0') {
printf("Data '%s', Name '%s', Value %d\n", label_dat, var_name, var_val);
} else {
puts("Bad input");
}
如果在#
和,
之后需要空格,则需要更多代码。