2
我在Prolog中編寫了一個詞法分析器,它將用作函數式語言解釋器的一部分。語言規範允許發生像例如let \x = x + 2;
這樣的表達式。我想詞法分析器對這種輸入做的是「迴歸」:在Prolog中讀取反斜槓時出現問題
[tokLet, tokLambda, tokVar(x), tokEq, tokVar(x), tokPlus, tokNumber(2), tokSColon]
,問題是,序言似乎忽視了\
字符和「返回」上面寫的只是tokLambda
行。
解決此問題的一種方法是以某種方式在程序代碼中每次出現之前或之後添加第二個反斜槓(因爲如果將原始輸入更改爲let \\x = x + 2;
,但一切正常)但我不太喜歡。
任何想法?
編輯: 如果任何人都應該有類似的問題,這就是我如何解決它:
main(File) :-
open(File,read,Stream),
read_stream_to_codes(Stream, Codes),
lexer(X,Codes,[]),
... invoke other methods
我從swi-prolog控制檯執行類似'? - lexer(X,「let \ x a」,[])。'的方法得到了字符串。我現在試圖讓它從文件中讀取。你能告訴我你的代碼應該做什麼,以便我可以嘗試使它在swi-prolog中工作? 編輯:謝謝你的鏈接!這似乎是我需要的。 – Jerry 2010-05-15 21:30:21
我剛剛在回覆中記錄了代碼。 – 2010-05-15 21:54:12