可选的子表达式-orb-slam3: an accurate open-source library for visual vi...
(5) 可选的子表达式 有关串的最后一个常见的情况是在特定的串中包括既可能出现又可能不出现的可选部分。 例如,数字前既可有一个诸如 +或-的先行符也可以没有。这可用解来表示,同在正则定义中 是一样的: natural = [0-9]+ signedNatural = natural | + natural | - n a t u r a l 但这会很快变得麻烦起来,现在引入问号元字符 r?来表示由r 匹配的串是可选的(或显示 r 的0 个或1个拷贝)。因此上面那个先行符号的例子可写成: natural = [0-9]+ signedNatural = (+|-)? n a t u r a l 2.2.3 程序设计语言记号的正则表达式 在众多不同的程序设计语言中,程序设计语言记号可分为若干个相当标准的有限种类。第 1类是保留字的,有时称为关键字( k e y w o r d),它们是语言中具有特殊含意的字母表字符的固 定串。例如:在P a s c a l、C和A d a语言中的i f、w h i l e和d o。另一个范围由特殊符号组成,它 包括算术运算符、赋值和等式。它们可以是一单个字符,如 =,也可是多个字符如: =或+ +。 第3种由标识符( i d e n t i f i e r)组成,它们通常被定义为以字母开头的字母和数字序列。最后一 种包括了文字(l i t e r a l)或常量(c o n s t a n t),如数字常量4 2和3 . 1 4 1 5 9,如串文字“hello, world,”, 及字符“a”和“b”。在这里仅讨论一下它们的典型正则表达式以及与记号识别相关的问题, 本章后面还会更详细地谈到实际识别问题。 1) 数 数可以仅是数字(自然数)、十进制数、或带有指数的数(由e 或E 表示)的序列。 例如:2 . 7 1 E - 2表示数. 0 2 7 1。可用正则定义将这些数表示如下: nat = [0-9]+ signedNat = (+|-)? n a t number = signedNat ("." nat ) ? (E s i g n e d N a t) ? 此处,在引号中用了一个十进制的点来强调它应直接匹配且不可被解释为一个元字符。 2) 保留字和标识符 正则表达式中最简单的就是保留字了,它们由字符的固定序列表示。 如果要将所有的保留字收集到一个定义中,就可写成: reserved = if | while | do | ... 相反地,标识符是不固定的字符串。通常,标识符必须由一个字母开头且只包含字母和数 字。可用以下的正则定义表示: letter = [ a - zA - Z ] digit = [ 0 - 9 ] identifier = letter (letter | d i g i t) * 3) 注释 注释在扫描过程中一般是被忽略的 。然而扫描程序必须识别注释并舍弃它们。 因此尽管扫描程序可能没有清晰的常量记号(可将其称为“伪记号 p s e u d o t o k e n”),仍需要给 注释编写出正则表达式。注释可有若干个不同的格式。通常,它们可以是前后为分隔符的自由 第 2章 词 法 分 析 2 9 下载 它们有时可包括编译目录。
- 粉丝: 22
- 资源: 4096
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助