日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Atitit 发帖机系列(7) 词法分析的方法attilax大总结)

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Atitit 发帖机系列(7) 词法分析的方法attilax大总结) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Atitit 發帖機系列(7) 詞法分析的方法attilax大總結)

?

1.1. 詞法分析貌似倆大方法,一個直接根據狀態圖轉換,一個根據dfa1

1.2. switchcase或者ifelse?最原始方法1

1.3. .??狀態表?比較實用2

1.4. ?使用NFADFA構建FSM?專業方法,難度大)?DFA實際上就是高級版的狀態表2

1.5. 構建詞法分析器一般需要幾個步驟:2

1.5.1. 為正規式設計NFA??由正規式構造FA——Thompson2

1.6. 優先遞歸 替換循環3

1.7. 狀態轉移表3

?

?

界面與后端通訊需要傳遞dsl,需要做詞法分析。。

?

1.1.?詞法分析貌似倆大方法,一個直接根據狀態圖轉換,一個根據dfa

?

?

簡單點兒說,詞法分析就是進行正則表達式匹配。詞法分析程序就是根據要匹配的正則表達式生成它的NFA或者DFA,再將待匹配的字符串放到這些NFA或者DFA中進行處理,從而分析出輸入字符串是否匹配給定的正則表達式

?

詞法分析器的任務是按照一定模式從源程序中識別出記號(token).

我們使用正規式描述這一模式,并通過有限自動機進行識別.

因為NFA對狀態轉移不加限制在實際應用中帶來很多問題, 通常我們將NFA轉換為等價的DFA. 這里所謂的自動機等價是指它們識別同樣的正規集.

?

?

1.2.?switchcase或者ifelse?最原始方法

?

這無意是最直觀的方式,使用一堆條件判斷,會編程的人都可以做到,對簡單小巧的狀態機來說最合適,但是毫無疑問,這樣的方式比較原始,對龐大的狀態機難以維護。

checkStateChange()performStateChange()這兩個函數本身依然會在面對很復雜的狀態機時,內部邏輯變得異常臃腫,甚至可能是難以實現。

在很長一段時期內,使用switch?句一直是實現有限狀態機的唯一方法,甚至像編譯器這樣復雜的軟件系統,大部分也都直接采用這種實現方式。但?之后隨著狀態機應用的逐漸深入,構造出來的狀態?機越來越復雜,這種方法也開始面臨各種嚴峻的考驗,其中最令人頭痛的是如果狀態機中的狀態非常多,或者狀?態之間的轉換關系異常復雜,那么簡單地使用switch語句構造出來的狀態機將是不可維護的。

?

1.3.?.??狀態表?比較實用

?

1.4.??使用NFADFA構建FSM?專業方法,難度大)?DFA實際上就是高級版的狀態表

使用DFA的方法完成的可配置詞法分析器的性能是相當好

一般來說,比較高性能的DFA的實現是一張二維的表。行代表字符,列代表DFA?的狀態,單元格代表該狀態經輸入某個字符之后進行轉移的目標狀態。此外還有一張表用來記錄哪些狀態對應哪些規則的結束狀態

?

1.5.?構建詞法分析器一般需要幾個步驟:

00001.?

用正規式描述記號的模式

00002.?

00003.?

1.5.1.?為正規式設計NFA??由正規式構造FA——Thompson

?

00004.?

00005.?

NFA轉換為等價的DFA, 這一步稱為確定化

00006.?

00007.?

優化DFA使其狀態數最少, 這一步稱為最小化

00008.?

?

1.6.?優先遞歸 替換循環

遞歸可讀性更好。。

?

?

1.7.?狀態轉移表

cur_dbquo_stat

當前狀態

當前字符

要即將轉換到的下一狀態

?

?

?

\

?

?

?

??dbQuo_start

<none>

?

?

Not sQuo start

Not dbQuo_start

sQuo ?start

?

?

sQuo start

sQuo ?end

?

Dbquo end or <non>

Not Dbquo start

?

Dbquo start

?

Dbquo start

?

Dbquo end

?

?

Non sQuo ?dbquo start

,

?

?

?

?

?

?

?

?

?

?

?

?

字符串優先使用單引號,方便輸入。。

meth(\"select from tab where a='abc'\",'str2',\'s3\')

引號需要單獨的狀態表示

?

參考資料

atitit.自己動手開發編譯器and解釋器(1) ------詞法分析--attilax總結 - attilax的專欄 - 博客頻道 - CSDN.NET.html

詞法分析實戰 - booirror的博客 - 博客頻道 - CSDN.NET.html

現代編譯原理--第一章(詞法分析) - BlackWalnut - 博客園.html

?

作者::?綽號:老哇的爪子?(?全名::Attilax?Akbar?Al?Rapanui?阿提拉克斯?阿克巴?阿爾?拉帕努伊?)?

漢字名:艾提拉(艾龍)???EMAIL:1466519819@qq.com

轉載請注明來源:?http://www.cnblogs.com/attilax/

--Atiend

?

轉載于:https://www.cnblogs.com/attilax/p/6107896.html

總結

以上是生活随笔為你收集整理的Atitit 发帖机系列(7) 词法分析的方法attilax大总结)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。