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