[编译原理随记]词法分析器(继中序转后缀算术翻译器)

上级文章:

[编译原理随记]翻译器(例:中序转后缀加减运算)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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值