构造使用类C语言的脚本引擎(3)词法分析

构造使用类C语言的脚本引擎(3)

作者 :kevin_qing

转贴请注明

现在回到编译器上的构造上。

编译分为4个步骤

1.预处理

在这里我只是替换掉源文件的字符

'/r'->'/n'

'/0'->0x20 (空格)

并且在源文件最后加上'/0'

2.词法分析.

词法分析主要是将输入流分割为一个个的单词,在这里我并未使用flex而是自己实现。(看到正则表达式就晕,更别说叫我写了,而且注视的正则也不好写,还不如自己做比较清晰)

处理逻辑,读取一个字符,判断其可能的单词,并进入后继处理,这里涉及到回滚问题。

伪代码:

gc() 是从输入流读取一个字符pb(n)是返回n个字符

uint32_t Lex(){

while(1){

CChar ch=gc();

if(ch.isSpace())

    continue;

if(ch.isReturn())

    continue;

if(ch=='/0')

   return NULL;

if(ch.isLetter()){

return   readID(ch);

}

switch(ch){
case '"':
 return  _readString();
case '/':
 ch=gc();
 if('/'==ch)
  return _readComment(0);
 elif('*'==ch)
  return _readComment(1);
 elif('='==ch)
  return DIV_ASSIGN;
 else {
  pb();
  return DIV;
 }

case '+':

其余符号处理类似上面......

}

}

}

你可能感兴趣的:(游戏开发,C/C++,脚本,引擎,语言,c,正则表达式,编译器)