一段时间以来,我一直坚持这一点。我想解析一些简单的东西:
喜欢:word1 word2 .. wordN 讨厌:word1 word2 .. wordN
我正在使用柠檬+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 个单词。显然我做错了什么,可能在递归定义中?任何提醒表示赞赏:)