關鍵字詞法識別

2021-09-28 16:42:38 字數 2369 閱讀 3492

本人想做乙個自己的指令碼語言,但是又不想使用lex之類的詞法分析器,又不想自己畫狀態轉換圖,所以,寫了下面的一段程式,它的功能是:

有如下若干個關鍵字:

char * keywords[1024] = ;
通過迴圈呼叫

bool addfsm(char * reg, int nstart, int nfinal);
會自動產生乙個可以識別以上關鍵字的狀態轉換表。

具體**如下:

#include #include #include #include struct node

;class fsm

;fsm::fsm()

else

return;

node * pend = new node;

if (pend)

else

m_ptable.push_back(pstart);

m_ptable.push_back(pend);

}fsm::~fsm()

} m_ptable.clear();

}bool fsm::addfsm(char * reg, int nstart, int nfinal)

std::list::iterator it;

for (it = m_ptable.begin(); it != m_ptable.end(); it++) }

if (!ptmp)

return false;

if (nlen == 1)

pfirst = pfirst->m_pnext;

}node * pnewnode = new node;

if (pnewnode)

return false;

} return false;

} //查詢當前字元是否存在

char c = *reg;

node * pcurnode = null;

if (ptmp)

pcurnode = pcurnode->m_pnext;

} }int nnewstate = 0;

char x[256] = ;

char y[256] = ;

x[0] = *reg;

strcpy(y, reg + 1);

if (pcurnode)

else

bool bret = addfsm(x, nstart, nnewstate);

bool bret2 = addfsm(y, nnewstate, nfinal);

return bret && bret2;

}bool fsm::match(char * str)

} if (!pnode)

return false;

ptmpnode = pnode->m_pnext;

bool bfind = false;

while (ptmpnode)

ptmpnode = ptmpnode->m_pnext;

} if (!bfind)

ptmp++;

} if (nstate == m_nfinalstate)

return true;

return false;

}char * keywords[1024] = ;

int main()

else

i++;

ptmp = keywords[i];

} file * fsrc = fopen("e:/a.cs", "rb+");

char buf[1024] = ;

char str[1024] = ;

if (fsrc)

else

else

}i++;

m = 0;

memset(str, 0, 1024);

}

}}

fclose(fsrc);

} system("pause");

return 0;

}

掃瞄檔案內容如下:

if var == else

do while for

+ - * /

class break abc

enum

struct

case

break continue def new

hello china for

new

程式執行效果如下:

詞法分析識別數字和關鍵字

輸入字串來識別,但目前還未實現跳過回車以及空格功能。include include include include using namespace std string str 1000 string numstr 100 int index 0 template type stringtonum ...

使用jieba進行關鍵字詞提取(基於TF IDF)

tf idf term frequency inverse document frequency tf idf方法通過計算單文字詞頻 term frequency,tf 和逆文字頻率指數 inverse document frequency,idf 得到詞語權重,按照權重排序,輸出關鍵字 原理 tf...

Redy詞法識別 綜合識別

這一章的內容有 這一章大家會看到乙個完整的大的狀態機,用於識別redy語言中的所有詞文。在前面我們基本上講完了redy中大部份詞文,其中有變數,字串,注釋,整數,長整數,浮點數,運算子。但還有一小部份詞文在前面還沒有提到過,分別為 關鍵字 如if,else,while,for等 語句分隔符 符號 和...