本人想做乙個自己的指令碼語言,但是又不想使用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等 語句分隔符 符號 和...