私はしばらくの間これで立ち往生しています。私は次のような単純なものを解析したいと思います:
好きなもの:word1 word2 .. wordN嫌いなもの:word1 word2 .. wordN
Lemon+Flexを使用しています。現時点では、私の文法は次のようになっています。
%left LIKES MOODS FROM HATES INFO.
%syntax_error {
std::cout << "Syntax error!" << std::endl;
}
final ::= likes_stmt.
final ::= hates_stmt.
likes_stmt ::= LIKES list(A). { Data *data=Data::getInstance();data->likes.push_back(A);}
hates_stmt ::= HATES list(A). { Data *data=Data::getInstance();data->hates.push_back(A);}
list ::= likes_stmt VALUE(A). { Data *data=Data::getInstance();data->likes.push_back(A);}
list ::= hates_stmt VALUE(A). { Data *data=Data::getInstance();data->hates.push_back(A); }
list(A) ::= VALUE(B). {A=B;}
ただし、これは最初の2単語でのみ機能します。明らかに、おそらく再帰的定義で、私は何か間違ったことをしていますか?どんな頭を上げても大歓迎です:)