2016-09-18 57 views
1

我最近在學習編譯原則。我注意到教科書中的所有示例都描述了一種語言詞法分析器,使用正則表達式的「lex」或「flex」來展示如何分析輸入源文件。正則表達式可以用來表達各種詞法分析器的要求嗎?

它表明所有已知的編程語言都可以使用類型3語法來實現詞法分析嗎?或者僅僅是教科書使用簡單的樣本來展示想法?

回答

1

大多數語言中的大多數詞位可以用正則表達式來標識,但也有例外。 (當涉及到解析計算機語言時,總是有例外,沒有例外)。

例如,您不能將C++原始字符串文字與正則表達式匹配。如果沒有句法分析,JavaScript程序中的/=是用於表示除法和分配的單個詞位,還是與從=開始的字符串匹配的正則表達式的開始處,您都無法辨別。允許嵌套評論的語言(不像C)需要更強大的功能。

但是編寫一些正則表達式比在原始C中編寫一個完整的狀態機要容易得多,所以在很多例外情況下尋找彎曲flex的方法有很多動機。通過提供一些功能,flex可以在一定程度上進行合作,這些功能可以讓您在必要時從正則表面緊身衣中脫身。在詞法分析的高級課程中,您可能會了解更多有關這些功能的信息。