上级文章:
[编译原理随记]翻译器(例:中序转后缀加减运算):https://blog.youkuaiyun.com/qq_28033719/article/details/106782135
准备知识
1、空白符和注释:
空白符,包含空格、制表符、换行符都会被忽略,那么语法分析器、翻译器会进行忽略,如果在词法分析器进行消除,那么后续就可以不用考虑那么多。
注释,给程序的文字解析,都可以当做空白符处理掉。
2、标识符和关键字:
首先标识符是作为变量名,函数名等存在,作为 记号 来给程序对象做区别。
关键字,是程序设计中固定的字符串,指定某种字符结构作为标识,也可以被保留,标识符不应该命名和关键字一样。
词法分析器接口:
词法分析器介于输入流和语法分析器之间,通常从输入流读取数据,然后传递记号和属性给语法分析器,词法分析器和语法分析器是形成一个“生产者 - 消费者”对。
构建词法分析器,功能上是作为读取输入,传输记号的作用。
继续完善中序转后缀的算术翻译器:
#include <stdio.h>
#inculde <ctype.h>
int line_no = 1, token_val = NONE;
int lexan() {
int t;
while(1) {
t = getchar();
if(t == ' ' || t == '\t');
else if(t == '\n') line_no ++;
else if(isdigit(t)) {
token_val = t - '0';
t = getchar();
while(isdigit(t)) {
token_val = token_val * 10 + t - '0';
t = getchar();
}
ungetc(t, stdin); // 退回最后一个
return NUM;
} else {
token_val = NONE;
return t;
}
}
}
下级文章:
[编译原理随记]简单的中序转后缀算术翻译器 ii:https://blog.youkuaiyun.com/qq_28033719/article/details/106940231