Я пишу лексер в Прологе, который будет использоваться как часть функционального интерпретатора языка. Спецификация языка позволяет использовать такие выражения, как, например, let \x = x + 2;
. Что я хочу, чтобы lexer сделал для такого ввода, так это "return":
[tokLet, tokLambda, tokVar(x), tokEq, tokVar(x), tokPlus, tokNumber(2), tokSColon]
и проблема в том, что Пролог, похоже, игнорирует символ \
и «возвращает» строку, написанную выше, за исключением tokLambda
.
Один из подходов к решению этой проблемы состоит в том, чтобы каким-то образом добавить второй обратный слеш перед / после каждого вхождения этого кода в программный код (поскольку все работает нормально, если я изменяю исходный ввод на let \\x = x + 2;
), но мне это не очень нравится. ,
Есть идеи?
EDIT:
Если у кого-то должны быть похожие проблемы, я так решил:
main(File) :-
open(File,read,Stream),
read_stream_to_codes(Stream, Codes),
lexer(X,Codes,[]),
... invoke other methods