"" "
pygments.lexers.elpi
~~~~~~~~~~~~~~~~~~~~
Lexer
for the `Elpi <
http://github.com/LPCIC/elpi >`_ programming language.
:copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
:license: BSD, see LICENSE
for details.
"" "
from pygments.lexer
import RegexLexer, bygroups, include
from pygments.token
import Text, Comment, Operator, Keyword, Name, String, \
Number, Punctuation
__all__ = [
'ElpiLexer' ]
class ElpiLexer(RegexLexer):
"" "
Lexer
for the Elpi programming language.
"" "
name =
'Elpi'
url =
'http://github.com/LPCIC/elpi '
aliases = [
'elpi' ]
filenames = [
'*.elpi' ]
mimetypes = [
'text/x-elpi' ]
version_added =
'2.11'
lcase_re = r
"[a-z]"
ucase_re = r
"[A-Z]"
digit_re = r
"[0-9]"
schar2_re = r
"([+*^?/<>`'@#~=&!])"
schar_re = rf
"({schar2_re}|-|\$|_)"
idchar_re = rf
"({lcase_re}|{ucase_re}|{digit_re}|{schar_re})"
idcharstarns_re = rf
"({idchar_re}*(\.({lcase_re}|{ucase_re}){idchar_re}*)*)"
symbchar_re = rf
"({lcase_re}|{ucase_re}|{digit_re}|{schar_re}|:)"
constant_re = rf
"({ucase_re}{idchar_re}*|{lcase_re}{idcharstarns_re}|{schar2_re}{symbchar_re}*|_{idchar_re}+)"
symbol_re = r
"(,|<=>|->|:-|;|\?-|->|&|=>|\bas\b|\buvar\b|<|=<|=|==|>=|>|\bi<|\bi=<|\bi>=|\bi>|\bis\b|\br<|\br=<|\br>=|\br>|\bs<|\bs=<|\bs>=|\bs>|@|::|\[\]|`->|`:|`:=|\^|-|\+|\bi-|\bi\+|r-|r\+|/|\*|\bdiv\b|\bi\*|\bmod\b|\br\*|~|\bi~|\br~)"
escape_re = rf
"\(({constant_re}|{symbol_re})\)"
const_sym_re = rf
"({constant_re}|{symbol_re}|{escape_re})"
tokens = {
'root' : [
include(
'elpi' )
],
'elpi' : [
include(
'_elpi-comment' ),
(r
"(:before|:after|:if|:name)(\s*)(\" )
",
bygroups(Keyword.Mode, Text.Whitespace, String.Double),
'elpi-string' ),
(r
"(:index)(\s*\()" , bygroups(Keyword.Mode, Text.Whitespace),
'elpi-indexing-expr' ),
(rf
"\b(external pred|pred)(\s+)({const_sym_re})" ,
bygroups(Keyword.Declaration, Text.Whitespace, Name.Function),
'elpi-pred-item' ),
(rf
"\b(external type|type)(\s+)(({const_sym_re}(,\s*)?)+)" ,
bygroups(Keyword.Declaration, Text.Whitespace, Name.Function),
'elpi-type' ),
(rf
"\b(kind)(\s+)(({const_sym_re}|,)+)" ,
bygroups(Keyword.Declaration, Text.Whitespace, Name.Function),
'elpi-type' ),
(rf
"\b(typeabbrev)(\s+)({const_sym_re})" ,
bygroups(Keyword.Declaration, Text.Whitespace, Name.Function),
'elpi-type' ),
(r
"\b(accumulate)(\s+)(\" )
",
bygroups(Keyword.Declaration, Text.Whitespace, String.Double),
'elpi-string' ),
(rf
"\b(accumulate|namespace|local)(\s+)({constant_re})" ,
bygroups(Keyword.Declaration, Text.Whitespace, Text)),
(rf
"\b(shorten)(\s+)({constant_re}\.)" ,
bygroups(Keyword.Declaration, Text.Whitespace, Text)),
(r
"\b(pi|sigma)(\s+)([a-zA-Z][A-Za-z0-9_ ]*)(\\)" ,
bygroups(Keyword.Declaration, Text.Whitespace, Name.Variable, Text)),
(rf
"\b(constraint)(\s+)(({const_sym_re}(\s+)?)+)" ,
bygroups(Keyword.Declaration, Text.Whitespace, Name.Function),
'elpi-chr-rule-start' ),
(rf
"(?=[A-Z_]){constant_re}" , Name.Variable),
(rf
"(?=[a-z_]){constant_re}\\" , Name.Variable),
(r
"_" , Name.Variable),
(rf
"({symbol_re}|!|=>|;)" , Keyword.Declaration),
(constant_re, Text),
(r
"\[|\]|\||=>" , Keyword.Declaration),
(r
'"' , String.Double,
'elpi-string' ),
(r
'`' , String.Double,
'elpi-btick' ),
(r
'\' ', String.Double, ' elpi-tick
'),
(r
'\{\{' , Punctuation,
'elpi-quote' ),
(r
'\{[^\{]' , Text,
'elpi-spill' ),
(r
"\(" , Text,
'elpi-in-parens' ),
(r
'\d[\d_]*' , Number.Integer),
(r
'-?\d[\d_]*(.[\d_]*)?([eE][+\-]?\d[\d_]*)' , Number.Float),
(r
"[\+\*\-/\^\.]" , Operator),
],
'_elpi-comment' : [
(r
'%[^\n]*\n' , Comment),
(r
'/\*' , Comment,
'elpi-multiline-comment' ),
(r
"\s+" , Text.Whitespace),
],
'elpi-multiline-comment' : [
(r
'\*/' , Comment,
'#pop'),
(r
'.' , Comment)
],
'elpi-indexing-expr' :[
(r
'[0-9 _]+' , Number.Integer),
(r
'\)' , Text,
'#pop'),
],
'elpi-type' : [
(r
"(ctype\s+)(\" )
", bygroups(Keyword.Type, String.Double), 'elpi-string'),
(r
'->' , Keyword.Type),
(constant_re, Keyword.Type),
(r
"\(|\)" , Keyword.Type),
(r
"\." , Text,
'#pop'),
include(
'_elpi-comment' ),
],
'elpi-chr-rule-start' : [
(r
"\{" , Text,
'elpi-chr-rule' ),
include(
'_elpi-comment' ),
],
'elpi-chr-rule' : [
(r
"\brule\b" , Keyword.Declaration),
(r
"\\" , Keyword.Declaration),
(r
"\}" , Text,
'#pop:2'),
include(
'elpi' ),
],
'elpi-pred-item' : [
(r
"[io]:" , Keyword.Mode,
'elpi-ctype' ),
(r
"\." , Text,
'#pop'),
include(
'_elpi-comment' ),
],
'elpi-ctype' : [
(r
"(ctype\s+)(\" )
", bygroups(Keyword.Type, String.Double), 'elpi-string'),
(r
'->' , Keyword.Type),
(constant_re, Keyword.Type),
(r
"\(|\)" , Keyword.Type),
(r
"," , Text,
'#pop'),
(r
"\." , Text,
'#pop:2'),
include(
'_elpi-comment' ),
],
'elpi-btick' : [
(r
'[^` ]+' , String.Double),
(r
'`' , String.Double,
'#pop'),
],
'elpi-tick' : [
(r
'[^\' ]+
', String.Double),
(r
'\' ', String.Double, ' #pop'),
],
'elpi-string' : [
(r
'[^\"]+' , String.Double),
(r
'"' , String.Double,
'#pop'),
],
'elpi-quote' : [
(r
'\{\{' , Punctuation,
'#push'),
(r
'\}\}' , Punctuation,
'#pop'),
(rf
"(lp:)((?=[A-Z_]){constant_re})" , bygroups(Keyword, Name.Variable)),
(r
"[^l\}]+" , Text),
(r
"l|\}" , Text),
],
'elpi-spill' : [
(r
'\{[^\{]' , Text,
'#push'),
(r
'\}[^\}]' , Text,
'#pop'),
include(
'elpi' ),
],
'elpi-in-parens' : [
(r
"\(" , Operator,
'#push'),
(r
"\)" , Operator,
'#pop'),
include(
'elpi' ),
],
}
Messung V0.5 C=89 H=79 G=83
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland