2012-04-21 48 views
1

嗨,我正在寫一個簡單的詞法分析器簡單的DCG詞法

:- module(lekser, [lekser/3]). 


lekser(Tokens) --> 
    white_space, 
    (
      (
        "{", !, { Token = tkLBrace } 
       ; "}", !, { Token = tkRBrace } 
       ; ")", !, { Token = tkRParen } 
       ; "(", !, { Token = tkLParen } 
       ; ";", !, { Token = tkSColon } 
       ; "\", !, { Token = tkLambda } 
       ; "->", !, { Token = tkImpli } 
       ; "<", !, { Token = tkLT } 
       ; ">", !, { Token = tkGT } 
       ; "<=", !, { Token = tkLeq } 
       ; ">=", !, { Token = tkGeq } 
       ; "=", !, { Token = tkAssgn } 
       ; "\=", !, { Token = tkNeq } 
       ; "+", !, { Token = tkPlus } 
       ; "-", !, { Token = tkMinus } 
       ; "*", !, { Token = tkTimes } 
       ; "div", !, { Token = tkDiv } 
       ; "mod", !, { Token = tkMod } 
        ... 
     ...)). 

這裏的代碼開始時喂線輪coudl有人告訴我在哪裏,因爲SWI代碼編輯,他說有一個eror犯的錯誤(甚至只有把後幾個空nelines)Syntax error: String too long (see style_check/1)

... 好吧,我發現了什麼whas的原因,但我不知道爲什麼它的工作原理是這樣的編輯器在一些奇怪的方式解析"\",我必須讓它"\""但後來,我也許它不會是\運營商,而是「如何改變它?」

+0

是的,使用'「\」「'輸入一個雙引號的字符串'」'。 – 2012-04-21 11:42:11

回答

1

只是擴大我的迴應,是的,使用"\""你輸入一個雙引號字符串"。例如:

?- write("\"abc\""). 
[34,97,98,99,34] 

注意如何字符串abc由兩個34值(以ASCII雙引號)包圍。

+0

呃喜歡在C,但我不想有「作爲運營商我想\作爲運營商 – whd 2012-04-21 11:51:55

+0

發現\\ .... – whd 2012-04-21 11:54:11

+0

哦,我明白了,是的,那是\\。 – 2012-04-21 11:58:57