(以下問題涉及OCaml的語言,並在OCaml的例子,但問題是非常普遍的,可能對任何其他計算機語言以正確的答案能解決我的問題太多這樣。 ,用你最喜歡的語言假設這個問題。)決定,如果不正確的程序可以有一個正確的延續
我想寫一個函數,它將OCaml中的一個任意程序作爲一個字符串,並決定程序是正確還是不正確,以及在後一種情況下,我可以通過在最後連接適當的字符來將它變成正確的。
我假設有一個編譯器的語言在某處,我可以應用它,並得到一個答覆說「編譯」或「不編譯 - 在X行,字符Y的錯誤」(是反正大多數語言都是這種情況)。綜上所述,我想有一個函數,需要一個程序,並返回:
- 正確 - 如果字符串包含一個正確的程序;
- 錯誤的 - 如果字符串包含不正確的方案,其中,不管你怎麼串連字符的話,會不會變成正確的;
- 不完整 - 如果字符串包含不正確的方案,這是沒有錯。
例如,OCaml程序let x = f
不正確,因爲f
在使用時尚未定義。而且它不能繼續,因爲無論你在f後面寫什麼,總會是一些以前沒有定義過的標識符。程序let x =
也是不正確的;但如果我們擴展到let x = 5
那麼我們有一個完全有效的程序。所以,我的函數應該在第一種情況下返回錯誤,在第二種情況下返回不完整。
事情可能變得棘手,如果我們有程序
let ans = 5
let x = a
,因爲我的功能,就必須看到,如果我繼續運行程序與ns
然後程序變得正確。
我的問題是:你認爲有可能編寫這樣的函數/算法嗎?如果是這樣,那麼總體思路是什麼?如果沒有,試着說服我,它不是。例如,我相信如果語言編譯器說在第3行有一個錯誤,並且程序有100行,那麼在那裏,我會很高興與任何見解或部分答案,例如暗示不完整的東西。是程序沒有可能繼續。)
該死!我爲什麼選擇'f'?發現得好。 =)是的,我基本上對語法正確性感興趣。我如何檢查它是否返回完整的AST? (使用OCaml編譯工具的特殊情況,如果有一個具體的案例是有幫助的。) – Surikator 2011-03-16 06:20:55