Как мне написать нежадное соответствие в LEX / FLEX?

Я пытаюсь разобрать устаревший язык (похожий на 'C') с помощью FLEX и BISON. Все работает нормально, за исключением сопоставления строк.

Этот довольно странный устаревший язык не поддерживает кавычки в строковых литералах, поэтому все следующие допустимые строковые литералы:

"hello"
""
"\"

Я использую следующее правило для сопоставления строковых литералов :

\".*\"            { yylval.strval = _strdup( yytext ); return LIT_STRING; }

К сожалению, это жадный матч, поэтому он соответствует коду, подобному следующему:

"hello", "world"

В виде одной строки ( hello "," world ).

Обычный не жадный квантификатор . *? не похоже, работает в FLEX. Есть идеи?

12
задан lesmana 6 May 2013 в 10:34
поделиться