欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      Tiny C 語言編譯程序?qū)嶒炓?Scanner

      時間:2019-05-11 23:48:09下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《Tiny C 語言編譯程序?qū)嶒炓?Scanner》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《Tiny C 語言編譯程序?qū)嶒炓?Scanner》。

      第一篇:Tiny C 語言編譯程序?qū)嶒炓?Scanner

      Tiny C語言編譯程序?qū)嶒炓?Scanner Tiny C語言編譯程序?qū)嶒炓?Scanner 要求:填寫getToken()函數(shù),完成詞法分析器scan.c。

      約定:

      ? 僅允許整數(shù)類型,不允許實數(shù)類型

      ? 標識符由大小寫英文字母組成,最多52個。其識別按最長匹配原則 ? 整數(shù)后緊跟非數(shù)字,或標識符后緊跟非字母認為是一個新Token開始 ? 由{ }括起來符號串都認為是注釋部分,該部分在詞法分析時被過濾掉

      ? 識別出的Token由兩個變量:currentToken,tokenString識別,其中currentToken代表Token的類屬,為一個名為TokenType的枚舉類型,在文件globals.h中定義;tokenString代表Token在程序中出現(xiàn)的形式,即其本來面目。例如整數(shù)10的currentToken值為NUM,而tokenString值為‘10’;標識符i的currentToken值為ID,而tokenString值為‘i’

      typedef enum

      { ENDFILE,ERROR,IF,THEN,ELSE,END,REPEAT,UNTIL,READ,WRITE,/* 保留字 */

      ID,NUM, ASSIGN,EQ,LT,PLUS,MINUS,TIMES,OVER,LPAREN,RPAREN,SEMI :=

      = <

      +

      *

      /

      ()

      ;

      } TokenType;

      畫識別符合TINY C語言構(gòu)詞規(guī)則的DFA。然后用直接編碼的方法構(gòu)造詞法分析器

      /****************************************************/ /* File: scan.c

      */ /* The scanner implementation for the TINY compiler

      */ /****************************************************/ #include “globals.h”

      #include “util.h”

      #include “scan.h”

      typedef enum

      { START, INASSIGN, INCOMMENT, INNUM, INID, DONE } StateType;char tokenString[MAXTOKENLEN+1];static int getNextChar(void)

      //獲得下一字符

      Tiny C語言編譯程序?qū)嶒炓?Scanner

      static struct

      { char* str;

      TokenType tok;

      } reservedWords[MAXRESERVED]

      = {{“if”,IF},{“then”,THEN},{“else”,ELSE},{“end”,END},{“repeat”,REPEAT},{“until”,UNTIL},{“read”,READ},{“write”,WRITE}};

      //定義保留字表

      static TokenType reservedLookup(char * s)

      //進行保留字的匹配 {實現(xiàn)請自己看scan.c文件}

      /**********************************************/ /* the primary function of the scanner

      */ /* function getToken returns the next token in source file */ /**********************************************/ TokenType getToken(void){ int tokenStringIndex = 0;

      TokenType currentToken;

      //保存被識別Token的類屬

      StateType state = START;

      //初始狀態(tài)為START

      int save;

      //標識當前字符是否保存,如空格,換行符n、TAB符t及注釋中的任何字符

      while(state!= DONE)

      //DONE狀態(tài)表示已識別出一個Token

      { int c = getNextChar();

      save = TRUE;

      switch(state)

      { case START:

      if(isdigit(c))

      state = INNUM;

      else if(isletter(c))

      { state=DONE;currentToken=END;state=INID;state=INASSIGN;state=INCOMMENT;else if(c==':')else if(c=='{')else

      }

      break;

      case INCOMMENT:

      if(c=='}')

      Tiny C語言編譯程序?qū)嶒炓?Scanner

      { state=DONE;currentToken=END;}

      break;case INASSIGN: if(c=='=')

      {

      } else { error();currentToken=ERROR };/* 此處已填寫完整 */ state=DONE;currentToken=ASSIGN;break;

      case INNUM:

      if(!isdigit(c))

      { /* backup in the input */

      ungetNextChar();

      save = FALSE;

      state = DONE;

      currentToken = NUM;

      }

      break;

      case INID:

      if(!isletter(c)){ /* backup in the input */ ungetNextChar();save = FALSE;state = DONE;currentToken =ID;

      break;

      case DONE: //不可能到

      default: /* should never happen */

      fprintf(listing,“Scanner Bug: state= %dn”,state);

      state = DONE;

      currentToken = ERROR;

      break;

      }

      if((save)&&(tokenStringIndex <= MAXTOKENLEN))

      tokenString[tokenStringIndex++] =(char)c;

      if(state == DONE)

      Tiny C語言編譯程序?qū)嶒炓?Scanner

      { tokenString[tokenStringIndex] = '