文件名称:标记声明举例-analysis i terence tao third edition
文件大小:4.28MB
文件格式:PDF
更新时间:2024-06-27 22:51:55
OpenMP
扫描器的开发者可以利用上述规则来描述目标语言的词法规则,表 4.2 给出了几个描述 词法模式的例子。 表 4.2 正则表达式举例 正则表达式 含义 joke[rs] 匹配 jokes 或 joker。 A{1,2}shis+ 匹配 AAshis, Ashis, AAshiss, Ashis 等。 A( [b-e])? 匹配在 A 出现位置后跟随的从 b 到 e 的 所有字符中的 0 个或 1 个。 [ \t]*"#"[ \t]*"pragma"[ \t]+"omp"[ \t]+ 匹配形如#pragma omp 的串 另外,还可以在 Lex 文件中声明标记,Lex 中的标记声明类似 C 中的宏定义,方便用户 编程使用。每个标记都有一个相关的表达式。表 4.3 中给出了标记和表达式的例子。在后面 我们以一个字数统计的程序为例说明 Lex 编程的时候,其中就要用到这里讲到的如何声明标记 的方法。 表 4.3 标记声明举例 标记 相关表达式 含义 number ([0-9])+ 数字,1 个或多个数字 chars [A-Za-z] 字符,任意字母字符 blank " " 空格,一个空格 word (chars)+ 字,1 个或多个 chars variable (字符)+(数字)*(字符)*(数字)* 变量名 从表 4.3 中可以知道此处定义了一个名为 number 的标记,它代表了“数字”表达式—— 由 1 个或多个数字字符组成。同理也可以知道 chars 标记代表有字母字符所组成的字符串。 4.1.2 Lex 使用方法 使用 Lex 开发扫描器的编程过程可以分为三步:首先在某个文件中以 Lex 可以理解的格 式指定模式及相关的动作;然后在这个文件上运行 Lex,生成扫描器的 C 代码;最后编译和 链接 C 代码,生成可执行的扫描器。如果扫描器是用 Yacc 开发的解析器的一部分,只需要 进行第一步和第二步。