2014-10-12 52 views
1

在閱讀了一些Steve Yegge的文章後,我一直在考慮學習bison/yacc。史蒂夫當然喜歡編譯器,因此建議人們應該學習它們。他對於開發什麼技能給予了很多其他的好建議,所以我想我會去看看。Bison/Yacc編程語言之外的使用案例?

我想知道的是 - 在構建自己的編程語言之外,lex/flex/yacc/bison的實際用例是什麼?我確信有一個明顯的使用案例,我錯過了,但沒有想到。

使用bison/yacc可以更容易/穩定地解決哪些類型的問題,而不是用正則表達式解析事情?

+1

它值得澄清你的語言是什麼意思?例如,如果你的問題,是否意味着「通用編程語言」?當然,即使您只是處理小配置,用戶交互或規範語言,您提到的工具也非常有用。 – 2014-10-12 04:19:51

+0

將語言的解析器編碼視爲構成語言的「構造」是很有趣的。注意完全構建的語言可能還需要爲它們構建的解析器/編譯器/驗證器也很有用。 – 2014-10-12 04:21:02

+1

結合Flex和Bison,您可以輕鬆創建[計算器](http://dinosaur.compilertools.net/bison/bison_5.html#SEC27)。比通過全功能編程語言(如Java或C)編譯內置計算器更容易。事實上,我曾經向一位朋友展示過,使用Flex和Bison可以在大約20分鐘內編寫一個工作內置計算器(顯然,您必須知道每個語法的語法可以快速完成)。如果您知道輸入的結構(並且輸入是高度結構化的),那麼您可以使用Flex/Bison快速完成任務。 – Jared 2014-10-12 04:30:02

回答

1

什麼樣的問題,你可以更容易/穩定地解決與 bison/yacc,而不是用正則表達式解析的東西?

大問題。

的語言保持跟蹤的正則表達式的所有不同,潛在嵌套的詞彙元素可以是艱鉅的,和自動化工具可以使它更可行,易於維護,可共​​享等

什麼是實際使用lex/flex/yacc/bison在 之外構建自己的語言的案例?

也許語言已經存在,但是你想爲它實現一個解析器/編譯器/驗證器。可能採用新語言或與現有工具不同的平臺。

+0

對,這些事情是有道理的。我想我很想知道這些用例,例如「在一堆文本文件中查找這種格式的地址」或「在用戶提供的字符串上做一些瘋狂的輸入驗證」。 – bitops 2014-10-12 04:47:26

+1

啊,現在你問,「如果我有一個非常適合正則表達式的問題,我是否也應該考慮將flex/yacc等作爲可能的好工具來應用?」如果你能看到如何用正則表達式來解決這個問題,我會說通常不會,但它可能不值得自動化所提供的額外功能。 – 2014-10-12 04:51:39

+0

這絕對是有道理的,到目前爲止,我在編程冒險中已經用了很多正則表達式。我想我想知道在哪裏畫「好吧,這個基於正則表達式的解析器是一個野獸」和「學習flex/bison/yacc /等的時間」之間的界限。 – bitops 2014-10-12 04:54:47