看板 Programming 關於我們 聯絡資訊
我這幾天都在跟語法奮戰 為了我的網頁bot能夠分析網頁找出連結等等工作 我花了非常大的力氣寫出了Parser 寫到後來看見語法都有點想吐 = =||| 接著...又遇到一個問題 連URI都要寫個Parser..... 雖然說,URI算很簡單了,可是真的要詳細的照規格寫也會花不少力氣 我就在想,我做的一直是重覆的工作 應該有辦法簡化這樣的工作 於是我發現了Yacc & Lex這個東東 一個很有趣的東西,透過一些語法,來產生分析語法的程式 有人用過嗎? 問題來了...,這樣產生出來的程式效率如何? 還有....,它正規表示法是產生C程式來達成 還是動態用C提供函式供呼叫? 雖然說Boost有提供正規表示法可以用,我一直都還沒用過= =" 就像當初對STL有點疑問,那樣的效能好嗎? 用正規表示法分析出來的東西會比手寫的快嗎? 以上,謝謝 -- VICTOR工作室 | PTT遊戲設計版隆重開幕! | 不管是新手老手,程式美工音樂企劃.... URL : http://www.kinmen.info/vic/ | 都歡迎來遊戲設計版參與討論 XD | 戰略高手> C/C++ | GameTopics> Visual Basic 6.0 | GameDesign -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.116.67.233
ppaass:Yacc 產生的是C程式碼,讓你併到你的程式裡122.124.101.115 02/01 22:38
ppaass:效率還 OK,不過它對正規語言檢查很嚴,所122.124.101.115 02/01 22:38
ppaass:以造出來的 parser 沒啥容錯性喔。122.124.101.115 02/01 22:39
UNARYvvv:建議不要硬幹, 用Boost or Yacc可以讓你220.132.114.113 02/01 23:05
UNARYvvv:讓你少死很多腦細胞220.132.114.113 02/01 23:06
UNARYvvv:不過你那需求好像用不到yacc,用lex就好220.132.114.113 02/01 23:07
UNARYvvv:抓網頁連結應該可以用 boost::regex220.132.114.113 02/02 01:03
UNARYvvv:先設定好 pattern, 然後用regex_iterator220.132.114.113 02/02 01:03
UNARYvvv:iterate 一次應該就把 token都抓出來了220.132.114.113 02/02 01:03
halajohn:基本上, 我不喜歡用 LR 系列的 parsing 219.87.157.82 02/02 12:59
UNARYvvv:最好還是改成 regex_(或token_)iterator220.132.114.113 02/05 17:01