自制编程语言(5)---语法分析---报错处理

0.简介

今天比较累,所以就写点简单的。

1.报错

当我们的代码出现错误的时候,编译器应该能识别到并且可以反馈给我们,我们需要在语法分析或者是词法分析的一些指定位置安插一些报错语句,当遇到了错误,然后返回错误信息,这样我们就能根据错误信息来修改代码。

2.错误类型

根据目前编译器所有的功能,有以下几个地方可以识别出错误

数组缺少中括号

数组声明的下标不是确定的数字

表达式语句无效

声明标识符错误

设计一个类,专门负责错误输出。

//错误代码
enum ErrID
{
	MISSING_BARCKET = 0,//缺少中括号
	ERROR_EXPRESSION,//表达式错误
	ARRAY_DEC_ELEMENT,//数组声明下标错误
	BAD_IDENT//错误标识符

};
//错误显示
class Error
{
	std::string errorInfo[100] = {
	"Missing bracket",
	"Error expression",
	"Number of elements of the array to be determined",
	"Bad identifier"
	};
public:
	void operator()(ErrID id,int line,int column)
	{
		std::cout <<"ERR"<< id << ":" << "[" << line << "," << column << "]:" << errorInfo[id] << std::endl;
	}
};

虽然功能不多,但是可以用来检测目前的问题。

具体在语法分析中加入如下代码。

std::shared_ptr<VariableDeclareStatement> Parser::variableDeclare()
{
	...

	//如果遇到的声明是非标识符则要报错
	if(getToken() == TK_IDENT)
		result->identName = getLexeme();
	else
		error(BAD_IDENT,line-1,column);

	...
}

3.源码

这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值