某些C运算符、分隔符and/or宏的含义

The meaning of certain C operators, delimiters and/or macros

我最近被授权访问一个使用 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) {
                      ...
                    }
...
  1. <wait>[...]<wait>"..."<wait>s,其中s是一个符号

  2. <paraml>[...]<paraml>"..."<paraml>s,其中s是一个符号

  3. <paraval>[...]<paraval>"..."<paraval>s,其中s是一个符号

这些结构的一般含义是什么?

你提到的那些不是默认的 C 运算符也不是宏。

这是 Lex/Flex 语法。

例如:

  • The delimiters %{...%}用于直接包含C代码
  • %option用于指定一些Flex选项
  • %x 为 lexer
  • 定义 "start conditions"

看看:

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