我必须使用 YACC 实现一个用于字符串操作的计算机。我必须实现像 +(用于连接字符串)或 *(用自身 n 次 strcat 一个字符串)之类的操作。这些操作返回一个字符串,我在非终端 t1 中使用它们.BUt 我也有返回数字的操作。这些操作在 t2 非终结符中。
例如我有:
expr1: expr1 '+' expr1 { strcpy($$,$1); strcat($$,$3);}
| expr1 '-' expr1 { strcpy($$,minus($1,$3));}
| | expr1 '*' NUMBER {strcpy($$,mul($1,$3));}
|STRING;
我有:
expr2 : STRING '?' STRING {strcpy($$nr_of_aparitions($1,$3));}
;
问题是 expr2 中定义的操作将始终返回一个 NUMBER。一切正常,直到:
如果我有'dfdf'?例如,“edfd”一切正常。当我必须在 expr2 中实现 expr1 时,问题就来了: expr1 ? expr2 因为会出现循环。你能建议什么吗?