Tôi đang cố gắng phân tích ngôn ngữ cũ (tương tự như 'C') bằng FLEX và BISON. Mọi thứ đều hoạt động độc đáo ngoại trừ các chuỗi phù hợp.Làm cách nào để viết một trận đấu không tham lam trong LEX/FLEX?
ngôn ngữ di sản khá kỳ quặc này không hỗ trợ trích dẫn các nhân vật trong xâu, vì vậy sau đây là tất cả các xâu hợp lệ:
"hello"
""
"\"
Tôi đang sử dụng các nguyên tắc sau để phù hợp với xâu:
\".*\" { yylval.strval = _strdup(yytext); return LIT_STRING; }
Thật không may đây là một trận đấu tham lam, vì vậy nó phù hợp với mã như sau:
"hello", "world"
Là một chuỗi đơn (hello", "world
).
Định lượng không tham lam thông thường .*?
dường như không hoạt động trong FLEX. Bất kỳ ý tưởng?
sức này bạn: http://www.lysator.liu.se/c/ANSI-C-grammar-l.html –