简体   繁体   English

简单的DCG词法分析器

[英]simple dcg lexer

Hi i'm writing a simple lexer 嗨,我在写一个简单的词法分析器

:- 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 }
                   ...
        ...)).

Here is the begining of code whell coudl someone tell me where i made mistake because swi code editor says there is an eror(even after putting only few empty nelines) Syntax error: String too long (see style_check/1) 这是代码的开始,有人告诉我我在哪里出错了,因为swi代码编辑器说存在错误(即使仅放了几个空的nelines之后) Syntax error: String too long (see style_check/1)

... Ok i found out what whas the reason, but i dont know why it works like this editor parse "\\" in some strange way and i have to make it "\\"" but then as i perhaps it will not be \\ operator but \\" how to change it ? ...好的,我找出了原因,但是我不知道为什么它像这种编辑器一样以某种奇怪的方式解析"\\" ,而我必须将其设置为"\\""但因为我也许不会运算符可是“如何更改呢?”

Just to widen my response, Yes, using "\\"" you enter exactly an string with a double quote " . 只是为了扩大我的回答,是的,使用"\\""可以输入一个带双引号"的字符串。 For example: 例如:

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

Note how the string abc is surrounded by two 34 values (the double quote in ASCII). 请注意,字符串abc如何被两个34值(ASCII中的双引号)包围。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM