手擼純C詞法分析器一枚, 可以試下多種語言的詞法分析功能。
只要改一下keywd表就行了。 主要是一個自動機。 。 。 。 。 。 。
可以實現跨平臺, gcc vc均有測試。 大家可以自己接語法樹生成處理。
C語言C++學習交流群496926338
C語言C++學習交流群496926338
紅線運算子
藍線關鍵字
屬於Table。 c
運算子結構包含運算子優先順序等均在tree。 h有定義
結構比較清晰, 不是太難懂
【需要語法樹構建請添加到snana。 c】
異常包含於error.c
那麼簡單說一下原理:
一串字元流送入int SplitScanner(wchar_t* exp)函數
從頭開始逐個掃描。 各個記號由自動機的狀態進行歸併。
歸併完成後, 調用int DiscardToken(void);函數進行進一步處理
比如DiscardToken負責2 8 1016 60進制轉換,
浮點數轉為有理數送入詞素流
自動機狀態由InitTokenSwitchFlags函數負責轉換並判斷
如有異常交給int ReportError(ErrNumber id, int ln, int col)
從reporterr的定義中可以看出:ln col變數保存發生錯誤的行列資訊
以上詞法分析屬於lxana。 h
注意lxana有一句注釋“//Add launcher?”請在此處添加語法分析引擎。 。 。
mainx是啟動器, 根據自己的實際情況:
是構建interpreter還是compiler?
平臺位於win 是console app/win32app
平臺位於osx 根據情況修改之
【】【】【】
【【特別注意以一下】】
該lexical analyzer支援寬字元(如果你想製作易語言)滑稽。
自己來看啦:
錯誤是醬紫:
C語言C++學習交流群496926338
喜歡的話關注收藏評論轉發一波 比心麼麼噠!加入我們C語言C++學習交流 壹 496926338群內有大量的專案開發和新手教學視頻千人大群等著你來加入。