простой 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 }
                   ...
        ...)).

Вот начало кода, когда кто-то может сказать мне, где я допустил ошибку, потому что редактор кода swi сообщает об ошибке (даже после добавления всего нескольких пустых строк) Syntax error: String too long (see style_check/1)

... Хорошо, я выяснил, в чем причина, но я не знаю, почему это работает так, как этот редактор каким-то странным образом анализирует "\", и я должен сделать это "\"", но тогда, возможно, это будет не \ operator, а \ "как изменить это?


person whd    schedule 21.04.2012    source источник
comment
Да, используя "\"", вы вводите ровно строку с двойными кавычками ".   -  person Diego Sevilla    schedule 21.04.2012


Ответы (1)


Чтобы расширить свой ответ, да, используя "\"", вы вводите ровно строку с двойными кавычками ". Например:

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

Обратите внимание, как строка abc окружена двумя 34 значениями (двойные кавычки в ASCII).

person Diego Sevilla    schedule 21.04.2012
comment
да, как в C, но я не хочу иметь в качестве оператора, я хочу \ в качестве оператора - person whd; 21.04.2012