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

作者: Schottky (順風相送)   2013-06-30 10:46:08
※ 引述《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 這工具就很適合。
參考資料可以到陳信希老師的個人網頁和實驗室網頁挖挖看。
我是很想推薦陳老師上課用的課本,可是要你為了做專題唸完半本書有點強人所難。

Links booklink

Contact Us: admin [ a t ] ucptt.com