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

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

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值