eric6/ThirdParty/Pygments/pygments/lexers/forth.py

changeset 7701
25f42e208e08
parent 7547
21b0534faebc
child 7983
54c5cfbb1e29
equal deleted inserted replaced
7700:a3cf077a8db3 7701:25f42e208e08
3 pygments.lexers.forth 3 pygments.lexers.forth
4 ~~~~~~~~~~~~~~~~~~~~~ 4 ~~~~~~~~~~~~~~~~~~~~~
5 5
6 Lexer for the Forth language. 6 Lexer for the Forth language.
7 7
8 :copyright: Copyright 2006-2019 by the Pygments team, see AUTHORS. 8 :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS.
9 :license: BSD, see LICENSE for details. 9 :license: BSD, see LICENSE for details.
10 """ 10 """
11 11
12 import re 12 import re
13 13
14 from pygments.lexer import RegexLexer, include, bygroups 14 from pygments.lexer import RegexLexer, bygroups
15 from pygments.token import Error, Punctuation, Literal, Token, \ 15 from pygments.token import Text, Comment, Keyword, Name, String, Number
16 Text, Comment, Operator, Keyword, Name, String, Number, Generic
17 16
18 17
19 __all__ = ['ForthLexer'] 18 __all__ = ['ForthLexer']
20 19
21 20
27 """ 26 """
28 name = 'Forth' 27 name = 'Forth'
29 aliases = ['forth'] 28 aliases = ['forth']
30 filenames = ['*.frt', '*.fs'] 29 filenames = ['*.frt', '*.fs']
31 mimetypes = ['application/x-forth'] 30 mimetypes = ['application/x-forth']
32
33 delimiter = r'\s'
34 delimiter_end = r'(?=[%s])' % delimiter
35
36 valid_name_chars = r'[^%s]' % delimiter
37 valid_name = r"%s+%s" % (valid_name_chars, delimiter_end)
38 31
39 flags = re.IGNORECASE | re.MULTILINE 32 flags = re.IGNORECASE | re.MULTILINE
40 33
41 tokens = { 34 tokens = {
42 'root': [ 35 'root': [
69 r'r>|r@|recurse|repeat|rot|rshift|s\"|s>d|' 62 r'r>|r@|recurse|repeat|rot|rshift|s\"|s>d|'
70 r'sign|sm\/rem|source|space|spaces|state|swap|' 63 r'sign|sm\/rem|source|space|spaces|state|swap|'
71 r'then|type|u\.|u\<|um\*|um\/mod|unloop|until|' 64 r'then|type|u\.|u\<|um\*|um\/mod|unloop|until|'
72 r'variable|while|word|xor|\[char\]|\[\'\]|' 65 r'variable|while|word|xor|\[char\]|\[\'\]|'
73 r'@|!|\#|<\#|\#>|:|;|\+|-|\*|\/|,|<|>|\|1\+|1-|\.|' 66 r'@|!|\#|<\#|\#>|:|;|\+|-|\*|\/|,|<|>|\|1\+|1-|\.|'
74 # *** Wordset CORE-EXT 67 # *** Wordset CORE-EXT
75 r'\.r|0<>|' 68 r'\.r|0<>|'
76 r'0>|2>r|2r>|2r@|:noname|\?do|again|c\"|' 69 r'0>|2>r|2r>|2r@|:noname|\?do|again|c\"|'
77 r'case|compile,|endcase|endof|erase|false|' 70 r'case|compile,|endcase|endof|erase|false|'
78 r'hex|marker|nip|of|pad|parse|pick|refill|' 71 r'hex|marker|nip|of|pad|parse|pick|refill|'
79 r'restore-input|roll|save-input|source-id|to|' 72 r'restore-input|roll|save-input|source-id|to|'
80 r'true|tuck|u\.r|u>|unused|value|within|' 73 r'true|tuck|u\.r|u>|unused|value|within|'
81 r'\[compile\]|' 74 r'\[compile\]|'
82 # *** Wordset CORE-EXT-obsolescent 75 # *** Wordset CORE-EXT-obsolescent
83 r'\#tib|convert|expect|query|span|' 76 r'\#tib|convert|expect|query|span|'
84 r'tib|' 77 r'tib|'
85 # *** Wordset DOUBLE 78 # *** Wordset DOUBLE
86 r'2constant|2literal|2variable|d\+|d-|' 79 r'2constant|2literal|2variable|d\+|d-|'
87 r'd\.|d\.r|d0<|d0=|d2\*|d2\/|d<|d=|d>s|' 80 r'd\.|d\.r|d0<|d0=|d2\*|d2\/|d<|d=|d>s|'
88 r'dabs|dmax|dmin|dnegate|m\*\/|m\+|' 81 r'dabs|dmax|dmin|dnegate|m\*\/|m\+|'
89 # *** Wordset DOUBLE-EXT 82 # *** Wordset DOUBLE-EXT
90 r'2rot|du<|' 83 r'2rot|du<|'
91 # *** Wordset EXCEPTION 84 # *** Wordset EXCEPTION
92 r'catch|throw|' 85 r'catch|throw|'
93 # *** Wordset EXCEPTION-EXT 86 # *** Wordset EXCEPTION-EXT
94 r'abort|abort\"|' 87 r'abort|abort\"|'
95 # *** Wordset FACILITY 88 # *** Wordset FACILITY
96 r'at-xy|key\?|page|' 89 r'at-xy|key\?|page|'
97 # *** Wordset FACILITY-EXT 90 # *** Wordset FACILITY-EXT
98 r'ekey|ekey>char|ekey\?|emit\?|ms|time&date|' 91 r'ekey|ekey>char|ekey\?|emit\?|ms|time&date|'
99 # *** Wordset FILE 92 # *** Wordset FILE
100 r'BIN|CLOSE-FILE|CREATE-FILE|DELETE-FILE|FILE-POSITION|' 93 r'BIN|CLOSE-FILE|CREATE-FILE|DELETE-FILE|FILE-POSITION|'
101 r'FILE-SIZE|INCLUDE-FILE|INCLUDED|OPEN-FILE|R\/O|' 94 r'FILE-SIZE|INCLUDE-FILE|INCLUDED|OPEN-FILE|R\/O|'
102 r'R\/W|READ-FILE|READ-LINE|REPOSITION-FILE|RESIZE-FILE|' 95 r'R\/W|READ-FILE|READ-LINE|REPOSITION-FILE|RESIZE-FILE|'
103 r'S\"|SOURCE-ID|W/O|WRITE-FILE|WRITE-LINE|' 96 r'S\"|SOURCE-ID|W/O|WRITE-FILE|WRITE-LINE|'
104 # *** Wordset FILE-EXT 97 # *** Wordset FILE-EXT
105 r'FILE-STATUS|FLUSH-FILE|REFILL|RENAME-FILE|' 98 r'FILE-STATUS|FLUSH-FILE|REFILL|RENAME-FILE|'
106 # *** Wordset FLOAT 99 # *** Wordset FLOAT
107 r'>float|d>f|' 100 r'>float|d>f|'
108 r'f!|f\*|f\+|f-|f\/|f0<|f0=|f<|f>d|f@|' 101 r'f!|f\*|f\+|f-|f\/|f0<|f0=|f<|f>d|f@|'
109 r'falign|faligned|fconstant|fdepth|fdrop|fdup|' 102 r'falign|faligned|fconstant|fdepth|fdrop|fdup|'
110 r'fliteral|float\+|floats|floor|fmax|fmin|' 103 r'fliteral|float\+|floats|floor|fmax|fmin|'
111 r'fnegate|fover|frot|fround|fswap|fvariable|' 104 r'fnegate|fover|frot|fround|fswap|fvariable|'
112 r'represent|' 105 r'represent|'
113 # *** Wordset FLOAT-EXT 106 # *** Wordset FLOAT-EXT
114 r'df!|df@|dfalign|dfaligned|dfloat\+|' 107 r'df!|df@|dfalign|dfaligned|dfloat\+|'
115 r'dfloats|f\*\*|f\.|fabs|facos|facosh|falog|' 108 r'dfloats|f\*\*|f\.|fabs|facos|facosh|falog|'
116 r'fasin|fasinh|fatan|fatan2|fatanh|fcos|fcosh|' 109 r'fasin|fasinh|fatan|fatan2|fatanh|fcos|fcosh|'
117 r'fe\.|fexp|fexpm1|fln|flnp1|flog|fs\.|fsin|' 110 r'fe\.|fexp|fexpm1|fln|flnp1|flog|fs\.|fsin|'
118 r'fsincos|fsinh|fsqrt|ftan|ftanh|f~|precision|' 111 r'fsincos|fsinh|fsqrt|ftan|ftanh|f~|precision|'
119 r'set-precision|sf!|sf@|sfalign|sfaligned|sfloat\+|' 112 r'set-precision|sf!|sf@|sfalign|sfaligned|sfloat\+|'
120 r'sfloats|' 113 r'sfloats|'
121 # *** Wordset LOCAL 114 # *** Wordset LOCAL
122 r'\(local\)|to|' 115 r'\(local\)|to|'
123 # *** Wordset LOCAL-EXT 116 # *** Wordset LOCAL-EXT
124 r'locals\||' 117 r'locals\||'
125 # *** Wordset MEMORY 118 # *** Wordset MEMORY
126 r'allocate|free|resize|' 119 r'allocate|free|resize|'
127 # *** Wordset SEARCH 120 # *** Wordset SEARCH
128 r'definitions|find|forth-wordlist|get-current|' 121 r'definitions|find|forth-wordlist|get-current|'
129 r'get-order|search-wordlist|set-current|set-order|' 122 r'get-order|search-wordlist|set-current|set-order|'
130 r'wordlist|' 123 r'wordlist|'
131 # *** Wordset SEARCH-EXT 124 # *** Wordset SEARCH-EXT
132 r'also|forth|only|order|previous|' 125 r'also|forth|only|order|previous|'
133 # *** Wordset STRING 126 # *** Wordset STRING
134 r'-trailing|\/string|blank|cmove|cmove>|compare|' 127 r'-trailing|\/string|blank|cmove|cmove>|compare|'
135 r'search|sliteral|' 128 r'search|sliteral|'
136 # *** Wordset TOOLS 129 # *** Wordset TOOLS
137 r'.s|dump|see|words|' 130 r'.s|dump|see|words|'
138 # *** Wordset TOOLS-EXT 131 # *** Wordset TOOLS-EXT
139 r';code|' 132 r';code|'
140 r'ahead|assembler|bye|code|cs-pick|cs-roll|' 133 r'ahead|assembler|bye|code|cs-pick|cs-roll|'
141 r'editor|state|\[else\]|\[if\]|\[then\]|' 134 r'editor|state|\[else\]|\[if\]|\[then\]|'
142 # *** Wordset TOOLS-EXT-obsolescent 135 # *** Wordset TOOLS-EXT-obsolescent
143 r'forget|' 136 r'forget|'
144 # Forth 2012 137 # Forth 2012
145 r'defer|defer@|defer!|action-of|begin-structure|field:|buffer:|' 138 r'defer|defer@|defer!|action-of|begin-structure|field:|buffer:|'
146 r'parse-name|buffer:|traverse-wordlist|n>r|nr>|2value|fvalue|' 139 r'parse-name|buffer:|traverse-wordlist|n>r|nr>|2value|fvalue|'
147 r'name>interpret|name>compile|name>string|' 140 r'name>interpret|name>compile|name>string|'
148 r'cfield:|end-structure)'+delimiter, Keyword), 141 r'cfield:|end-structure)(?!\S)', Keyword),
149 142
150 # Numbers 143 # Numbers
151 (r'(\$[0-9A-F]+)', Number.Hex), 144 (r'(\$[0-9A-F]+)', Number.Hex),
152 (r'(\#|%|&|\-|\+)?[0-9]+', Number.Integer), 145 (r'(\#|%|&|\-|\+)?[0-9]+', Number.Integer),
153 (r'(\#|%|&|\-|\+)?[0-9.]+', Keyword.Type), 146 (r'(\#|%|&|\-|\+)?[0-9.]+', Keyword.Type),
154 # amforth specific 147 # amforth specific
155 (r'(@i|!i|@e|!e|pause|noop|turnkey|sleep|' 148 (r'(@i|!i|@e|!e|pause|noop|turnkey|sleep|'
156 r'itype|icompare|sp@|sp!|rp@|rp!|up@|up!|' 149 r'itype|icompare|sp@|sp!|rp@|rp!|up@|up!|'
157 r'>a|a>|a@|a!|a@+|a@-|>b|b>|b@|b!|b@+|b@-|' 150 r'>a|a>|a@|a!|a@+|a@-|>b|b>|b@|b!|b@+|b@-|'
158 r'find-name|1ms|' 151 r'find-name|1ms|'
159 r'sp0|rp0|\(evaluate\)|int-trap|int!)' + delimiter, 152 r'sp0|rp0|\(evaluate\)|int-trap|int!)(?!\S)',
160 Name.Constant), 153 Name.Constant),
161 # a proposal 154 # a proposal
162 (r'(do-recognizer|r:fail|recognizer:|get-recognizers|' 155 (r'(do-recognizer|r:fail|recognizer:|get-recognizers|'
163 r'set-recognizers|r:float|r>comp|r>int|r>post|' 156 r'set-recognizers|r:float|r>comp|r>int|r>post|'
164 r'r:name|r:word|r:dnum|r:num|recognizer|forth-recognizer|' 157 r'r:name|r:word|r:dnum|r:num|recognizer|forth-recognizer|'
165 r'rec:num|rec:float|rec:word)' + delimiter, Name.Decorator), 158 r'rec:num|rec:float|rec:word)(?!\S)', Name.Decorator),
166 # defining words. The next word is a new command name 159 # defining words. The next word is a new command name
167 (r'(Evalue|Rvalue|Uvalue|Edefer|Rdefer|Udefer)(\s+)', 160 (r'(Evalue|Rvalue|Uvalue|Edefer|Rdefer|Udefer)(\s+)',
168 bygroups(Keyword.Namespace, Text), 'worddef'), 161 bygroups(Keyword.Namespace, Text), 'worddef'),
169 162
170 (valid_name, Name.Function), # Anything else is executed 163 (r'\S+', Name.Function), # Anything else is executed
171 164
172 ], 165 ],
173 'worddef': [ 166 'worddef': [
174 (r'\S+', Name.Class, '#pop'), 167 (r'\S+', Name.Class, '#pop'),
175 ], 168 ],

eric ide

mercurial