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

王朝c/c++·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

构造使用类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 '+':

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

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航