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循環性が表示されるため、何か提案できますか?