我必須使用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