一般: ①保留字、运算符和分界符都是一个符号一种 类别,不需单词自身值 如"+‘类别8 +“的二元组(8,-) ②标识符整体作为一个类别其单词自身值采 用自身的字符串编码表示 如标识符类别为5,“AB的二元组5,AB) ③常数按类型分类别:单词自身值采用自身 的二进制形式 如整数类别为20,整数4的二元组(20,100)
11 一般: ①保留字、运算符和分界符都是一个符号一种 类别,不需单词自身值. 如 ′+ ′类别8, ′+ ′的二元组 (8,-) ②标识符整体作为一个类别,其单词自身值采 用自身的字符串编码表示. 如标识符类别为5, ‘AB’的二元组(5, ‘AB’) ③常数按类型分类别:单词自身值采用自身 的二进制形式. 如整数类别为20,整数4的二元组(20,100)
3.13识别标识符的若干约定和策略 ■约定: (1)标识符中的字符个数超过最大允许长度,截去尾部 (2)不超过最大长度的标识符,则按“尽可能长”的原 则匹配 如:如果标识符最大长度为6,则 identifier识别为 identi,而不是 identifier; 而NO23A可识别出NO23A标识符而不是NO、23和 A 12
12 3.1.3 识别标识符的若干约定和策略 ◼ 约定: (1)标识符中的字符个数超过最大允许长度,截去尾部. (2)不超过最大长度的标识符,则按“尽可能长”的原 则匹配. 如:如果标识符最大长度为6,则identifier 识别为 identi,而不是identifier; 而NO23A可识别出NO23A标识符,而不是NO、23和 A
■禁止关键字作为标识符的前缀的语言系统(如 标准 FORTRAN和 PASCAL) DO1O会识别为DO10I,而不是将之识别为一个标 识符。 ■若允许关键字作为标识符的前缀(非标准 FORTRAN) ①Do99K=1,10 DO循环语句 ②Do99K=1.10 变量赋值 ③IF(5EQM)X=5IF语句 ④IF(5)=55 函数赋值 13
13 ◼ 禁止关键字作为标识符的前缀的语言系统(如 标准FORTRAN和PASCAL) – DO10I会识别为DO 10 I,而不是将之识别为一个标 识符。 ◼ 若允许关键字作为标识符的前缀(非标准 FORTRAN) ①DO99K=1,10 DO循环语句 ②DO99K=1.10 变量赋值 ③IF(5.EQ.M)X=5 IF语句 ④IF(5)=55 函数赋值
单词符号的识别超前扫描技术 韶前却擦技术三在无法 若千个字符,直到 哥队投到单向 ■嵌套括号的分层 由外向内编号:第一层,第二层, ■语句内容的分层 按包含它的括号层次确定 不被括号包含的语句内容称为属于第零层 不被括号包含的等号和逗号分别称为零层等号和零 层逗号 ■利用超前扫描到的零层等号和零层逗号来识另 单词符
14 单词符号的识别——超前扫描技术 ◼ 超前扫描技术:在无法判别和识别当前单词时,先向 前扫描若干个字符,直到可以进行判断和识别为止。 ◼ 嵌套括号的分层 – 由外向内编号:第一层,第二层,…… ◼ 语句内容的分层 – 按包含它的括号层次确定 – 不被括号包含的语句内容称为属于第零层 – 不被括号包含的等号和逗号分别称为零层等号和零 层逗号 ◼ 利用超前扫描到的零层等号和零层逗号来识别 单词符号
超前扫描技术示例 ①Do99K=1,10 DO循环语句 ②Do99K=1.10 变量赋值 F(5EQM)X=5IF语句 ④IF(5)=55 函数赋值 包含零层等号的语包:赋值语句、Do语句、函数定 义语句以及某些逻辑IF语句 既包含零层等号,也包含零层逗号的语句:Do语句 如,函数或数组赋值语句f(a1a2an)=e 函数语句:伓不出现在数组说明符中 数组赋值语句:f出现在数组说明符中 再如,扫描到字符<还需继续向前扫描 ,<<(左移),<=,<<=(复合赋值) 15
15 超前扫描技术示例 ①DO99K=1,10 DO循环语句 ②DO99K=1.10 变量赋值 ③IF(5.EQ.M)X=5 IF语句 ④IF(5)=55 函数赋值 ◼ 包含零层等号的语句:赋值语句、DO语句、函数定 义语句以及某些逻辑IF语句 ◼ 既包含零层等号,也包含零层逗号的语句:DO语句 ◼ 如,函数或数组赋值语句 f(a1,a2,…,an)=e – 函数语句: f不出现在数组说明符中 – 数组赋值语句: f出现在数组说明符中 ◼ 再如,扫描到字符<,还需继续向前扫描 – <,<<(左移),<=,<<=(复合赋值)