我一直被这个问题困扰,想要解析的内容非常简单:
喜欢:单词1 单词2 ... 单词N 讨厌:单词1 单词2 ... 单词N
我正在使用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;}
但是这只适用于前两个单词。显然我做错了什么,可能是在递归定义中?任何提示都将不胜感激 :)