構造使用類C語言的指令碼引擎(3)詞法分析

來源:互聯網
上載者:User
構造使用類C語言的指令碼引擎(3)

作者 :kevin_qing

轉貼請註明

現在回到編譯器上的構造上。

編譯分為4個步驟

1.預先處理

在這裡我只是替換掉源檔案的字元

'/r'->'/n'

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

並且在源檔案最後加上'/0'

2.詞法分析.

詞法分析主要是將輸入資料流分割為一個個的單詞,在這裡我並未使用flex而是自己實現。(看到Regex就暈,更別說叫我寫了,而且注視的正則也不好寫,還不如自己做比較清晰)

處理邏輯,讀取一個字元,判斷其可能的單詞,並進入後繼處理,這裡涉及到復原問題。

虛擬碼:

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 '+':

其餘符號處理類似上面......

}

}

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.