Skip to content

Commit 79dde77

Browse files
authored
Added IBM RPG lexer (#1078)
Hi ! Here's a lexer for IBM RPG ! You can learn about this language here : - https://en.wikipedia.org/wiki/IBM_RPG - https://www.ibm.com/docs/en/i/7.6.0?topic=languages-rpg For legacy purposes, the language can be written in two different forms, the fixed format (looks like a punched card, expects specific characters to be at certain columns in source code) and the free format (gets rid of fixed format, and looks like modern languages as Python). This lexer only handles the free format, I may open a pull request later to implement the fixed format syntax. There are some RPG repositories available on GitHub, you can search using "language:RPGLE" to see them. The language is old but still maintained and even continues to evolve nowadays. The lexer is based on the latest version at this day, RPG 7.6. Are the MIME types in the XML files important ? I don't think this language has one (and I didn't know there were MIME types for programming languages), so I made one which looks like what I saw in other lexers XML files. And the language can have embedded SQL statements in the source code, so I reused the SQL lexer. Please tell me if there's a better way to do it. The language is rather tied to IBM environment, so if you're interested, here's how to try it : - https://pub400.com/ provides free accounts to an IBM machine to try and discover it - https://www.nicklitten.com/use-a-5250-green-screen-terminal-in-visual-studio/ to get a terminal to access pub400 machine and run code - https://www.nicklitten.com/connecting-to-pub400-with-vs-code-for-ibm-i/ shows how to code RPG in VSCode and compile it
1 parent 1b932ec commit 79dde77

File tree

4 files changed

+253
-0
lines changed

4 files changed

+253
-0
lines changed

lexers/embedded/rpgle.xml

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
<lexer>
2+
<config>
3+
<name>RPGLE</name>
4+
<alias>SQLRPGLE</alias>
5+
<alias>RPG IV</alias>
6+
<filename>*.RPGLE</filename>
7+
<filename>*.rpgle</filename>
8+
<filename>*.SQLRPGLE</filename>
9+
<filename>*.sqlrpgle</filename>
10+
<mime_type>text/x-rpgle</mime_type>
11+
<mime_type>text/x-sqlrpgle</mime_type>
12+
<case_insensitive>true</case_insensitive>
13+
</config>
14+
<rules>
15+
<state name="root">
16+
<rule pattern="\/\/.*">
17+
<token type="Comment"/>
18+
</rule>
19+
<rule pattern="^\*\*free$">
20+
<token type="CommentSpecial"/>
21+
</rule>
22+
<rule pattern="(\*(all(g|oc|ow|sep|thread|u|x)?|altseq|alwblanknum|ascii|astfill|aut[lo]|basic|blank(s)?|caller|cancl|cdmy(0)?|change|char|cl|cmd(y|y0)?|cnowiden|cntrld|col|comp(at)?|concurrent|constants|constructor|convert|copyright|crt(bndrpg|rpgmod)|ct(data|lbdy|lspec)|cur(lib|sym)|cvt(data)?|cwiden|cymd(0)?|data|date(time)?|day(s)?|dclcase|ddm|debugio|dec|delete|det[cl]|dft|diag|dmy|dtaara|dump|end|entry(exit)?|equate|escape|eur(0)?|exact|exclude|excp|exp(dds|include)|ext(desc|dft)?|file(s)?|first|ftrans|full|gen|getin|graph(ic)?|hex|hival|hms|hours|ignore|ilerpg|in([0-9]{2}|H[1-9]|K[A-Y]|L[1-9]|LR|O[AGV]|U[1-8])?|INFO|INHERIT|INIT|INP(UT(ONLY|PACKED)?)?|INZ(OFL|SR)|ISO(0)?|JAVA|JIS|JOB(RUN(0|MIX|_DBCS|_JAVA|_MIXED)?)?|JUL|KEEP|KEY|LANGID(SHR|UNQ)|LDA|LGL|LIB(L|RCRTAUT)|LIKE(DS)?|LIST|LOCK|LONG(JOBRUN(0)?|JUL(0)?)|LOVAL|LVL[12]|MAX(DIGITS)?|MDY(0)?|MINUTES|MIXED(ASCII|EBCDIC)|MN|MODE|MODULE|MONTH(S)?|MS(ECONDS)?|M[A-Z]{3}[0-9]{4}|NATURAL|NEW|NEXT|NO(ALLOW|CHGDSLEN|COL|CVT(DATA)?|DATETIME|DEBUGIO|EXACT|EXPDDS|EXPINCLUDE|EXT|GEN|GRAPHIC|IND|INPUTPACKED|INZOFL|KEY|PASS|RMVCOMMENT|SECLVL|SHOWCPY|SHOWSKP|SRCSTMT|UNREF|VARCHAR|VARGRAPHIC|XREF|ZONED)?|NONE|NOTIFY|NULL(IND)?|OFF|OFL|OMIT|ON(EXIT|LY)?|OPCODE|OUT(PUT)?|OWNER|PARM(S)?|PCML|PDA|PEP|PGM(BDY)?|PLACE|PROC|PROGRAM|PSSR|RECORD|REQUIRE|RESDECPOS|RETVAL|RIGHTADJ|RMVCOMMENT|ROUTINE|SECLVL|SECONDS|SELF|SERIALIZE|SHOW(CPY|SKP)|SIZE|SNGLVL|SRC(MBRTXT|STMT)?|START|STATUS|STDCHARSIZE|STGMDL|STRICTKEYS|STRING|SYS|TBL|TERASPACE|TERM|THREAD_(CONCURRENT|SERIALIZE)|TOT[CL]|TRIM|UCS2|UNIQUE|UNREF|UNSET|UPDATE|USA(0)?|USE(DECEDIT)?|USER|USR(CTL|SPC)|UTF(8|16)?|V[0-9]R[0-9]M[0-9]|V[678]|VAR(CHAR|GRAPHIC|SIZE)?|WARN|XMLSAX|XML_(ATTR_(CHARS|NAME|PREDEF_REF|UCS2_REF)|CHARS|COMMENT|DOCTYPE_DECL|ENCODING_DECL|END_(ATTR|CDATA|DOCUMENT|ELEMENT)|EXCEPTION|PI_(DATA|TARGET)|PREDEF_REF|STANDALONE_DECL|START_(CDATA|DOCUMENT|ELEMENT)|UCS2_REF|UNKNOWN_(ATTR_REF|REF)|VERSION_INFO)|XREF|YEAR(S)?|YES|YMD(0)?|ZERO(S)?|ZONED|[DHMNSY]))\b">
23+
<token type="Literal"/> <!-- Special values -->
24+
</rule>
25+
<rule pattern="\bexec\s+sql\b"> <!-- embedded SQL -->
26+
<token type="Keyword"/>
27+
<push state="exec-sql"/>
28+
</rule>
29+
<rule pattern="(%(abs|addr|alloc|bitand|bitnot|bitor|bitxor|char|charcount|check|checkr|concat|concatarr|data|date|days|dec|dech|decpos|diff|div|editc|editflt|editw|elem|eof|equal|error|fields|float|found|gen|graph|handler|hival|hours|int|inth|kds|left|len|list|lookup(lt|ge|gt|le)?|loval|lower|max|maxarr|min|minutes|minarr|months|mseconds|msg|nullind|occur|omitted|open|paddr|parms|parmnum|parser|passed|proc|range|realloc|rem|replace|right|scan|scanr|scanrpl|seconds|shtdn|size|split|sqrt|status|str|subarr|subdt|subst|target|this|time|timestamp|tlookup(lt|ge|gt|le)?|trim(l|r)?|ucs2|uns|unsh|upper|xfoot|xlate|xml|years))\b">
30+
<token type="NameFunctionMagic"/> <!-- builtin functions -->
31+
</rule>
32+
<rule pattern="\b(ind|int|uns|(var)?char|bindec|float|packed|zoned|time(stamp)?|date|pointer|clob|blob|(var)?graph|object|(var)?ucs2)\b">
33+
<token type="KeywordType"/> <!-- variable types -->
34+
</rule>
35+
<rule pattern="\b(dcl\-(ds|pi|proc|pr|[csf])|end\-(ds|pi|proc|pr)|ctl\-opt|const|value|to|downto|not)\b">
36+
<token type="Keyword"/> <!-- Syntax keywords -->
37+
</rule>
38+
<rule pattern="\b(acq|add|adddur|alloc|and(gt|lt|eq|ne|ge|le)?|bitoff|biton|cab(gt|lt|eq|ne|ge|le)?|call(b|p)?|cas(gt|lt|eq|ne|ge|le)?|cat|chain|check|checkr|clear|close|commit|comp|data-gen|data-into|dealloc|define|delete|div|do((u|w)(gt|lt|eq|ne|ge|le)?)?|dsply|dump|else(if)?|end(cs|do|for|if|mon|sl|sr)?|eval(r|-corr)?|except|exfmt|exsr|extrct|feod|for(-each)?|force|goto|if(gt|lt|eq|ne|ge|le)?|in|iter|kfld|klist|leave(sr)?|lookup|m(hh|hl|lh|ll)zo|monitor|move[al]?|mult|mvr|next|occur|on-(error|excp|exit)|open|or(gt|lt|eq|ne|ge|le)?|other|out|parm|plist|post|read(c|e|p|pe)?|realloc|rel|reset|return|rolbk|scan|select|set(gt|ll|off|on)|shtdn|snd-msg|sorta|sqrt|sub(dur|st)?|tag|test[bnz]?|time|unlock|update|when(gt|lt|eq|ne|ge|le)?|when-i[ns]|write|xfoot|slate|xml-(into|sax)|z-(add|sub))\b">
39+
<token type="Keyword"/> <!-- Operation codes -->
40+
</rule>
41+
<rule pattern="\b(alloc|altseq|ccsid|copy(nest|right)|cursym|dat(edit|fmt)|debug|dec(edit|prec)|dftname|expropts|extbinint|fltdiv|formsalign|ftrans|intprec|(no)?main|openopt|thread|timfmt|actgrp|alwnull|aut|bnddir|cvtopt|dateyy|dftactgrp|enbpfrcol|fixnbr|genlvl|indent|langid|optimize|option|pgminfo|prfdta|reqprexp|strseq|stgmdl|text|truncnbr|usrprf)\b">
42+
<token type="KeywordReserved"/> <!-- ctl-opt (former H spec) -->
43+
</rule>
44+
<rule pattern="\b(alias|align|alt|altseq|ascend|based|ccsid|class|const|ctdata|datfmt|descend|dim|dtaara|export|ext(fld|fmt|name|pgm|proc)?|fromfile|import|inz|len|like(ds|file|rec)?|noopt|nullind|occurs|opdesc|options|overlay|overload|packeven|perrcd|pos|prefix|procptr|psds|qualified|reqproto|rtnparm|samepos|static|template|timfmt|tofile|value|varying)\b">
45+
<token type="KeywordReserved"/> <!-- Other keywords (not operation codes nor ctl-opt/H spec) -> mostly used with variables -->
46+
</rule>
47+
<rule pattern="(/(copy|define|eject|else|elseif|end-exec|end-free|endif|eof|exec|free|if|include|restore|set|space|title|undefine))\b">
48+
<token type="CommentPreproc"/> <!-- Preprocessor instructions -->
49+
</rule>
50+
<rule pattern="\b([0-9]+((\.[0-9]?)(e[+-][0-9]+)?)?)\b">
51+
<token type="LiteralNumber"/>
52+
</rule>
53+
<rule pattern="\bx'[0-9a-fA-F]*'">
54+
<token type="LiteralString"/> <!-- Hex string -->
55+
</rule>
56+
<rule pattern="'(''|[^'])*'">
57+
<token type="LiteralString"/>
58+
</rule>
59+
<rule pattern="[,:;\(\)]+">
60+
<token type="Punctuation"/>
61+
</rule>
62+
<rule pattern="((\*\*)|(&lt;&gt;)|=|([&lt;&gt;\+\-\*\/]=?))+">
63+
<token type="Operator"/> <!-- Arithmetic operators -->
64+
</rule>
65+
<rule pattern="\s">
66+
<token type="TextWhitespace"/>
67+
</rule>
68+
<rule pattern=".">
69+
<token type="Text"/>
70+
</rule>
71+
</state>
72+
<state name="exec-sql">
73+
<rule pattern=';'>
74+
<token type="Punctuation"/>
75+
<pop depth="1"/>
76+
</rule>
77+
<rule pattern="\s+">
78+
<token type="TextWhitespace"/>
79+
</rule>
80+
<rule pattern="--.*\n?">
81+
<token type="CommentSingle"/>
82+
</rule>
83+
<rule pattern="/\*">
84+
<token type="CommentMultiline"/>
85+
<push state="sql-multiline-comments"/>
86+
</rule>
87+
<rule pattern="&#39;">
88+
<token type="LiteralStringSingle"/>
89+
<push state="sql-string"/>
90+
</rule>
91+
<rule pattern="&#34;">
92+
<token type="LiteralStringDouble"/>
93+
<push state="sql-double-string"/>
94+
</rule>
95+
<rule pattern="(DATETIME_INTERVAL_PRECISION|PARAMETER_SPECIFIC_CATALOG|PARAMATER_ORDINAL_POSITION|USER_DEFINED_TYPE_CATALOG|PARAMATER_SPECIFIC_SCHEMA|TRANSACTIONS_ROLLED_BACK|USER_DEFINED_TYPE_SCHEMA|PARAMETER_SPECIFIC_NAME|DATETIME_INTERVAL_CODE|TRANSACTIONS_COMMITTED|USER_DEFINED_TYPE_NAME|CHARACTER_SET_CATALOG|DYNAMIC_FUNCTION_CODE|COMMAND_FUNCTION_CODE|RETURNED_OCTET_LENGTH|MESSAGE_OCTET_LENGTH|CHARACTER_SET_SCHEMA|CONSTRAINT_CATALOG|TRANSACTION_ACTIVE|CHARACTER_SET_NAME|CURRENT_TIMESTAMP|CONSTRAINT_SCHEMA|COLLATION_CATALOG|RETURNED_SQLSTATE|DYNAMIC_FUNCTION|CONDITION_NUMBER|CHARACTER_LENGTH|COMMAND_FUNCTION|COLLATION_SCHEMA|CHARACTERISTICS|TRIGGER_CATALOG|CONNECTION_NAME|SUBCLASS_ORIGIN|RETURNED_LENGTH|TIMEZONE_MINUTE|CONSTRAINT_NAME|ROUTINE_CATALOG|TRIGGER_SCHEMA|ROUTINE_SCHEMA|LOCALTIMESTAMP|IMPLEMENTATION|PARAMATER_NAME|MESSAGE_LENGTH|PARAMETER_MODE|COLLATION_NAME|TIMEZONE_HOUR|SPECIFIC_NAME|DETERMINISTIC|CORRESPONTING|AUTHORIZATION|INSTANTIABLE|CURRENT_TIME|CURRENT_USER|ROUTINE_NAME|NOCREATEUSER|MESSAGE_TEXT|SQLEXCEPTION|CATALOG_NAME|SESSION_USER|CLASS_ORIGIN|CURRENT_ROLE|SPECIFICTYPE|SERIALIZABLE|CURRENT_DATE|OCTET_LENGTH|CURRENT_PATH|TRIGGER_NAME|CHAR_LENGTH|SYSTEM_USER|REFERENCING|UNENCRYPTED|COLUMN_NAME|SQLWARNINIG|DIAGNOSTICS|CURSOR_NAME|SERVER_NAME|INSENSITIVE|SCHEMA_NAME|UNCOMMITTED|TRANSACTION|CONSTRUCTOR|LANCOMPILER|CARDINALITY|CONSTRAINTS|TRANSLATION|CHECKPOINT|CONSTRAINT|CONNECTION|PRIVILEGES|COMPLETION|CONVERSION|DELIMITERS|TABLE_NAME|INDITCATOR|INITIALIZE|DESCRIPTOR|REPEATABLE|CREATEUSER|DEFERRABLE|DESTRUCTOR|PROCEDURAL|DICTIONARY|DISCONNECT|TRANSFORMS|KEY_MEMBER|BIT_LENGTH|ASYMMETRIC|ASSIGNMENT|ASENSITIVE|OVERRIDING|PARAMETERS|REFERENCES|ORDINALITY|NOCREATEDB|STATISTICS|DEALLOCATE|SAVE_POINT|RECURSIVE|STRUCTURE|SUBSTRING|IMMEDIATE|GENERATED|SYMMETRIC|STATEMENT|INCREMENT|IMMUTABLE|INCLUDING|COMMITTED|TEMPORARY|INITIALLY|TERMINATE|PRECISION|DELIMITER|TIMESTAMP|INTERSECT|ISOLATION|TRANSFORM|TRANSLATE|ROW_COUNT|ASSERTION|PARAMETER|EXCLUSIVE|LOCALTIME|VALIDATOR|AGGREGATE|EXCLUDING|SENSITIVE|EXCEPTION|ENCRYPTED|OPERATION|HIERARCHY|COLLATION|PROCEDURE|CONTINUE|ENCODING|MINVALUE|SPECIFIC|ABSOLUTE|SECURITY|WHENEVER|EXISTING|VOLATILE|MAXVALUE|EXTERNAL|NULLABLE|VARIABLE|SQLERROR|DISTINCT|DISPATCH|END-EXEC|LOCATION|ALLOCATE|OVERLAPS|UNLISTEN|ROLLBACK|TRUNCATE|DESCRIBE|SQLSTATE|BACKWARD|FUNCTION|LANGUAGE|KEY_TYPE|CASCADED|POSITION|TRAILING|DEFERRED|RELATIVE|DEFAULTS|COALSECE|PREORDER|GROUPING|MODIFIES|INHERITS|PRESERVE|DATABASE|RESTRICT|IDENTITY|TEMPLATE|NATIONAL|CONTAINS|CREATEDB|IMPLICIT|OPERATOR|CONVERT|CURRENT|CONNECT|RECHECK|PRIMARY|STORAGE|DECLARE|DEFAULT|HANDLER|COLLATE|PREPARE|REINDEX|GRANTED|CHECKED|POSTFIX|REPLACE|INSTEAD|CATALOG|RESTART|INVOKER|PLACING|PENDANT|DEFINED|ITERATE|PARTIAL|CASCADE|BREADTH|GENERAL|TRIGGER|SESSION|BETWEEN|DEFINER|LATERAL|LEADING|RETURNS|TRUSTED|UNKNOWN|FORWARD|UNNAMED|OVERLAY|FORTRAN|ANALYZE|OPTIONS|ANALYSE|FOREIGN|ROUTINE|LOCATOR|DESTROY|SUBLIST|VERBOSE|EXTRACT|NOTNULL|EXPLAIN|VERSION|SQLCODE|EXECUTE|NOTHING|DYNAMIC|WITHOUT|SIMILAR|NATURAL|COMMENT|CLUSTER|PASCAL|SOURCE|EQUALS|CALLED|ESCAPE|EXCEPT|SELECT|ISNULL|DOMAIN|SEARCH|SCROLL|SIMPLE|BITVAR|MINUTE|EXISTS|SCHEMA|ATOMIC|METHOD|NOTIFY|ACCESS|UNIQUE|ROLLUP|NULLIF|OBJECT|STABLE|COLUMN|REVOKE|OFFSET|COMMIT|MODIFY|FREEZE|DELETE|RETURN|RESULT|UNNEST|OPTION|GLOBAL|VALUES|RENAME|SYSTEM|STATIC|UPDATE|OUTPUT|LISTEN|STDOUT|STRICT|PUBLIC|IGNORE|PREFIX|SECOND|CREATE|LENGTH|BEFORE|HAVING|INSERT|VACUUM|CURSOR|ELSIF|USING|ALTER|STYPE|CYCLE|LARGE|INPUT|CROSS|INOUT|INNER|INFIX|INDEX|LEVEL|USAGE|ILIKE|VALID|OWNER|GRANT|READS|UPPER|LIMIT|OUTER|STDIN|SYSID|GROUP|ALIAS|ORDER|UNTIL|LOCAL|RESET|START|COUNT|LOWER|TABLE| TEMP|PRIOR|AFTER|STATE|ADMIN|RIGHT|COBOL|FOUND|MATCH|FORCE|ABORT|FIRST|FINAL|CLOSE|DEREF|FETCH|WHERE|FALSE|SCALE|BEGIN|CLASS|TOAST|WRITE|NCLOB|NCHAR|CHECK|CHAIN|SPACE|NAMES|EVERY|MUMPS|CACHE|UNION|UNDER|SETOF|MONTH|SHARE|SCOPE|TREAT|SHOW|SIZE|SOME|SETS|SELF|ELSE|EACH|DROP|TYPE|FROM|RULE|DESC|ROWS|ZONE|ROLE|TRUE|FREE|FULL|GOTO|TRIM|HOLD|HOST|DATA|READ|INTO|USER|JOIN|CUBE|LAST|LEFT|LESS|LIKE|LOAD|LOCK|OPEN|COPY|ONLY|OIDS|VIEW|WHEN|THAN|THEN|NULL|NONE|WITH|WORK|NEXT|YEAR|MODE|CAST|CASE|MOVE|CALL|MORE|BOTH|EXEC|CLOB|OUT|MOD|ARE|SUM|DAY|GET|AVG|NEW|SQL|ABS|MIN|ASC|END|ROW|NOT|FOR|ANY|PLI|MAX|REF|MAP|ADA|KEY|AND|ADD|ALL|OLD|OFF|PAD|SET|OR|ON|TO|IS|OF|IN|IF|GO|AS|DO|AT|NO|BY|C|G)\b">
96+
<token type="Keyword"/>
97+
</rule>
98+
<rule pattern="(CHARACTER|SMALLINT|INTERVAL|DECIMAL|SERIAL8|VARYING|BOOLEAN|VARCHAR|INTEGER|NUMERIC|SERIAL|BINARY|BIGINT|NUMBER|FLOAT|ARRAY|TEXT|REAL|INT8|DATE|CHAR|BLOB|DEC|BIT|INT)\b">
99+
<token type="NameBuiltin"/>
100+
</rule>
101+
<rule pattern="[+*/&lt;&gt;=~!@#%^&amp;|`?-]">
102+
<token type="Operator"/>
103+
</rule>
104+
<rule pattern="[0-9]+">
105+
<token type="LiteralNumberInteger"/>
106+
</rule>
107+
<rule pattern="[a-z_][\w$]*">
108+
<token type="Name"/>
109+
</rule>
110+
<rule pattern="[;:()\[\],.]">
111+
<token type="Punctuation"/>
112+
</rule>
113+
</state>
114+
<state name="sql-multiline-comments">
115+
<rule pattern="/\*">
116+
<token type="CommentMultiline"/>
117+
<push state="sql-multiline-comments"/>
118+
</rule>
119+
<rule pattern="\*/">
120+
<token type="CommentMultiline"/>
121+
<pop depth="1"/>
122+
</rule>
123+
<rule pattern="[^/*]+">
124+
<token type="CommentMultiline"/>
125+
</rule>
126+
<rule pattern="[/*]">
127+
<token type="CommentMultiline"/>
128+
</rule>
129+
</state>
130+
<state name="sql-string">
131+
<rule pattern="[^&#39;]+">
132+
<token type="LiteralStringSingle"/>
133+
</rule>
134+
<rule pattern="&#39;&#39;">
135+
<token type="LiteralStringSingle"/>
136+
</rule>
137+
<rule pattern="&#39;">
138+
<token type="LiteralStringSingle"/>
139+
<pop depth="1"/>
140+
</rule>
141+
</state>
142+
<state name="sql-double-string">
143+
<rule pattern="[^&#34;]+">
144+
<token type="LiteralStringDouble"/>
145+
</rule>
146+
<rule pattern="&#34;&#34;">
147+
<token type="LiteralStringDouble"/>
148+
</rule>
149+
<rule pattern="&#34;">
150+
<token type="LiteralStringDouble"/>
151+
<pop depth="1"/>
152+
</rule>
153+
</state>
154+
</rules>
155+
</lexer>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
**free
2+
3+
dcl-pi *n;
4+
n int(10) const;
5+
end-pi;
6+
7+
dcl-s myvar varchar(52) inz('hello world') ccsid(*utf8);
8+
9+
myvar += %char(n);
10+
11+
dsply myvar;
12+
return;
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
[
2+
{"type":"CommentSpecial","value":"**free"},
3+
{"type":"TextWhitespace","value":"\n\n"},
4+
{"type":"Keyword","value":"dcl-pi"},
5+
{"type":"TextWhitespace","value":" "},
6+
{"type":"Literal","value":"*n"},
7+
{"type":"Punctuation","value":";"},
8+
{"type":"TextWhitespace","value":"\n "},
9+
{"type":"Text","value":"n"},
10+
{"type":"TextWhitespace","value":" "},
11+
{"type":"KeywordType","value":"int"},
12+
{"type":"Punctuation","value":"("},
13+
{"type":"LiteralNumber","value":"10"},
14+
{"type":"Punctuation","value":")"},
15+
{"type":"TextWhitespace","value":" "},
16+
{"type":"Keyword","value":"const"},
17+
{"type":"Punctuation","value":";"},
18+
{"type":"TextWhitespace","value":"\n"},
19+
{"type":"Keyword","value":"end-pi"},
20+
{"type":"Punctuation","value":";"},
21+
{"type":"TextWhitespace","value":"\n\n"},
22+
{"type":"Keyword","value":"dcl-s"},
23+
{"type":"TextWhitespace","value":" "},
24+
{"type":"Text","value":"myvar"},
25+
{"type":"TextWhitespace","value":" "},
26+
{"type":"KeywordType","value":"varchar"},
27+
{"type":"Punctuation","value":"("},
28+
{"type":"LiteralNumber","value":"52"},
29+
{"type":"Punctuation","value":")"},
30+
{"type":"TextWhitespace","value":" "},
31+
{"type":"KeywordReserved","value":"inz"},
32+
{"type":"Punctuation","value":"("},
33+
{"type":"LiteralString","value":"'hello world'"},
34+
{"type":"Punctuation","value":")"},
35+
{"type":"TextWhitespace","value":" "},
36+
{"type":"KeywordReserved","value":"ccsid"},
37+
{"type":"Punctuation","value":"("},
38+
{"type":"Literal","value":"*utf8"},
39+
{"type":"Punctuation","value":");"},
40+
{"type":"TextWhitespace","value":"\n\n"},
41+
{"type":"Text","value":"myvar"},
42+
{"type":"TextWhitespace","value":" "},
43+
{"type":"Operator","value":"+="},
44+
{"type":"TextWhitespace","value":" "},
45+
{"type":"NameFunctionMagic","value":"%char"},
46+
{"type":"Punctuation","value":"("},
47+
{"type":"Text","value":"n"},
48+
{"type":"Punctuation","value":");"},
49+
{"type":"TextWhitespace","value":"\n\n"},
50+
{"type":"Keyword","value":"dsply"},
51+
{"type":"TextWhitespace","value":" "},
52+
{"type":"Text","value":"myvar"},
53+
{"type":"Punctuation","value":";"},
54+
{"type":"TextWhitespace","value":"\n"},
55+
{"type":"Keyword","value":"return"},
56+
{"type":"Punctuation","value":";"}
57+
]

styles/rpgle.xml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<style name="RPGLE">
2+
<entry type="Error" style="#960050 bg:#1e0010"/>
3+
<entry type="Background" style="bg:#fafafa"/>
4+
<entry type="Keyword" style="#00a8c8"/>
5+
<entry type="KeywordNamespace" style="#f92672"/>
6+
<entry type="KeywordReserved" style="#ffff00"/>
7+
<entry type="KeywordType" style="#800000"/>
8+
<entry type="Name" style="#111111"/>
9+
<entry type="NameAttribute" style="#75af00"/>
10+
<entry type="NameClass" style="#75af00"/>
11+
<entry type="NameConstant" style="#00a8c8"/>
12+
<entry type="NameDecorator" style="#75af00"/>
13+
<entry type="NameException" style="#75af00"/>
14+
<entry type="NameFunction" style="#75af00"/>
15+
<entry type="NameOther" style="#75af00"/>
16+
<entry type="NameTag" style="#f92672"/>
17+
<entry type="Literal" style="#ae81ff"/>
18+
<entry type="LiteralDate" style="#d88200"/>
19+
<entry type="LiteralString" style="#d88200"/>
20+
<entry type="LiteralStringEscape" style="#8045ff"/>
21+
<entry type="LiteralNumber" style="#ae81ff"/>
22+
<entry type="Operator" style="#f92672"/>
23+
<entry type="Punctuation" style="#ff0000"/>
24+
<entry type="Comment" style="#75715e"/>
25+
<entry type="CommentPreproc" style="#2e7d32"/>
26+
<entry type="GenericEmph" style="italic"/>
27+
<entry type="GenericStrong" style="bold"/>
28+
<entry type="Text" style="#272822"/>
29+
</style>

0 commit comments

Comments
 (0)