Я пытаюсь проанализировать устаревший язык (который похож на "C" ) с использованием FLEX и BISON. Все работает хорошо, за исключением совпадающих строк.
Этот довольно странный унаследованный язык не поддерживает цитирование символов в строковых литералах, поэтому все допустимые строковые литералы:
"hello"
""
"\"
Я использую следующее правило для соответствия строковых литералов:
\".*\" { yylval.strval = _strdup( yytext ); return LIT_STRING; }
К сожалению, это жадное совпадение, поэтому он соответствует коду, как показано ниже:
"hello", "world"
Как одна строка (hello", "world
).
Обычный не-жадный квантор .*?
, похоже, не работает в FLEX. Любые идеи?