Re: [問題] 有關語法樹問題

看板Programming作者 (Schottky)時間11年前 (2013/06/30 10:46), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《stayfool (fool)》之銘言: : 在製作編譯器前,會先把輸入字串 展開成 語法樹, : 例如 result = 1 + 1,會先被解析成 語法樹,才會再進行解析, : 如果 輸入字串 是英文的 this is a book 或是中文的 這是一本書, : 也需要展開成語法樹嗎? : 如果需要的話,該怎麼展開呢? : 目前在作一簡易的翻譯專題,故來請教, : 另外網上是否有 關於此種專題的參考資料或連結呢? : 若您知道的話,希望能提供給我,謝謝。 基本上自然語言(人類的文章或口語)和程式語言完全是兩回事。 程式語言的文法是嚴格定義出來的,文法明確,固定只有幾種句型,句型中帶子句, 只有單一解釋方式,避開模稜兩可的狀況。 自然語言同一個句子有可能分析成不同結構,可能符合的句型多到一塌糊塗, 有時候甚至要看其意義合理不合理,看前後文敘述的是什麼人事物, 英文同一個字可以當動詞又可以當名詞,中文字連斷詞都可以有不同斷法。 例句: Time flies like an arrow. Fruit flies like a banana. 光陰似箭 果蠅喜歡吃香蕉 在文法簡單的狀況下,你可以使用 brute force parsing,一個個句型去比對, 把所有可能的語法分解方式都找出來, 化為 1F 推文說的 concrete syntax tree (我習慣叫它 parse tree)。 如果句型加習慣用法太多,brute force parsing 速度慢到完全不實用, 可能就要改用 chart parsing 來做。 英文大致上的程序是: 查字典 -> 分析母句 -> 往下分析子句 -> 往上把樹連結起來 中文則需要多一道手續: 先找詞庫出來斷詞之後才有辦法翻詞典。 這個部份的程式,用 brute force parsing 來實作應該不會太難,只是執行效果差。 不要想用 yacc 或 bison 了,自然語言的文法通常沒辦法靠這類 parser generator 幫你自動產生程式碼。但你若要自己寫 compiler 這工具就很適合。 參考資料可以到陳信希老師的個人網頁和實驗室網頁挖挖看。 我是很想推薦陳老師上課用的課本,可是要你為了做專題唸完半本書有點強人所難。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.137.0.5
文章代碼(AID): #1HpvloPq (Programming)
討論串 (同標題文章)
文章代碼(AID): #1HpvloPq (Programming)