//读入一个字符,存在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集吗?
我想应该是要的。