flex & bison анализирует строку в кавычках - PullRequest
0 голосов
/ 18 июня 2020

Я пишу парсер на чистом C с помощью flex & bison. Я пытаюсь понять, как разбирать строковые литералы, подобные C, заключенные в двойные кавычки. Может ли кто-нибудь предоставить мне простой фрагмент гибкого кода для этого?

Например, в грамматике ANTLR строковые литералы могут быть выражены только в этих двух строках

StringLiteral: UnterminatedStringLiteral '"';
UnterminatedStringLiteral: '"' (~["\\\r\n] | '\\' (. | EOF))*;

Кажется, что в гибкости добиться гораздо труднее.

1 Ответ

1 голос
/ 18 июня 2020

Простое гибкое решение будет очень похоже на предоставленные вами правила Antlr:

string_start    ["]([^"\\\r\n]|\\(.|\n))*
%%
{string_start}["]   { /* Do something with yytext */; return STRING; }
{string_start}      { /* Register unterminated string error */ }

(Здесь отсутствуют некоторые детали, например, могут ли символы новой строки появляться в строке. Мне кажется из шаблона Antlr, как вы ожидаете, что ответ будет «нет», поэтому я отредактировал свой оригинал, чтобы он лучше соответствовал.)

...