Я пытаюсь захватить строки в кавычках без кавычек. У меня есть этот терминал
%token <string> STRING
и это производство
constant:
| QUOTE STRING QUOTE { String($2) }
вместе с этими правилами лексера
| '\'' { QUOTE }
| [^ '\'']* { STRING (lexeme lexbuf) } //final regex before eof
Кажется, что все, что приводит к QUOTE
, интерпретируется как одна лексема, которая не разбирается. Так что, возможно, моя проблема в другом месте грамматики - не уверен. Я иду об этом правильным путем? Это было хорошо, когда я пытался исключить кавычки из строк.
Обновление
Я думаю, что может быть некоторая двусмысленность со следующими правилами лексера
let name = alpha (alpha | digit | '_')*
let identifier = name ('.' name)*
Следующее правило предшествует STRING
| identifier { ID (lexeme lexbuf) }
Есть ли способ устранить их неоднозначность без включения кавычек в регулярное выражение STRING
?