我必须使用YACC来实现字符串操作的计算机。我必须实现像+(用于连接字符串)或*(strcat自身n次的字符串)的操作。这些操作返回一个字符串并我在非终结符t1中使用它们.BUt我也有操作返回一个数字。这些操作在一个t2非终结符中。lex yacc nonterminal circularity
,比如我有:
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));}
;
的事情是,在表达式2所定义的操作总是会返回一个数字。 所有工作正常,直到:
如果我有'dfdf'? 'edfd“,例如它一切正常。问题来了,当我必须在expr2:expr1?expr2中实现expr1,因为圆形会出现。你可以提出什么建议吗?
你是否还想过运算符优先级和关联性。例如,'expr1 - expr2 + expr3'是什么意思? – Eduardo