Значение некоторых C операторов, разделителей и / или макросов - PullRequest
1 голос
/ 15 января 2020

Недавно мне был предоставлен доступ к проекту, использующему язык C. В файле lexer.l я встречал некоторые незнакомые мне операторы и разделители и надеялся объяснить их. Ниже приведен список указанных структур.

  1. Разделители %{...%}, ... представляют собой набор #include операторов и определений функций

  2. %option, за которым следует строка, соответствующая имени переменной

  3. %x, за которой следует группа идентификаторов, квалифицируемых как имена переменных, разделенных пробелами:

    • wait
    • paraml
    • paraval
    • ...
  4. %% ... %%, с ... замененным набором блоков, разделенных символами новой строки, такими как

"~"               { macro_noarg("\\nbspc"); }
"\\%"             { chk_indent(); emitc('%'); }
[ \t\r]*"%"       { BEGIN(comment); }
[ \t\r]*"$$"      { emit_el();
                    indent(); emit(".. math::\n");
                    ilevel +=2;
                    if(user_lbl) {
                      ...
                    }
...

<wait>[...], <wait>"..." или <wait>s, где s является символом

<paraml>[...], <paraml>"..." или <paraml>s, где s является символом

<paraval>[...], <paraval>"..." или <paraval>s, где s является символом

Что общий смысл этих конструкций?

1 Ответ

3 голосов
/ 15 января 2020

Упомянутые вами не являются операторами по умолчанию C или макросами.

Это синтаксис Lex / Flex.

Например:

  • The delimiters %{...%} используются для непосредственного включения C код
  • %option используется для указания некоторой опции Flex
  • %x определяет «условия запуска» для лексера

Посмотрите:

http://dinosaur.compilertools.net/flex/manpage.html

...