、输入、预处理 ●输入串放在输入缓冲区中。 ●预处理子程序:剔除无用的空白、跳格 回车和换行等编辑性字符;区分标号区、 捻接续行和给出句末符等 ●扫描缓冲区 起点搜索 指示器指示器
输入串放在输入缓冲区中。 预处理子程序:剔除无用的空白、跳格、 回车和换行等编辑性字符;区分标号区、 捻接续行和给出句末符等 扫描缓冲区 ↑ ↑ 起点 搜索 指示器 指示器 一、输入、预处理
二、单词符号的识别:超前搜索 1基本字识别 例如 FORTRAN语言中关键字不加以特殊保护: DO99K=1,10 2(D099K=1.10 3 IF(5.EQ M)GOT055 4IF(5)=55 5IF(M)10,5,6 ●都正确,需要超前搜索才能确定哪些是基本字
二、单词符号的识别:超前搜索 1 基本字识别: 例如FORTRAN语言中关键字不加以特殊保护: 1 DO99K=1,10 2 DO99K=1.10 3 IF(5.EQ.M)GOTO55 4 IF(5)=55 5 IF(M)10,5,6 都正确,需要超前搜索才能确定哪些是基本字
单词符号的识别:超前搜索 逻辑语句的一般形式: IF〈条件〉语句 例:|F(NLE100)N=N+1 ●算术语句 ●一般形式:IF〈算术表达式〉N1,N2,N3 当算术表达式的值小于0时执行标号为N的语句, 等于0时执行标号为N2的语句,大于0时执行标号为 N3的语句
单词符号的识别:超前搜索 逻辑IF语句的一般形式: ⚫ IF〈条件〉 语句 ⚫ 例:IF (N.LE.100) N=N+1 算术IF语句 ⚫ 一般形式: IF〈算术表达式〉 N1,N2,N3 ⚫ 当算术表达式的值小于0时执行标号为N1的语句, 等于0时执行标号为N2的语句,大于0时执行标号为 N3的语句
2标识符识别 字母开头的字母数字串,后跟界符或算符 3常数识别 识别出算术常数并将其转变为二进制内码表 示。有些也要超前搜索。 5. EQ M 5.E08 ●逻辑常数和用引号括起来的字符串常数一般 都好识别,但 FORTRAN的文字常数的识别较麻 烦,如:3HABC ●当分析器读到尾跟H的无符号常数时要先把该常 数的值翻译出来,然后把H后的n个字符作为字 符串常数输出
2 标识符识别: ⚫ 字母开头的字母数字串,后跟界符或算符 3 常数识别: ⚫ 识别出算术常数并将其转变为二进制内码表 示。有些也要超前搜索。 5.EQ.M 5.E08 ⚫ 逻辑常数和用引号括起来的字符串常数一般 都好识别,但FORTRAN的文字常数的识别较麻 烦,如:3HABC。 ⚫ 当分析器读到尾跟H的无符号常数时要先把该常 数的值翻译出来,然后把H后的n个字符作为字 符串常数输出
4算符和界符的识别 把多个字符符合而成的算符和界符拼合成 个单一单词符号 米米,.EQ.,++
4 算符和界符的识别 ⚫ 把多个字符符合而成的算符和界符拼合成一 个单一单词符号。 :=, **, .EQ. , ++,--,>=