最简单的词法分析器中的扫描部分 SCAN

//读入一个字符,存在peek中
void readch() throw IOException {peek =(char)Systen.in.read()}

//检查下一个字符是否是c。
boolean readch(char c) throw IOException
{
readch();//读入一个输入
if(peek!=c)return false;
peek='';
return true;//如果是C,把peek制空。
}


public Token scan() throw IOException
{
	for(;;readch())
	{
	if(peek ==''|| peek=='\t') continue;//如果是空的或制表符,则继续
	else if (peek=='\n') line=line+1;//如果是换行符,则换行+1
	else break;
	}
	switch(peek)
	{
		case '&':
		if(readch('&'))return Word.and;else return new Token('&');
		//…………等等其他case
	}
	//如果是数字,返回new Real(x);
	//如果是字母,返回new Word();
	//最后没有识别出来的,也当Token返回。
	Token tok =new Token(peek);peek="";
	return tok

}

以上。

(以下只是有关语法分析的胡思乱想)
仔细想想,如果我的输入并不是这些基础字符,而直接是一些类的ype的话,我也可以用这种方法来构建。

比如,如果第一个内容是一个Skill,则看看下一个是entity,是skill还是attach,
如果是eneity,可以建立一个normalskillaction。readch()
!如果是skill,则建立一个noramlskillaction,但包着另外一个新的normalskillaction,这个新的内容被挂在符号表中【新的skill,已经建立的normalskillaction.】,回退一个readch()
!如果是attach也是同理。……但是这样处理下去也许会没有个完。
根据大家的语法,还是得建立一个语法分析器,来分析何时做移进、何时做归约。
(移进时向前看,归约时形成一个对象,再形成树!)
这样想来,是否要反着规约比较好呢?

entity和skill、num是终结符,
其他都是非终结符,
会出现不符合文法的情况吗?
要做follow集和first集吗?
我想应该是要的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值