codekingpro/portable-devtools
114k
1"""2 pygments.lexers.modula23 ~~~~~~~~~~~~~~~~~~~~~~~4 5 Multi-Dialect Lexer for Modula-2.6 7 :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.8 :license: BSD, see LICENSE for details.9"""10 11import re12 13from pygments.lexer import RegexLexer, include14from pygments.util import get_bool_opt, get_list_opt15from pygments.token import Text, Comment, Operator, Keyword, Name, \16 String, Number, Punctuation, Error17 18__all__ = ['Modula2Lexer']19 20 21# Multi-Dialect Modula-2 Lexer22class Modula2Lexer(RegexLexer):23 """24 For Modula-2 source code.25 26 The Modula-2 lexer supports several dialects. By default, it operates in27 fallback mode, recognising the *combined* literals, punctuation symbols28 and operators of all supported dialects, and the *combined* reserved words29 and builtins of PIM Modula-2, ISO Modula-2 and Modula-2 R10, while not30 differentiating between library defined identifiers.31 32 To select a specific dialect, a dialect option may be passed33 or a dialect tag may be embedded into a source file.34 35 Dialect Options:36 37 `m2pim`38 Select PIM Modula-2 dialect.39 `m2iso`40 Select ISO Modula-2 dialect.41 `m2r10`42 Select Modula-2 R10 dialect.43 `objm2`44 Select Objective Modula-2 dialect.45 46 The PIM and ISO dialect options may be qualified with a language extension.47 48 Language Extensions:49 50 `+aglet`51 Select Aglet Modula-2 extensions, available with m2iso.52 `+gm2`53 Select GNU Modula-2 extensions, available with m2pim.54 `+p1`55 Select p1 Modula-2 extensions, available with m2iso.56 `+xds`57 Select XDS Modula-2 extensions, available with m2iso.58 59 60 Passing a Dialect Option via Unix Commandline Interface61 62 Dialect options may be passed to the lexer using the `dialect` key.63 Only one such option should be passed. If multiple dialect options are64 passed, the first valid option is used, any subsequent options are ignored.65 66 Examples:67 68 `$ pygmentize -O full,dialect=m2iso -f html -o /path/to/output /path/to/input`69 Use ISO dialect to render input to HTML output70 `$ pygmentize -O full,dialect=m2iso+p1 -f rtf -o /path/to/output /path/to/input`71 Use ISO dialect with p1 extensions to render input to RTF output72 73 74 Embedding a Dialect Option within a source file75 76 A dialect option may be embedded in a source file in form of a dialect77 tag, a specially formatted comment that specifies a dialect option.78 79 Dialect Tag EBNF::80 81 dialectTag :82 OpeningCommentDelim Prefix dialectOption ClosingCommentDelim ;83 84 dialectOption :85 'm2pim' | 'm2iso' | 'm2r10' | 'objm2' |86 'm2iso+aglet' | 'm2pim+gm2' | 'm2iso+p1' | 'm2iso+xds' ;87 88 Prefix : '!' ;89 90 OpeningCommentDelim : '(*' ;91 92 ClosingCommentDelim : '*)' ;93 94 No whitespace is permitted between the tokens of a dialect tag.95 96 In the event that a source file contains multiple dialect tags, the first97 tag that contains a valid dialect option will be used and any subsequent98 dialect tags will be ignored. Ideally, a dialect tag should be placed99 at the beginning of a source file.100 101 An embedded dialect tag overrides a dialect option set via command line.102 103 Examples:104 105 ``(*!m2r10*) DEFINITION MODULE Foobar; ...``106 Use Modula2 R10 dialect to render this source file.107 ``(*!m2pim+gm2*) DEFINITION MODULE Bazbam; ...``108 Use PIM dialect with GNU extensions to render this source file.109 110 111 Algol Publication Mode:112 113 In Algol publication mode, source text is rendered for publication of114 algorithms in scientific papers and academic texts, following the format115 of the Revised Algol-60 Language Report. It is activated by passing116 one of two corresponding styles as an option:117 118 `algol`119 render reserved words lowercase underline boldface120 and builtins lowercase boldface italic121 `algol_nu`122 render reserved words lowercase boldface (no underlining)123 and builtins lowercase boldface italic124 125 The lexer automatically performs the required lowercase conversion when126 this mode is activated.127 128 Example:129 130 ``$ pygmentize -O full,style=algol -f latex -o /path/to/output /path/to/input``131 Render input file in Algol publication mode to LaTeX output.132 133 134 Rendering Mode of First Class ADT Identifiers:135 136 The rendering of standard library first class ADT identifiers is controlled137 by option flag "treat_stdlib_adts_as_builtins".138 139 When this option is turned on, standard library ADT identifiers are rendered140 as builtins. When it is turned off, they are rendered as ordinary library141 identifiers.142 143 `treat_stdlib_adts_as_builtins` (default: On)144 145 The option is useful for dialects that support ADTs as first class objects146 and provide ADTs in the standard library that would otherwise be built-in.147 148 At present, only Modula-2 R10 supports library ADTs as first class objects149 and therefore, no ADT identifiers are defined for any other dialects.150 151 Example:152 153 ``$ pygmentize -O full,dialect=m2r10,treat_stdlib_adts_as_builtins=Off ...``154 Render standard library ADTs as ordinary library types.155 156 .. versionchanged:: 2.1157 Added multi-dialect support.158 """159 name = 'Modula-2'160 url = 'http://www.modula2.org/'161 aliases = ['modula2', 'm2']162 filenames = ['*.def', '*.mod']163 mimetypes = ['text/x-modula2']164 version_added = '1.3'165 166 flags = re.MULTILINE | re.DOTALL167 168 tokens = {169 'whitespace': [170 (r'\n+', Text), # blank lines171 (r'\s+', Text), # whitespace172 ],173 'dialecttags': [174 # PIM Dialect Tag175 (r'\(\*!m2pim\*\)', Comment.Special),176 # ISO Dialect Tag177 (r'\(\*!m2iso\*\)', Comment.Special),178 # M2R10 Dialect Tag179 (r'\(\*!m2r10\*\)', Comment.Special),180 # ObjM2 Dialect Tag181 (r'\(\*!objm2\*\)', Comment.Special),182 # Aglet Extensions Dialect Tag183 (r'\(\*!m2iso\+aglet\*\)', Comment.Special),184 # GNU Extensions Dialect Tag185 (r'\(\*!m2pim\+gm2\*\)', Comment.Special),186 # p1 Extensions Dialect Tag187 (r'\(\*!m2iso\+p1\*\)', Comment.Special),188 # XDS Extensions Dialect Tag189 (r'\(\*!m2iso\+xds\*\)', Comment.Special),190 ],191 'identifiers': [192 (r'([a-zA-Z_$][\w$]*)', Name),193 ],194 'prefixed_number_literals': [195 #196 # Base-2, whole number197 (r'0b[01]+(\'[01]+)*', Number.Bin),198 #199 # Base-16, whole number200 (r'0[ux][0-9A-F]+(\'[0-9A-F]+)*', Number.Hex),201 ],202 'plain_number_literals': [203 #204 # Base-10, real number with exponent205 (r'[0-9]+(\'[0-9]+)*' # integral part206 r'\.[0-9]+(\'[0-9]+)*' # fractional part207 r'[eE][+-]?[0-9]+(\'[0-9]+)*', # exponent208 Number.Float),209 #210 # Base-10, real number without exponent211 (r'[0-9]+(\'[0-9]+)*' # integral part212 r'\.[0-9]+(\'[0-9]+)*', # fractional part213 Number.Float),214 #215 # Base-10, whole number216 (r'[0-9]+(\'[0-9]+)*', Number.Integer),217 ],218 'suffixed_number_literals': [219 #220 # Base-8, whole number221 (r'[0-7]+B', Number.Oct),222 #223 # Base-8, character code224 (r'[0-7]+C', Number.Oct),225 #226 # Base-16, number227 (r'[0-9A-F]+H', Number.Hex),228 ],229 'string_literals': [230 (r'"(\\\\|\\[^\\]|[^"\\])*"', String.Double),231 (r"'(\\\\|\\[^\\]|[^'\\])*'", String.Single),232 ],233 'digraph_operators': [234 # Dot Product Operator235 (r'\*\.', Operator),236 # Array Concatenation Operator237 (r'\+>', Operator), # M2R10 + ObjM2238 # Inequality Operator239 (r'<>', Operator), # ISO + PIM240 # Less-Or-Equal, Subset241 (r'<=', Operator),242 # Greater-Or-Equal, Superset243 (r'>=', Operator),244 # Identity Operator245 (r'==', Operator), # M2R10 + ObjM2246 # Type Conversion Operator247 (r'::', Operator), # M2R10 + ObjM2248 # Assignment Symbol249 (r':=', Operator),250 # Postfix Increment Mutator251 (r'\+\+', Operator), # M2R10 + ObjM2252 # Postfix Decrement Mutator253 (r'--', Operator), # M2R10 + ObjM2254 ],255 'unigraph_operators': [256 # Arithmetic Operators257 (r'[+-]', Operator),258 (r'[*/]', Operator),259 # ISO 80000-2 compliant Set Difference Operator260 (r'\\', Operator), # M2R10 + ObjM2261 # Relational Operators262 (r'[=#<>]', Operator),263 # Dereferencing Operator264 (r'\^', Operator),265 # Dereferencing Operator Synonym266 (r'@', Operator), # ISO267 # Logical AND Operator Synonym268 (r'&', Operator), # PIM + ISO269 # Logical NOT Operator Synonym270 (r'~', Operator), # PIM + ISO271 # Smalltalk Message Prefix272 (r'`', Operator), # ObjM2273 ],274 'digraph_punctuation': [275 # Range Constructor276 (r'\.\.', Punctuation),277 # Opening Chevron Bracket278 (r'<<', Punctuation), # M2R10 + ISO279 # Closing Chevron Bracket280 (r'>>', Punctuation), # M2R10 + ISO281 # Blueprint Punctuation282 (r'->', Punctuation), # M2R10 + ISO283 # Distinguish |# and # in M2 R10284 (r'\|#', Punctuation),285 # Distinguish ## and # in M2 R10286 (r'##', Punctuation),287 # Distinguish |* and * in M2 R10288 (r'\|\*', Punctuation),289 ],290 'unigraph_punctuation': [291 # Common Punctuation292 (r'[()\[\]{},.:;|]', Punctuation),293 # Case Label Separator Synonym294 (r'!', Punctuation), # ISO295 # Blueprint Punctuation296 (r'\?', Punctuation), # M2R10 + ObjM2297 ],298 'comments': [299 # Single Line Comment300 (r'^//.*?\n', Comment.Single), # M2R10 + ObjM2301 # Block Comment302 (r'\(\*([^$].*?)\*\)', Comment.Multiline),303 # Template Block Comment304 (r'/\*(.*?)\*/', Comment.Multiline), # M2R10 + ObjM2305 ],306 'pragmas': [307 # ISO Style Pragmas308 (r'<\*.*?\*>', Comment.Preproc), # ISO, M2R10 + ObjM2309 # Pascal Style Pragmas310 (r'\(\*\$.*?\*\)', Comment.Preproc), # PIM311 ],312 'root': [313 include('whitespace'),314 include('dialecttags'),315 include('pragmas'),316 include('comments'),317 include('identifiers'),318 include('suffixed_number_literals'), # PIM + ISO319 include('prefixed_number_literals'), # M2R10 + ObjM2320 include('plain_number_literals'),321 include('string_literals'),322 include('digraph_punctuation'),323 include('digraph_operators'),324 include('unigraph_punctuation'),325 include('unigraph_operators'),326 ]327 }328 329# C o m m o n D a t a s e t s330 331 # Common Reserved Words Dataset332 common_reserved_words = (333 # 37 common reserved words334 'AND', 'ARRAY', 'BEGIN', 'BY', 'CASE', 'CONST', 'DEFINITION', 'DIV',335 'DO', 'ELSE', 'ELSIF', 'END', 'EXIT', 'FOR', 'FROM', 'IF',336 'IMPLEMENTATION', 'IMPORT', 'IN', 'LOOP', 'MOD', 'MODULE', 'NOT',337 'OF', 'OR', 'POINTER', 'PROCEDURE', 'RECORD', 'REPEAT', 'RETURN',338 'SET', 'THEN', 'TO', 'TYPE', 'UNTIL', 'VAR', 'WHILE',339 )340 341 # Common Builtins Dataset342 common_builtins = (343 # 16 common builtins344 'ABS', 'BOOLEAN', 'CARDINAL', 'CHAR', 'CHR', 'FALSE', 'INTEGER',345 'LONGINT', 'LONGREAL', 'MAX', 'MIN', 'NIL', 'ODD', 'ORD', 'REAL',346 'TRUE',347 )348 349 # Common Pseudo-Module Builtins Dataset350 common_pseudo_builtins = (351 # 4 common pseudo builtins352 'ADDRESS', 'BYTE', 'WORD', 'ADR'353 )354 355# P I M M o d u l a - 2 D a t a s e t s356 357 # Lexemes to Mark as Error Tokens for PIM Modula-2358 pim_lexemes_to_reject = (359 '!', '`', '@', '$', '%', '?', '\\', '==', '++', '--', '::', '*.',360 '+>', '->', '<<', '>>', '|#', '##',361 )362 363 # PIM Modula-2 Additional Reserved Words Dataset364 pim_additional_reserved_words = (365 # 3 additional reserved words366 'EXPORT', 'QUALIFIED', 'WITH',367 )368 369 # PIM Modula-2 Additional Builtins Dataset370 pim_additional_builtins = (371 # 16 additional builtins372 'BITSET', 'CAP', 'DEC', 'DISPOSE', 'EXCL', 'FLOAT', 'HALT', 'HIGH',373 'INC', 'INCL', 'NEW', 'NIL', 'PROC', 'SIZE', 'TRUNC', 'VAL',374 )375 376 # PIM Modula-2 Additional Pseudo-Module Builtins Dataset377 pim_additional_pseudo_builtins = (378 # 5 additional pseudo builtins379 'SYSTEM', 'PROCESS', 'TSIZE', 'NEWPROCESS', 'TRANSFER',380 )381 382# I S O M o d u l a - 2 D a t a s e t s383 384 # Lexemes to Mark as Error Tokens for ISO Modula-2385 iso_lexemes_to_reject = (386 '`', '$', '%', '?', '\\', '==', '++', '--', '::', '*.', '+>', '->',387 '<<', '>>', '|#', '##',388 )389 390 # ISO Modula-2 Additional Reserved Words Dataset391 iso_additional_reserved_words = (392 # 9 additional reserved words (ISO 10514-1)393 'EXCEPT', 'EXPORT', 'FINALLY', 'FORWARD', 'PACKEDSET', 'QUALIFIED',394 'REM', 'RETRY', 'WITH',395 # 10 additional reserved words (ISO 10514-2 & ISO 10514-3)396 'ABSTRACT', 'AS', 'CLASS', 'GUARD', 'INHERIT', 'OVERRIDE', 'READONLY',397 'REVEAL', 'TRACED', 'UNSAFEGUARDED',398 )399 400 # ISO Modula-2 Additional Builtins Dataset401 iso_additional_builtins = (402 # 26 additional builtins (ISO 10514-1)403 'BITSET', 'CAP', 'CMPLX', 'COMPLEX', 'DEC', 'DISPOSE', 'EXCL', 'FLOAT',404 'HALT', 'HIGH', 'IM', 'INC', 'INCL', 'INT', 'INTERRUPTIBLE', 'LENGTH',405 'LFLOAT', 'LONGCOMPLEX', 'NEW', 'PROC', 'PROTECTION', 'RE', 'SIZE',406 'TRUNC', 'UNINTERRUBTIBLE', 'VAL',407 # 5 additional builtins (ISO 10514-2 & ISO 10514-3)408 'CREATE', 'DESTROY', 'EMPTY', 'ISMEMBER', 'SELF',409 )410 411 # ISO Modula-2 Additional Pseudo-Module Builtins Dataset412 iso_additional_pseudo_builtins = (413 # 14 additional builtins (SYSTEM)414 'SYSTEM', 'BITSPERLOC', 'LOCSPERBYTE', 'LOCSPERWORD', 'LOC',415 'ADDADR', 'SUBADR', 'DIFADR', 'MAKEADR', 'ADR',416 'ROTATE', 'SHIFT', 'CAST', 'TSIZE',417 # 13 additional builtins (COROUTINES)418 'COROUTINES', 'ATTACH', 'COROUTINE', 'CURRENT', 'DETACH', 'HANDLER',419 'INTERRUPTSOURCE', 'IOTRANSFER', 'IsATTACHED', 'LISTEN',420 'NEWCOROUTINE', 'PROT', 'TRANSFER',421 # 9 additional builtins (EXCEPTIONS)422 'EXCEPTIONS', 'AllocateSource', 'CurrentNumber', 'ExceptionNumber',423 'ExceptionSource', 'GetMessage', 'IsCurrentSource',424 'IsExceptionalExecution', 'RAISE',425 # 3 additional builtins (TERMINATION)426 'TERMINATION', 'IsTerminating', 'HasHalted',427 # 4 additional builtins (M2EXCEPTION)428 'M2EXCEPTION', 'M2Exceptions', 'M2Exception', 'IsM2Exception',429 'indexException', 'rangeException', 'caseSelectException',430 'invalidLocation', 'functionException', 'wholeValueException',431 'wholeDivException', 'realValueException', 'realDivException',432 'complexValueException', 'complexDivException', 'protException',433 'sysException', 'coException', 'exException',434 )435 436# M o d u l a - 2 R 1 0 D a t a s e t s437 438 # Lexemes to Mark as Error Tokens for Modula-2 R10439 m2r10_lexemes_to_reject = (440 '!', '`', '@', '$', '%', '&', '<>',441 )442 443 # Modula-2 R10 reserved words in addition to the common set444 m2r10_additional_reserved_words = (445 # 12 additional reserved words446 'ALIAS', 'ARGLIST', 'BLUEPRINT', 'COPY', 'GENLIB', 'INDETERMINATE',447 'NEW', 'NONE', 'OPAQUE', 'REFERENTIAL', 'RELEASE', 'RETAIN',448 # 2 additional reserved words with symbolic assembly option449 'ASM', 'REG',450 )451 452 # Modula-2 R10 builtins in addition to the common set453 m2r10_additional_builtins = (454 # 26 additional builtins455 'CARDINAL', 'COUNT', 'EMPTY', 'EXISTS', 'INSERT', 'LENGTH', 'LONGCARD',456 'OCTET', 'PTR', 'PRED', 'READ', 'READNEW', 'REMOVE', 'RETRIEVE', 'SORT',457 'STORE', 'SUBSET', 'SUCC', 'TLIMIT', 'TMAX', 'TMIN', 'TRUE', 'TSIZE',458 'UNICHAR', 'WRITE', 'WRITEF',459 )460 461 # Modula-2 R10 Additional Pseudo-Module Builtins Dataset462 m2r10_additional_pseudo_builtins = (463 # 13 additional builtins (TPROPERTIES)464 'TPROPERTIES', 'PROPERTY', 'LITERAL', 'TPROPERTY', 'TLITERAL',465 'TBUILTIN', 'TDYN', 'TREFC', 'TNIL', 'TBASE', 'TPRECISION',466 'TMAXEXP', 'TMINEXP',467 # 4 additional builtins (CONVERSION)468 'CONVERSION', 'TSXFSIZE', 'SXF', 'VAL',469 # 35 additional builtins (UNSAFE)470 'UNSAFE', 'CAST', 'INTRINSIC', 'AVAIL', 'ADD', 'SUB', 'ADDC', 'SUBC',471 'FETCHADD', 'FETCHSUB', 'SHL', 'SHR', 'ASHR', 'ROTL', 'ROTR', 'ROTLC',472 'ROTRC', 'BWNOT', 'BWAND', 'BWOR', 'BWXOR', 'BWNAND', 'BWNOR',473 'SETBIT', 'TESTBIT', 'LSBIT', 'MSBIT', 'CSBITS', 'BAIL', 'HALT',474 'TODO', 'FFI', 'ADDR', 'VARGLIST', 'VARGC',475 # 11 additional builtins (ATOMIC)476 'ATOMIC', 'INTRINSIC', 'AVAIL', 'SWAP', 'CAS', 'INC', 'DEC', 'BWAND',477 'BWNAND', 'BWOR', 'BWXOR',478 # 7 additional builtins (COMPILER)479 'COMPILER', 'DEBUG', 'MODNAME', 'PROCNAME', 'LINENUM', 'DEFAULT',480 'HASH',481 # 5 additional builtins (ASSEMBLER)482 'ASSEMBLER', 'REGISTER', 'SETREG', 'GETREG', 'CODE',483 )484 485# O b j e c t i v e M o d u l a - 2 D a t a s e t s486 487 # Lexemes to Mark as Error Tokens for Objective Modula-2488 objm2_lexemes_to_reject = (489 '!', '$', '%', '&', '<>',490 )491 492 # Objective Modula-2 Extensions493 # reserved words in addition to Modula-2 R10494 objm2_additional_reserved_words = (495 # 16 additional reserved words496 'BYCOPY', 'BYREF', 'CLASS', 'CONTINUE', 'CRITICAL', 'INOUT', 'METHOD',497 'ON', 'OPTIONAL', 'OUT', 'PRIVATE', 'PROTECTED', 'PROTOCOL', 'PUBLIC',498 'SUPER', 'TRY',499 )500 501 # Objective Modula-2 Extensions502 # builtins in addition to Modula-2 R10503 objm2_additional_builtins = (504 # 3 additional builtins505 'OBJECT', 'NO', 'YES',506 )507 508 # Objective Modula-2 Extensions509 # pseudo-module builtins in addition to Modula-2 R10510 objm2_additional_pseudo_builtins = (511 # None512 )513 514# A g l e t M o d u l a - 2 D a t a s e t s515 516 # Aglet Extensions517 # reserved words in addition to ISO Modula-2518 aglet_additional_reserved_words = (519 # None520 )521 522 # Aglet Extensions523 # builtins in addition to ISO Modula-2524 aglet_additional_builtins = (525 # 9 additional builtins526 'BITSET8', 'BITSET16', 'BITSET32', 'CARDINAL8', 'CARDINAL16',527 'CARDINAL32', 'INTEGER8', 'INTEGER16', 'INTEGER32',528 )529 530 # Aglet Modula-2 Extensions531 # pseudo-module builtins in addition to ISO Modula-2532 aglet_additional_pseudo_builtins = (533 # None534 )535 536# G N U M o d u l a - 2 D a t a s e t s537 538 # GNU Extensions539 # reserved words in addition to PIM Modula-2540 gm2_additional_reserved_words = (541 # 10 additional reserved words542 'ASM', '__ATTRIBUTE__', '__BUILTIN__', '__COLUMN__', '__DATE__',543 '__FILE__', '__FUNCTION__', '__LINE__', '__MODULE__', 'VOLATILE',544 )545 546 # GNU Extensions547 # builtins in addition to PIM Modula-2548 gm2_additional_builtins = (549 # 21 additional builtins550 'BITSET8', 'BITSET16', 'BITSET32', 'CARDINAL8', 'CARDINAL16',551 'CARDINAL32', 'CARDINAL64', 'COMPLEX32', 'COMPLEX64', 'COMPLEX96',552 'COMPLEX128', 'INTEGER8', 'INTEGER16', 'INTEGER32', 'INTEGER64',553 'REAL8', 'REAL16', 'REAL32', 'REAL96', 'REAL128', 'THROW',554 )555 556 # GNU Extensions557 # pseudo-module builtins in addition to PIM Modula-2558 gm2_additional_pseudo_builtins = (559 # None560 )561 562# p 1 M o d u l a - 2 D a t a s e t s563 564 # p1 Extensions565 # reserved words in addition to ISO Modula-2566 p1_additional_reserved_words = (567 # None568 )569 570 # p1 Extensions571 # builtins in addition to ISO Modula-2572 p1_additional_builtins = (573 # None574 )575 576 # p1 Modula-2 Extensions577 # pseudo-module builtins in addition to ISO Modula-2578 p1_additional_pseudo_builtins = (579 # 1 additional builtin580 'BCD',581 )582 583# X D S M o d u l a - 2 D a t a s e t s584 585 # XDS Extensions586 # reserved words in addition to ISO Modula-2587 xds_additional_reserved_words = (588 # 1 additional reserved word589 'SEQ',590 )591 592 # XDS Extensions593 # builtins in addition to ISO Modula-2594 xds_additional_builtins = (595 # 9 additional builtins596 'ASH', 'ASSERT', 'DIFFADR_TYPE', 'ENTIER', 'INDEX', 'LEN',597 'LONGCARD', 'SHORTCARD', 'SHORTINT',598 )599 600 # XDS Modula-2 Extensions601 # pseudo-module builtins in addition to ISO Modula-2602 xds_additional_pseudo_builtins = (603 # 22 additional builtins (SYSTEM)604 'PROCESS', 'NEWPROCESS', 'BOOL8', 'BOOL16', 'BOOL32', 'CARD8',605 'CARD16', 'CARD32', 'INT8', 'INT16', 'INT32', 'REF', 'MOVE',606 'FILL', 'GET', 'PUT', 'CC', 'int', 'unsigned', 'size_t', 'void'607 # 3 additional builtins (COMPILER)608 'COMPILER', 'OPTION', 'EQUATION'609 )610 611# P I M S t a n d a r d L i b r a r y D a t a s e t s612 613 # PIM Modula-2 Standard Library Modules Dataset614 pim_stdlib_module_identifiers = (615 'Terminal', 'FileSystem', 'InOut', 'RealInOut', 'MathLib0', 'Storage',616 )617 618 # PIM Modula-2 Standard Library Types Dataset619 pim_stdlib_type_identifiers = (620 'Flag', 'FlagSet', 'Response', 'Command', 'Lock', 'Permission',621 'MediumType', 'File', 'FileProc', 'DirectoryProc', 'FileCommand',622 'DirectoryCommand',623 )624 625 # PIM Modula-2 Standard Library Procedures Dataset626 pim_stdlib_proc_identifiers = (627 'Read', 'BusyRead', 'ReadAgain', 'Write', 'WriteString', 'WriteLn',628 'Create', 'Lookup', 'Close', 'Delete', 'Rename', 'SetRead', 'SetWrite',629 'SetModify', 'SetOpen', 'Doio', 'SetPos', 'GetPos', 'Length', 'Reset',630 'Again', 'ReadWord', 'WriteWord', 'ReadChar', 'WriteChar',631 'CreateMedium', 'DeleteMedium', 'AssignName', 'DeassignName',632 'ReadMedium', 'LookupMedium', 'OpenInput', 'OpenOutput', 'CloseInput',633 'CloseOutput', 'ReadString', 'ReadInt', 'ReadCard', 'ReadWrd',634 'WriteInt', 'WriteCard', 'WriteOct', 'WriteHex', 'WriteWrd',635 'ReadReal', 'WriteReal', 'WriteFixPt', 'WriteRealOct', 'sqrt', 'exp',636 'ln', 'sin', 'cos', 'arctan', 'entier', 'ALLOCATE', 'DEALLOCATE',637 )638 639 # PIM Modula-2 Standard Library Variables Dataset640 pim_stdlib_var_identifiers = (641 'Done', 'termCH', 'in', 'out'642 )643 644 # PIM Modula-2 Standard Library Constants Dataset645 pim_stdlib_const_identifiers = (646 'EOL',647 )648 649# I S O S t a n d a r d L i b r a r y D a t a s e t s650 651 # ISO Modula-2 Standard Library Modules Dataset652 iso_stdlib_module_identifiers = (653 # TO DO654 )655 656 # ISO Modula-2 Standard Library Types Dataset657 iso_stdlib_type_identifiers = (658 # TO DO659 )660 661 # ISO Modula-2 Standard Library Procedures Dataset662 iso_stdlib_proc_identifiers = (663 # TO DO664 )665 666 # ISO Modula-2 Standard Library Variables Dataset667 iso_stdlib_var_identifiers = (668 # TO DO669 )670 671 # ISO Modula-2 Standard Library Constants Dataset672 iso_stdlib_const_identifiers = (673 # TO DO674 )675 676# M 2 R 1 0 S t a n d a r d L i b r a r y D a t a s e t s677 678 # Modula-2 R10 Standard Library ADTs Dataset679 m2r10_stdlib_adt_identifiers = (680 'BCD', 'LONGBCD', 'BITSET', 'SHORTBITSET', 'LONGBITSET',681 'LONGLONGBITSET', 'COMPLEX', 'LONGCOMPLEX', 'SHORTCARD', 'LONGLONGCARD',682 'SHORTINT', 'LONGLONGINT', 'POSINT', 'SHORTPOSINT', 'LONGPOSINT',683 'LONGLONGPOSINT', 'BITSET8', 'BITSET16', 'BITSET32', 'BITSET64',684 'BITSET128', 'BS8', 'BS16', 'BS32', 'BS64', 'BS128', 'CARDINAL8',685 'CARDINAL16', 'CARDINAL32', 'CARDINAL64', 'CARDINAL128', 'CARD8',686 'CARD16', 'CARD32', 'CARD64', 'CARD128', 'INTEGER8', 'INTEGER16',687 'INTEGER32', 'INTEGER64', 'INTEGER128', 'INT8', 'INT16', 'INT32',688 'INT64', 'INT128', 'STRING', 'UNISTRING',689 )690 691 # Modula-2 R10 Standard Library Blueprints Dataset692 m2r10_stdlib_blueprint_identifiers = (693 'ProtoRoot', 'ProtoComputational', 'ProtoNumeric', 'ProtoScalar',694 'ProtoNonScalar', 'ProtoCardinal', 'ProtoInteger', 'ProtoReal',695 'ProtoComplex', 'ProtoVector', 'ProtoTuple', 'ProtoCompArray',696 'ProtoCollection', 'ProtoStaticArray', 'ProtoStaticSet',697 'ProtoStaticString', 'ProtoArray', 'ProtoString', 'ProtoSet',698 'ProtoMultiSet', 'ProtoDictionary', 'ProtoMultiDict', 'ProtoExtension',699 'ProtoIO', 'ProtoCardMath', 'ProtoIntMath', 'ProtoRealMath',700 )701 702 # Modula-2 R10 Standard Library Modules Dataset703 m2r10_stdlib_module_identifiers = (704 'ASCII', 'BooleanIO', 'CharIO', 'UnicharIO', 'OctetIO',705 'CardinalIO', 'LongCardIO', 'IntegerIO', 'LongIntIO', 'RealIO',706 'LongRealIO', 'BCDIO', 'LongBCDIO', 'CardMath', 'LongCardMath',707 'IntMath', 'LongIntMath', 'RealMath', 'LongRealMath', 'BCDMath',708 'LongBCDMath', 'FileIO', 'FileSystem', 'Storage', 'IOSupport',709 )710 711 # Modula-2 R10 Standard Library Types Dataset712 m2r10_stdlib_type_identifiers = (713 'File', 'Status',714 # TO BE COMPLETED715 )716 717 # Modula-2 R10 Standard Library Procedures Dataset718 m2r10_stdlib_proc_identifiers = (719 'ALLOCATE', 'DEALLOCATE', 'SIZE',720 # TO BE COMPLETED721 )722 723 # Modula-2 R10 Standard Library Variables Dataset724 m2r10_stdlib_var_identifiers = (725 'stdIn', 'stdOut', 'stdErr',726 )727 728 # Modula-2 R10 Standard Library Constants Dataset729 m2r10_stdlib_const_identifiers = (730 'pi', 'tau',731 )732 733# D i a l e c t s734 735 # Dialect modes736 dialects = (737 'unknown',738 'm2pim', 'm2iso', 'm2r10', 'objm2',739 'm2iso+aglet', 'm2pim+gm2', 'm2iso+p1', 'm2iso+xds',740 )741 742# D a t a b a s e s743 744 # Lexemes to Mark as Errors Database745 lexemes_to_reject_db = {746 # Lexemes to reject for unknown dialect747 'unknown': (748 # LEAVE THIS EMPTY749 ),750 # Lexemes to reject for PIM Modula-2751 'm2pim': (752 pim_lexemes_to_reject,753 ),754 # Lexemes to reject for ISO Modula-2755 'm2iso': (756 iso_lexemes_to_reject,757 ),758 # Lexemes to reject for Modula-2 R10759 'm2r10': (760 m2r10_lexemes_to_reject,761 ),762 # Lexemes to reject for Objective Modula-2763 'objm2': (764 objm2_lexemes_to_reject,765 ),766 # Lexemes to reject for Aglet Modula-2767 'm2iso+aglet': (768 iso_lexemes_to_reject,769 ),770 # Lexemes to reject for GNU Modula-2771 'm2pim+gm2': (772 pim_lexemes_to_reject,773 ),774 # Lexemes to reject for p1 Modula-2775 'm2iso+p1': (776 iso_lexemes_to_reject,777 ),778 # Lexemes to reject for XDS Modula-2779 'm2iso+xds': (780 iso_lexemes_to_reject,781 ),782 }783 784 # Reserved Words Database785 reserved_words_db = {786 # Reserved words for unknown dialect787 'unknown': (788 common_reserved_words,789 pim_additional_reserved_words,790 iso_additional_reserved_words,791 m2r10_additional_reserved_words,792 ),793 794 # Reserved words for PIM Modula-2795 'm2pim': (796 common_reserved_words,797 pim_additional_reserved_words,798 ),799 800 # Reserved words for Modula-2 R10801 'm2iso': (802 common_reserved_words,803 iso_additional_reserved_words,804 ),805 806 # Reserved words for ISO Modula-2807 'm2r10': (808 common_reserved_words,809 m2r10_additional_reserved_words,810 ),811 812 # Reserved words for Objective Modula-2813 'objm2': (814 common_reserved_words,815 m2r10_additional_reserved_words,816 objm2_additional_reserved_words,817 ),818 819 # Reserved words for Aglet Modula-2 Extensions820 'm2iso+aglet': (821 common_reserved_words,822 iso_additional_reserved_words,823 aglet_additional_reserved_words,824 ),825 826 # Reserved words for GNU Modula-2 Extensions827 'm2pim+gm2': (828 common_reserved_words,829 pim_additional_reserved_words,830 gm2_additional_reserved_words,831 ),832 833 # Reserved words for p1 Modula-2 Extensions834 'm2iso+p1': (835 common_reserved_words,836 iso_additional_reserved_words,837 p1_additional_reserved_words,838 ),839 840 # Reserved words for XDS Modula-2 Extensions841 'm2iso+xds': (842 common_reserved_words,843 iso_additional_reserved_words,844 xds_additional_reserved_words,845 ),846 }847 848 # Builtins Database849 builtins_db = {850 # Builtins for unknown dialect851 'unknown': (852 common_builtins,853 pim_additional_builtins,854 iso_additional_builtins,855 m2r10_additional_builtins,856 ),857 858 # Builtins for PIM Modula-2859 'm2pim': (860 common_builtins,861 pim_additional_builtins,862 ),863 864 # Builtins for ISO Modula-2865 'm2iso': (866 common_builtins,867 iso_additional_builtins,868 ),869 870 # Builtins for ISO Modula-2871 'm2r10': (872 common_builtins,873 m2r10_additional_builtins,874 ),875 876 # Builtins for Objective Modula-2877 'objm2': (878 common_builtins,879 m2r10_additional_builtins,880 objm2_additional_builtins,881 ),882 883 # Builtins for Aglet Modula-2 Extensions884 'm2iso+aglet': (885 common_builtins,886 iso_additional_builtins,887 aglet_additional_builtins,888 ),889 890 # Builtins for GNU Modula-2 Extensions891 'm2pim+gm2': (892 common_builtins,893 pim_additional_builtins,894 gm2_additional_builtins,895 ),896 897 # Builtins for p1 Modula-2 Extensions898 'm2iso+p1': (899 common_builtins,900 iso_additional_builtins,901 p1_additional_builtins,902 ),903 904 # Builtins for XDS Modula-2 Extensions905 'm2iso+xds': (906 common_builtins,907 iso_additional_builtins,908 xds_additional_builtins,909 ),910 }911 912 # Pseudo-Module Builtins Database913 pseudo_builtins_db = {914 # Builtins for unknown dialect915 'unknown': (916 common_pseudo_builtins,917 pim_additional_pseudo_builtins,918 iso_additional_pseudo_builtins,919 m2r10_additional_pseudo_builtins,920 ),921 922 # Builtins for PIM Modula-2923 'm2pim': (924 common_pseudo_builtins,925 pim_additional_pseudo_builtins,926 ),927 928 # Builtins for ISO Modula-2929 'm2iso': (930 common_pseudo_builtins,931 iso_additional_pseudo_builtins,932 ),933 934 # Builtins for ISO Modula-2935 'm2r10': (936 common_pseudo_builtins,937 m2r10_additional_pseudo_builtins,938 ),939 940 # Builtins for Objective Modula-2941 'objm2': (942 common_pseudo_builtins,943 m2r10_additional_pseudo_builtins,944 objm2_additional_pseudo_builtins,945 ),946 947 # Builtins for Aglet Modula-2 Extensions948 'm2iso+aglet': (949 common_pseudo_builtins,950 iso_additional_pseudo_builtins,951 aglet_additional_pseudo_builtins,952 ),953 954 # Builtins for GNU Modula-2 Extensions955 'm2pim+gm2': (956 common_pseudo_builtins,957 pim_additional_pseudo_builtins,958 gm2_additional_pseudo_builtins,959 ),960 961 # Builtins for p1 Modula-2 Extensions962 'm2iso+p1': (963 common_pseudo_builtins,964 iso_additional_pseudo_builtins,965 p1_additional_pseudo_builtins,966 ),967 968 # Builtins for XDS Modula-2 Extensions969 'm2iso+xds': (970 common_pseudo_builtins,971 iso_additional_pseudo_builtins,972 xds_additional_pseudo_builtins,973 ),974 }975 976 # Standard Library ADTs Database977 stdlib_adts_db = {978 # Empty entry for unknown dialect979 'unknown': (980 # LEAVE THIS EMPTY981 ),982 # Standard Library ADTs for PIM Modula-2983 'm2pim': (984 # No first class library types985 ),986 987 # Standard Library ADTs for ISO Modula-2988 'm2iso': (989 # No first class library types990 ),991 992 # Standard Library ADTs for Modula-2 R10993 'm2r10': (994 m2r10_stdlib_adt_identifiers,995 ),996 997 # Standard Library ADTs for Objective Modula-2998 'objm2': (999 m2r10_stdlib_adt_identifiers,1000 ),1001 1002 # Standard Library ADTs for Aglet Modula-21003 'm2iso+aglet': (1004 # No first class library types1005 ),1006 1007 # Standard Library ADTs for GNU Modula-21008 'm2pim+gm2': (1009 # No first class library types1010 ),1011 1012 # Standard Library ADTs for p1 Modula-21013 'm2iso+p1': (1014 # No first class library types1015 ),1016 1017 # Standard Library ADTs for XDS Modula-21018 'm2iso+xds': (1019 # No first class library types1020 ),1021 }1022 1023 # Standard Library Modules Database1024 stdlib_modules_db = {1025 # Empty entry for unknown dialect1026 'unknown': (1027 # LEAVE THIS EMPTY1028 ),1029 # Standard Library Modules for PIM Modula-21030 'm2pim': (1031 pim_stdlib_module_identifiers,1032 ),1033 1034 # Standard Library Modules for ISO Modula-21035 'm2iso': (1036 iso_stdlib_module_identifiers,1037 ),1038 1039 # Standard Library Modules for Modula-2 R101040 'm2r10': (1041 m2r10_stdlib_blueprint_identifiers,1042 m2r10_stdlib_module_identifiers,1043 m2r10_stdlib_adt_identifiers,1044 ),1045 1046 # Standard Library Modules for Objective Modula-21047 'objm2': (1048 m2r10_stdlib_blueprint_identifiers,1049 m2r10_stdlib_module_identifiers,1050 ),1051 1052 # Standard Library Modules for Aglet Modula-21053 'm2iso+aglet': (1054 iso_stdlib_module_identifiers,1055 ),1056 1057 # Standard Library Modules for GNU Modula-21058 'm2pim+gm2': (1059 pim_stdlib_module_identifiers,1060 ),1061 1062 # Standard Library Modules for p1 Modula-21063 'm2iso+p1': (1064 iso_stdlib_module_identifiers,1065 ),1066 1067 # Standard Library Modules for XDS Modula-21068 'm2iso+xds': (1069 iso_stdlib_module_identifiers,1070 ),1071 }1072 1073 # Standard Library Types Database1074 stdlib_types_db = {1075 # Empty entry for unknown dialect1076 'unknown': (1077 # LEAVE THIS EMPTY1078 ),1079 # Standard Library Types for PIM Modula-21080 'm2pim': (1081 pim_stdlib_type_identifiers,1082 ),1083 1084 # Standard Library Types for ISO Modula-21085 'm2iso': (1086 iso_stdlib_type_identifiers,1087 ),1088 1089 # Standard Library Types for Modula-2 R101090 'm2r10': (1091 m2r10_stdlib_type_identifiers,1092 ),1093 1094 # Standard Library Types for Objective Modula-21095 'objm2': (1096 m2r10_stdlib_type_identifiers,1097 ),1098 1099 # Standard Library Types for Aglet Modula-21100 'm2iso+aglet': (1101 iso_stdlib_type_identifiers,1102 ),1103 1104 # Standard Library Types for GNU Modula-21105 'm2pim+gm2': (1106 pim_stdlib_type_identifiers,1107 ),1108 1109 # Standard Library Types for p1 Modula-21110 'm2iso+p1': (1111 iso_stdlib_type_identifiers,1112 ),1113 1114 # Standard Library Types for XDS Modula-21115 'm2iso+xds': (1116 iso_stdlib_type_identifiers,1117 ),1118 }1119 1120 # Standard Library Procedures Database1121 stdlib_procedures_db = {1122 # Empty entry for unknown dialect1123 'unknown': (1124 # LEAVE THIS EMPTY1125 ),1126 # Standard Library Procedures for PIM Modula-21127 'm2pim': (1128 pim_stdlib_proc_identifiers,1129 ),1130 1131 # Standard Library Procedures for ISO Modula-21132 'm2iso': (1133 iso_stdlib_proc_identifiers,1134 ),1135 1136 # Standard Library Procedures for Modula-2 R101137 'm2r10': (1138 m2r10_stdlib_proc_identifiers,1139 ),1140 1141 # Standard Library Procedures for Objective Modula-21142 'objm2': (1143 m2r10_stdlib_proc_identifiers,1144 ),1145 1146 # Standard Library Procedures for Aglet Modula-21147 'm2iso+aglet': (1148 iso_stdlib_proc_identifiers,1149 ),1150 1151 # Standard Library Procedures for GNU Modula-21152 'm2pim+gm2': (1153 pim_stdlib_proc_identifiers,1154 ),1155 1156 # Standard Library Procedures for p1 Modula-21157 'm2iso+p1': (1158 iso_stdlib_proc_identifiers,1159 ),1160 1161 # Standard Library Procedures for XDS Modula-21162 'm2iso+xds': (1163 iso_stdlib_proc_identifiers,1164 ),1165 }1166 1167 # Standard Library Variables Database1168 stdlib_variables_db = {1169 # Empty entry for unknown dialect1170 'unknown': (1171 # LEAVE THIS EMPTY1172 ),1173 # Standard Library Variables for PIM Modula-21174 'm2pim': (1175 pim_stdlib_var_identifiers,1176 ),1177 1178 # Standard Library Variables for ISO Modula-21179 'm2iso': (1180 iso_stdlib_var_identifiers,1181 ),1182 1183 # Standard Library Variables for Modula-2 R101184 'm2r10': (1185 m2r10_stdlib_var_identifiers,1186 ),1187 1188 # Standard Library Variables for Objective Modula-21189 'objm2': (1190 m2r10_stdlib_var_identifiers,1191 ),1192 1193 # Standard Library Variables for Aglet Modula-21194 'm2iso+aglet': (1195 iso_stdlib_var_identifiers,1196 ),1197 1198 # Standard Library Variables for GNU Modula-21199 'm2pim+gm2': (1200 pim_stdlib_var_identifiers,