Skip to content

Commit 4e1403e

Browse files
authored
Add lexer for Ring Language (#1133)
https://ring-lang.net Closes #1131
1 parent 66a939a commit 4e1403e

File tree

3 files changed

+9694
-0
lines changed

3 files changed

+9694
-0
lines changed

lexers/embedded/ring.xml

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<lexer>
2+
<config>
3+
<name>Ring</name>
4+
<alias>ring</alias>
5+
<filename>*.ring</filename>
6+
<filename>*.rh</filename>
7+
<filename>*.rform</filename>
8+
<mime_type>text/x-ring</mime_type>
9+
<case_insensitive>true</case_insensitive>
10+
</config>
11+
<rules>
12+
<state name="root">
13+
<rule pattern="\s+"><token type="Text"/></rule>
14+
<rule pattern="//.*?\n"><token type="CommentSingle"/></rule>
15+
<rule pattern="#.*?\n"><token type="CommentSingle"/></rule>
16+
<rule pattern="/\*"><token type="CommentMultiline"/><push state="comment"/></rule>
17+
<rule pattern="^\s*(changeringkeyword|changeringoperator|disablehashcomments|enablehashcomments|loadsyntax)\b"><token type="CommentPreproc"/></rule>
18+
<rule pattern=":[a-zA-Z_@$][\w@$]*"><token type="LiteralStringSymbol"/></rule>
19+
<rule pattern="&quot;"><token type="LiteralStringDouble"/><push state="string-double"/></rule>
20+
<rule pattern="&#x27;"><token type="LiteralStringSingle"/><push state="string-single"/></rule>
21+
<rule pattern="`"><token type="LiteralStringBacktick"/><push state="string-backtick"/></rule>
22+
<rule pattern="(\bclass)(\s+)(\w+)"><bygroups><token type="KeywordDeclaration"/><token type="Text"/><token type="NameClass"/></bygroups></rule>
23+
<rule pattern="(\bfrom)(\s+)(\w+)"><bygroups><token type="KeywordDeclaration"/><token type="Text"/><token type="NameClass"/></bygroups></rule>
24+
<rule pattern="(\bfunc|def|function)(\s+)(\w+)"><bygroups><token type="KeywordDeclaration"/><token type="Text"/><token type="NameFunction"/></bygroups></rule>
25+
<rule pattern="(\bpackage|import)(\s+)([a-zA-Z_@$][\w@$.]*)"><bygroups><token type="KeywordNamespace"/><token type="Text"/><token type="NameNamespace"/></bygroups></rule>
26+
<rule pattern="(\bnew)(\s+)(\w+)"><bygroups><token type="KeywordPseudo"/><token type="Text"/><token type="NameClass"/></bygroups></rule>
27+
<rule pattern="\b(if|but|elseif|else|other|ok|endif|end|switch|on|case|off|endswitch|for|in|to|step|next|endfor|foreach|while|endwhile|do|again|return|bye|exit|break|loop|continue|call)\b"><token type="Keyword"/></rule>
28+
<rule pattern="\b(try|catch|done|endtry)\b"><token type="Keyword"/></rule>
29+
<rule pattern="\b(class|endclass|from|func|def|function|endfunc|endfunction|package|endpackage|private)\b"><token type="KeywordDeclaration"/></rule>
30+
<rule pattern="\b(load|import)\b"><token type="KeywordNamespace"/></rule>
31+
<rule pattern="\b(new|self|this|super)\b"><token type="KeywordPseudo"/></rule>
32+
<rule pattern="\b(see|put|give|get)\b"><token type="Keyword"/></rule>
33+
<rule pattern="\b(true|false|nl|null|tab|cr|sysargv|ccatcherror|ringoptionalfunctions)\b"><token type="NameBuiltinPseudo"/></rule>
34+
<rule pattern="\b(and|or|not)\b"><token type="OperatorWord"/></rule>
35+
<rule pattern="\b(acos|add|addattribute|adddays|addmethod|ascii|asin|assert|atan|atan2|attributes|binarysearch|bytes2double|bytes2float|bytes2int|callgarbagecollector|callgc|ceil|cfunctions|char|chdir|checkoverflow|classes|classname|clearerr|clock|clockspersecond|closelib|copy|cos|cosh|currentdir|date|dec|decimals|del|diffdays|dir|direxists|double2bytes|eval|exefilename|exefolder|exp|fabs|fclose|feof|ferror|fexists|fflush|fgetc|fgetpos|fgets|filename|find|float2bytes|floor|fopen|fputc|fputs|fread|freopen|fseek|fsetpos|ftell|functions|fwrite|getarch|getattribute|getchar|getfilesize|getnumber|getpathtype|getpointer|getptr|getstring|globals|hex|hex2str|importpackage|input|insert|int2bytes|intvalue|isalnum|isalpha|isandroid|isattribute|iscfunction|isclass|iscntrl|isdigit|isfreebsd|isfunction|isglobal|isgraph|islinux|islist|islocal|islower|ismacosx|ismethod|ismsdos|isnull|isnumber|isobject|ispackage|ispackageclass|ispointer|isprint|isprivateattribute|isprivatemethod|ispunct|isspace|isstring|isunix|isupper|iswindows|iswindows64|isxdigit|left|len|lines|list|list2str|loadlib|locals|log|log10|lower|max|memcpy|memorycopy|mergemethods|methods|min|murmur3hash|newlist|nofprocessors|nothing|nullpointer|nullptr|number|obj2ptr|object2pointer|objectid|optionalfunc|packageclasses|packagename|packages|parentclassname|perror|pointer2object|pointer2string|pointercompare|pow|prevfilename|print|print2str|ptr2obj|ptr2str|ptrcmp|puts|raise|random|randomize|read|ref|reference|refcount|remove|rename|reverse|rewind|right|ring_give|ring_see|ring_state_delete|ring_state_filetokens|ring_state_findvar|ring_state_init|ring_state_main|ring_state_mainfile|ring_state_new|ring_state_newvar|ring_state_resume|ring_state_runcode|ring_state_runcodeatins|ring_state_runfile|ring_state_runobjectfile|ring_state_scannererror|ring_state_setvar|ring_state_stringtokens|ringvm_callfunc|ringvm_calllist|ringvm_cfunctionslist|ringvm_classeslist|ringvm_codelist|ringvm_evalinscope|ringvm_fileslist|ringvm_functionslist|ringvm_genarray|ringvm_give|ringvm_hideerrormsg|ringvm_info|ringvm_ismempool|ringvm_memorylist|ringvm_packageslist|ringvm_passerror|ringvm_runcode|ringvm_scopescount|ringvm_see|ringvm_settrace|ringvm_tracedata|ringvm_traceevent|ringvm_tracefunc|setattribute|setpointer|setptr|shutdown|sin|sinh|sort|space|sqrt|srandom|str2hex|str2hexcstyle|str2list|strcmp|string|substr|swap|sysget|sysset|syssleep|system|sysunset|tan|tanh|tempfile|tempname|time|timelist|trim|type|ungetc|unsigned|upper|uptime|variablepointer|varptr|version|windowsnl|write)\b(?=\s*\()"><token type="NameBuiltin"/></rule>
36+
<rule pattern="0x[a-f0-9_]+"><token type="LiteralNumberHex"/></rule>
37+
<rule pattern="0b[01_]+"><token type="LiteralNumberBin"/></rule>
38+
<rule pattern="0o[0-7_]+"><token type="LiteralNumberOct"/></rule>
39+
<rule pattern="[0-9]+(?:_[0-9]+)*\.[0-9]*(?:_[0-9]+)*([eE][-+]?[0-9]+)?"><token type="LiteralNumberFloat"/></rule>
40+
<rule pattern="[0-9]+(?:_[0-9]+)*"><token type="LiteralNumberInteger"/></rule>
41+
<rule pattern="(\+\+|\-\-|\*\*|\^\^|!=|&lt;=|&gt;=|&lt;&lt;|&gt;&gt;|&amp;&amp;|\|\|)"><token type="Operator"/></rule>
42+
<rule pattern="(\+=|-=|\*=|/=|%=|&lt;&lt;=|&gt;&gt;=|&amp;=|\|=|\^=)"><token type="Operator"/></rule>
43+
<rule pattern="[-+/*%=&lt;&gt;&amp;|!~.:^?]"><token type="Operator"/></rule>
44+
<rule pattern="[\[\](){},;]"><token type="Punctuation"/></rule>
45+
<rule pattern="[a-zA-Z_@$][\w@$]*"><token type="Name"/></rule>
46+
</state>
47+
<state name="comment">
48+
<rule pattern="[^*/]+"><token type="CommentMultiline"/></rule>
49+
<rule pattern="/\*"><token type="CommentMultiline"/><push/></rule>
50+
<rule pattern="\*/"><token type="CommentMultiline"/><pop depth="1"/></rule>
51+
<rule pattern="[*/]"><token type="CommentMultiline"/></rule>
52+
</state>
53+
<state name="string-double">
54+
<rule pattern="[^&quot;#]+"><token type="LiteralStringDouble"/></rule>
55+
<rule pattern="#\{"><token type="LiteralStringInterpol"/><push state="interpolation"/></rule>
56+
<rule pattern="&quot;"><token type="LiteralStringDouble"/><pop depth="1"/></rule>
57+
</state>
58+
<state name="string-single">
59+
<rule pattern="[^&#x27;#]+"><token type="LiteralStringSingle"/></rule>
60+
<rule pattern="#\{"><token type="LiteralStringInterpol"/><push state="interpolation"/></rule>
61+
<rule pattern="&#x27;"><token type="LiteralStringSingle"/><pop depth="1"/></rule>
62+
</state>
63+
<state name="string-backtick">
64+
<rule pattern="[^`#]+"><token type="LiteralStringBacktick"/></rule>
65+
<rule pattern="#\{"><token type="LiteralStringInterpol"/><push state="interpolation"/></rule>
66+
<rule pattern="`"><token type="LiteralStringBacktick"/><pop depth="1"/></rule>
67+
</state>
68+
<state name="interpolation">
69+
<rule pattern="\}"><token type="LiteralStringInterpol"/><pop depth="1"/></rule>
70+
<rule><include state="root"/></rule>
71+
</state>
72+
</rules>
73+
</lexer>
74+

0 commit comments

Comments
 (0)