构造使用类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 '+': 其余符号处理类似上面...... } } }
|