forth.vim (16632B)
1 " Vim syntax file 2 " Language: Forth 3 " Maintainer: Johan Kotlinski <kotlinski@gmail.com> 4 " Previous Maintainer: Christian V. J. Brüssow <cvjb@cvjb.de> 5 " Last Change: 2023 Aug 13 6 " Filenames: *.f,*.fs,*.ft,*.fth,*.4th 7 " URL: https://github.com/jkotlinski/forth.vim 8 9 " Supports the Forth-2012 Standard. 10 " 11 " Removed words from the earlier Forth-79, Forth-83 and Forth-94 standards are 12 " also included. 13 " 14 " These have been organised according to the version in which they were 15 " initially included and the version in which they were removed (obsolescent 16 " status is ignored). Words with "experimental" or "uncontrolled" status are 17 " not included unless they were later standardised. 18 19 " quit when a syntax file was already loaded 20 if exists("b:current_syntax") 21 finish 22 endif 23 24 let s:cpo_save = &cpo 25 set cpo&vim 26 27 " Synchronization method 28 exe "syn sync minlines=" .. get(g:, "forth_minlines", 50) 29 30 syn case ignore 31 32 " Characters allowed in keywords 33 " I don't know if 128-255 are allowed in ANS-FORTH 34 syn iskeyword 33-126,128-255 35 36 " Space errors {{{1 37 " when wanted, highlight trailing white space 38 if exists("forth_space_errors") 39 if !exists("forth_no_trail_space_error") 40 syn match forthSpaceError display excludenl "\s\+$" 41 endif 42 if !exists("forth_no_tab_space_error") 43 syn match forthSpaceError display " \+\t"me=e-1 44 endif 45 endif 46 47 " Core words {{{1 48 49 " basic mathematical and logical operators {{{2 50 syn keyword forthOperators * */ */MOD + - / /MOD 0< 0= 1+ 1- 2* 2/ < = > ABS 51 syn keyword forthOperators AND FM/MOD INVERT LSHIFT M* MAX MIN MOD NEGATE OR 52 syn keyword forthOperators RSHIFT SM/REM U< UM* UM/MOD XOR 53 " extension words 54 syn keyword forthOperators 0<> 0> <> U> WITHIN 55 " Forth-79 56 syn keyword forthOperators U* U/ U/MOD 57 " Forth-79, Forth-83 58 syn keyword forthOperators NOT 59 " Forth-83 60 syn keyword forthOperators 2+ 2- 61 62 " non-standard basic mathematical and logical operators 63 syn keyword forthOperators 0<= 0>= 8* <= >= ?DNEGATE ?NEGATE U<= U>= UNDER+ 64 65 " various words that take an input and do something with it {{{2 66 syn keyword forthFunction . U. 67 " extension words 68 syn keyword forthFunction .R U.R 69 70 " stack manipulations {{{2 71 syn keyword forthStack 2DROP 2DUP 2OVER 2SWAP >R ?DUP DROP DUP OVER R> R@ ROT 72 syn keyword forthStack SWAP 73 " extension words 74 syn keyword forthStack NIP PICK ROLL TUCK 75 syn keyword forthRStack 2>R 2R> 2R@ 76 77 " non-standard stack manipulations 78 syn keyword forthStack -ROT 3DROP 3DUP 4-ROT 4DROP 4DUP 4ROT 4SWAP 4TUCK 79 syn keyword forthStack 5DROP 5DUP 8DROP 8DUP 8SWAP 80 syn keyword forthRStack 4>R 4R> 4R@ 4RDROP RDROP 81 82 " stack pointer manipulations {{{2 83 syn keyword forthSP DEPTH 84 85 " non-standard stack pointer manipulations 86 syn keyword forthSP FP! FP@ LP! LP@ RP! RP@ SP! SP@ 87 88 " address operations {{{2 89 syn keyword forthMemory ! +! 2! 2@ @ C! C@ 90 syn keyword forthAdrArith ALIGN ALIGNED ALLOT CELL+ CELLS CHAR+ CHARS 91 syn keyword forthMemBlks FILL MOVE 92 " extension words 93 syn keyword forthMemBlks ERASE UNUSED 94 95 " non-standard address operations 96 syn keyword forthAdrArith ADDRESS-UNIT-BITS CELL CFALIGN CFALIGNED FLOAT 97 syn keyword forthAdrArith MAXALIGN MAXALIGNED 98 99 " conditionals {{{2 100 syn keyword forthCond ELSE IF THEN 101 " extension words 102 syn keyword forthCond CASE ENDCASE ENDOF OF 103 104 " non-standard conditionals 105 syn keyword forthCond ?DUP-0=-IF ?DUP-IF ENDIF 106 107 " iterations {{{2 108 syn keyword forthLoop +LOOP BEGIN DO EXIT I J LEAVE LOOP RECURSE REPEAT UNLOOP 109 syn keyword forthLoop UNTIL WHILE 110 " extension words 111 syn keyword forthLoop ?DO AGAIN 112 113 " non-standard iterations 114 syn keyword forthLoop +DO -DO -LOOP ?LEAVE DONE FOR K NEXT U+DO U-DO 115 116 " new words {{{2 117 syn match forthColonDef "\<:\s*[^ \t]\+\>" 118 syn keyword forthEndOfColonDef ; 119 syn keyword forthDefine ' , C, CONSTANT CREATE DOES> EXECUTE IMMEDIATE LITERAL 120 syn keyword forthDefine POSTPONE STATE VARIABLE ] 121 syn match forthDefine "\<\[']\>" 122 syn match forthDefine "\<\[\>" 123 " extension words 124 syn keyword forthColonDef :NONAME 125 syn keyword forthDefine BUFFER: COMPILE, DEFER IS MARKER TO VALUE 126 syn match forthDefine "\<\[COMPILE]\>" 127 " Forth-79, Forth-83 128 syn keyword forthDefine COMPILE 129 130 " non-standard new words 131 syn match forthClassDef "\<:CLASS\s*[^ \t]\+\>" 132 syn keyword forthEndOfClassDef ;CLASS 133 syn match forthObjectDef "\<:OBJECT\s*[^ \t]\+\>" 134 syn keyword forthEndOfObjectDef ;OBJECT 135 syn match forthColonDef "\<:M\s*[^ \t]\+\>" 136 syn keyword forthEndOfColonDef ;M 137 syn keyword forthDefine 2, <BUILDS <COMPILATION <INTERPRETATION C; COMP' 138 syn keyword forthDefine COMPILATION> COMPILE-ONLY CREATE-INTERPRET/COMPILE 139 syn keyword forthDefine CVARIABLE F, FIND-NAME INTERPRET INTERPRETATION> 140 syn keyword forthDefine LASTXT NAME>COMP NAME>INT NAME?INT POSTPONE, RESTRICT 141 syn keyword forthDefine USER 142 syn match forthDefine "\<\[COMP']\>" 143 144 " basic character operations {{{2 145 syn keyword forthCharOps BL COUNT CR EMIT FIND KEY SPACE SPACES TYPE WORD 146 " recognize 'char (' or '[CHAR] (' correctly, so it doesn't 147 " highlight everything after the paren as a comment till a closing ')' 148 syn match forthCharOps '\<CHAR\s\S\s' 149 syn match forthCharOps '\<\[CHAR]\s\S\s' 150 " Forth-83, Forth-94 151 syn keyword forthCharOps EXPECT #TIB TIB 152 153 " non-standard basic character operations 154 syn keyword forthCharOps (.) 155 156 " char-number conversion {{{2 157 syn keyword forthConversion # #> #S <# >NUMBER HOLD S>D SIGN 158 " extension words 159 syn keyword forthConversion HOLDS 160 " Forth-79, Forth-83, Forth-93 161 syn keyword forthConversion CONVERT 162 163 " non-standard char-number conversion 164 syn keyword forthConversion #>> (NUMBER) (NUMBER?) <<# DIGIT DPL HLD NUMBER 165 166 " interpreter, wordbook, compiler {{{2 167 syn keyword forthForth >BODY >IN ACCEPT ENVIRONMENT? EVALUATE HERE QUIT SOURCE 168 " extension words 169 syn keyword forthForth ACTION-OF DEFER! DEFER@ PAD PARSE PARSE-NAME REFILL 170 syn keyword forthForth RESTORE-INPUT SAVE-INPUT SOURCE-ID 171 " Forth-79 172 syn keyword forthForth 79-STANDARD 173 " Forth-83 174 syn keyword forthForth <MARK <RESOLVE >MARK >RESOLVE ?BRANCH BRANCH FORTH-83 175 " Forth-79, Forth-83, Forth-94 176 syn keyword forthForth QUERY 177 " Forth-83, Forth-94 178 syn keyword forthForth SPAN 179 180 " non-standard interpreter, wordbook, compiler 181 syn keyword forthForth ) >LINK >NEXT >VIEW ASSERT( ASSERT0( ASSERT1( ASSERT2( 182 syn keyword forthForth ASSERT3( BODY> CFA COLD L>NAME LINK> N>LINK NAME> VIEW 183 syn keyword forthForth VIEW> 184 185 " booleans {{{2 186 " extension words 187 syn match forthBoolean "\<\%(TRUE\|FALSE\)\>" 188 189 " numbers {{{2 190 syn keyword forthMath BASE DECIMAL 191 " extension words 192 syn keyword forthMath HEX 193 syn match forthInteger '\<-\=\d\+\.\=\>' 194 syn match forthInteger '\<#-\=\d\+\.\=\>' 195 syn match forthInteger '\<\$-\=\x\+\.\=\>' 196 syn match forthInteger '\<%-\=[01]\+\.\=\>' 197 198 " characters {{{2 199 syn match forthCharacter "'\k'" 200 201 " strings {{{2 202 203 " Words that end with " are assumed to start string parsing. 204 " This includes standard words: S" ." 205 syn region forthString matchgroup=forthString start=+\<\S\+"\s+ end=+"+ end=+$+ contains=@Spell 206 " extension words 207 syn region forthString matchgroup=forthString start=+\<C"\s+ end=+"+ end=+$+ contains=@Spell 208 " Matches S\" 209 syn region forthString matchgroup=forthString start=+\<S\\"\s+ end=+"+ end=+$+ contains=@Spell,forthEscape 210 211 syn match forthEscape +\C\\[abeflmnqrtvz"\\]+ contained 212 syn match forthEscape "\C\\x\x\x" contained 213 214 " comments {{{2 215 216 syn keyword forthTodo contained TODO FIXME XXX 217 218 " Some special, non-FORTH keywords 219 syn match forthTodo contained "\<\%(TODO\|FIXME\|XXX\)\%(\>\|:\@=\)" 220 221 " XXX If you find this overkill you can remove it. This has to come after the 222 " highlighting for numbers and booleans otherwise it has no effect. 223 syn region forthComment start='\<\%(0\|FALSE\)\s\+\[IF]' end='\<\[ENDIF]' end='\<\[THEN]' contains=forthTodo 224 225 if get(g:, "forth_no_comment_fold", 0) 226 syn region forthComment start='\<(\>' end=')' contains=@Spell,forthTodo,forthSpaceError 227 " extension words 228 syn match forthComment '\<\\\>.*$' contains=@Spell,forthTodo,forthSpaceError 229 else 230 syn region forthComment start='\<(\>' end=')' contains=@Spell,forthTodo,forthSpaceError fold 231 " extension words 232 syn match forthComment '\<\\\>.*$' contains=@Spell,forthTodo,forthSpaceError 233 syn region forthMultilineComment start="^\s*\\\>" end="\n\%(\s*\\\>\)\@!" contains=forthComment transparent fold 234 endif 235 236 " extension words 237 syn region forthComment start='\<\.(\>' end=')' end='$' contains=@Spell,forthTodo,forthSpaceError 238 239 " ABORT {{{2 240 syn keyword forthForth ABORT 241 syn region forthForth start=+\<ABORT"\s+ end=+"\>+ end=+$+ 242 243 " The optional Block word set {{{1 244 " Handled as Core words - REFILL 245 syn keyword forthBlocks BLK BLOCK BUFFER FLUSH LOAD SAVE-BUFFERS UPDATE 246 " extension words 247 syn keyword forthBlocks EMPTY-BUFFERS LIST SCR THRU 248 249 " Non-standard Block words 250 syn keyword forthBlocks +LOAD +THRU --> BLOCK-INCLUDED BLOCK-OFFSET 251 syn keyword forthBlocks BLOCK-POSITION EMPTY-BUFFER GET-BLOCK-FID OPEN-BLOCKS 252 syn keyword forthBlocks SAVE-BUFFER UPDATED? USE 253 254 " The optional Double-Number word set {{{1 255 syn keyword forthConversion D>S 256 syn keyword forthDefine 2CONSTANT 2LITERAL 2VARIABLE 257 syn keyword forthFunction D. D.R 258 syn keyword forthOperators D+ D- D0= D2* D2/ D= DABS DMAX DMIN DNEGATE 259 syn keyword forthOperators D0< D< M+ M*/ 260 " extension words 261 syn keyword forthDefine 2VALUE 262 syn keyword forthOperators DU< 263 syn keyword forthStack 2ROT 264 265 " Non-standard Double-Number words 266 syn keyword forthOperators D0<= D0<> D0> D0>= D<= D<> D> D>= DU<= DU> DU>= 267 syn keyword forthStack 2-ROT 2NIP 2RDROP 2TUCK 268 269 " The optional Exception word set {{{1 270 " Handled as Core words - ABORT ABORT" 271 syn keyword forthCond CATCH THROW 272 273 " The optional Facility word set {{{1 274 syn keyword forthCharOps AT-XY KEY? PAGE 275 " extension words 276 syn keyword forthCharOps EKEY EKEY>CHAR EKEY>FKEY EKEY? EMIT? K-ALT-MASK 277 syn keyword forthCharOps K-CTRL-MASK K-DELETE K-DOWN K-END K-F1 K-F10 K-F11 278 syn keyword forthCharOps K-F12 K-F2 K-F3 K-F4 K-F5 K-F6 K-F7 K-F8 K-F9 K-HOME 279 syn keyword forthCharOps K-INSERT K-LEFT K-NEXT K-PRIOR K-RIGHT K-SHIFT-MASK 280 syn keyword forthCharOps K-UP 281 syn keyword forthDefine +FIELD BEGIN-STRUCTURE CFIELD: END-STRUCTURE FIELD: 282 syn keyword forthForth MS TIME&DATE 283 284 " The optional File-Access word set {{{1 285 " Handled as Core words - REFILL SOURCE-ID S\" S" ( 286 syn keyword forthFileMode BIN R/O R/W W/O 287 syn keyword forthFileWords CLOSE-FILE CREATE-FILE DELETE-FILE FILE-POSITION 288 syn keyword forthFileWords FILE-SIZE INCLUDE-FILE INCLUDED OPEN-FILE READ-FILE 289 syn keyword forthFileWords READ-LINE REPOSITION-FILE RESIZE-FILE WRITE-FILE 290 syn keyword forthFileWords WRITE-LINE 291 " extension words 292 syn keyword forthFileWords FILE-STATUS FLUSH-FILE RENAME-FILE REQUIRED 293 syn match forthInclude '\<INCLUDE\s\+\k\+' 294 syn match forthInclude '\<REQUIRE\s\+\k\+' 295 296 " Non-standard File-Access words 297 syn keyword forthFileWords EMIT-FILE KEY-FILE KEY?-FILE SLURP-FID SLURP-FILE 298 syn keyword forthFileWords STDERR STDIN STDOUT 299 syn match forthInclude '^FLOAD\s\+' 300 syn match forthInclude '^NEEDS\s\+' 301 302 " The optional Floating-Point word set {{{1 303 304 " numbers 305 syn match forthFloat '\<[+-]\=\d\+\.\=\d*[DdEe][+-]\=\d*\>' 306 307 syn keyword forthConversion >FLOAT D>F F>D 308 syn keyword forthAdrArith FALIGN FALIGNED FLOAT+ FLOATS 309 syn keyword forthDefine FCONSTANT FLITERAL FVARIABLE 310 syn keyword forthFStack FDROP FDUP FOVER FROT FSWAP 311 syn keyword forthFunction REPRESENT 312 syn keyword forthMemory F! F@ 313 syn keyword forthOperators F* F+ F- F/ F0< F0= F< FLOOR FMAX FMIN FNEGATE 314 syn keyword forthOperators FROUND 315 syn keyword forthSP FDEPTH 316 " extension words 317 syn keyword forthConversion F>S S>F 318 syn keyword forthAdrArith DFALIGN DFALIGNED DFLOAT+ DFLOATS SFALIGN 319 syn keyword forthAdrArith SFALIGNED SFLOAT+ SFLOATS 320 syn keyword forthDefine DFFIELD: FFIELD: FVALUE SFFIELD: 321 syn keyword forthFunction F. FE. FS. PRECISION SET-PRECISION 322 syn keyword forthMemory DF! DF@ SF! SF@ 323 syn keyword forthOperators F** FABS FACOS FACOSH FALOG FASIN FASINH FATAN 324 syn keyword forthOperators FATAN2 FATANH FCOS FCOSH FEXP FEXPM1 FLN FLNP1 325 syn keyword forthOperators FLOG FSIN FSINCOS FSINH FSQRT FTAN FTANH FTRUNC F~ 326 327 " Non-standard Floating-Point words 328 syn keyword forthOperators 1/F F2* F2/ F~ABS F~REL 329 syn keyword forthFStack FNIP FTUCK 330 331 " The optional Locals word set {{{1 332 syn keyword forthForth (LOCAL) 333 " extension words 334 syn region forthLocals start="\<{:\>" end="\<:}\>" 335 syn region forthLocals start="\<LOCALS|\>" end="\<|\>" 336 337 " Non-standard Locals words 338 syn region forthLocals start="\<{\>" end="\<}\>" 339 340 " The optional Memory-Allocation word set {{{1 341 syn keyword forthMemory ALLOCATE FREE RESIZE 342 343 " The optional Programming-Tools wordset {{{1 344 syn keyword forthDebug .S ? DUMP SEE WORDS 345 " extension words 346 syn keyword forthAssembler ;CODE ASSEMBLER CODE END-CODE 347 syn keyword forthCond AHEAD CS-PICK CS-ROLL 348 syn keyword forthDefine NAME>COMPILE NAME>INTERPRET NAME>STRING SYNONYM 349 syn keyword forthDefine TRAVERSE-WORDLIST 350 syn match forthDefine "\<\[DEFINED]\>" 351 syn match forthDefine "\<\[ELSE]\>" 352 syn match forthDefine "\<\[IF]\>" 353 syn match forthDefine "\<\[THEN]\>" 354 syn match forthDefine "\<\[UNDEFINED]\>" 355 syn keyword forthForth BYE FORGET 356 syn keyword forthStack N>R NR> 357 syn keyword forthVocs EDITOR 358 359 " Non-standard Programming-Tools words 360 syn keyword forthAssembler FLUSH-ICACHE 361 syn keyword forthDebug PRINTDEBUGDATA PRINTDEBUGLINE 362 syn match forthDebug "\<\~\~\>" 363 syn match forthDefine "\<\[+LOOP]\>" 364 syn match forthDefine "\<\[?DO]\>" 365 syn match forthDefine "\<\[AGAIN]\>" 366 syn match forthDefine "\<\[BEGIN]\>" 367 syn match forthDefine "\<\[DO]\>" 368 syn match forthDefine "\<\[ENDIF]\>" 369 syn match forthDefine "\<\[IFDEF]\>" 370 syn match forthDefine "\<\[IFUNDEF]\>" 371 syn match forthDefine "\<\[LOOP]\>" 372 syn match forthDefine "\<\[NEXT]\>" 373 syn match forthDefine "\<\[REPEAT]\>" 374 syn match forthDefine "\<\[UNTIL]\>" 375 syn match forthDefine "\<\[WHILE]\>" 376 377 " The optional Search-Order word set {{{1 378 " Handled as Core words - FIND 379 syn keyword forthVocs DEFINITIONS FORTH-WORDLIST GET-CURRENT GET-ORDER 380 syn keyword forthVocs SEARCH-WORDLIST SET-CURRENT SET-ORDER WORDLIST 381 " extension words 382 syn keyword forthVocs ALSO FORTH ONLY ORDER PREVIOUS 383 " Forth-79, Forth-83 384 syn keyword forthVocs CONTEXT CURRENT VOCABULARY 385 386 " Non-standard Search-Order words 387 syn keyword forthVocs #VOCS ROOT SEAL VOCS 388 389 " The optional String word set {{{1 390 syn keyword forthFunction -TRAILING /STRING BLANK CMOVE CMOVE> COMPARE SEARCH 391 syn keyword forthFunction SLITERAL 392 " extension words 393 syn keyword forthFunction REPLACES SUBSTITUTE UNESCAPE 394 395 " The optional Extended-Character word set {{{1 396 " Handled as Core words - [CHAR] CHAR and PARSE 397 syn keyword forthAdrArith XCHAR+ 398 syn keyword forthCharOps X-SIZE XC-SIZE XEMIT XKEY XKEY? 399 syn keyword forthDefine XC, 400 syn keyword forthMemory XC!+ XC!+? XC@+ 401 " extension words 402 syn keyword forthAdrArith XCHAR- +X/STRING X\\STRING- 403 syn keyword forthCharOps EKEY>XCHAR X-WIDTH XC-WIDTH 404 syn keyword forthConversion XHOLD 405 syn keyword forthString -TRAILING-GARBAGE 406 407 " Define the default highlighting {{{1 408 hi def link forthBoolean Boolean 409 hi def link forthCharacter Character 410 hi def link forthTodo Todo 411 hi def link forthOperators Operator 412 hi def link forthMath Number 413 hi def link forthInteger Number 414 hi def link forthFloat Float 415 hi def link forthStack Special 416 hi def link forthRstack Special 417 hi def link forthFStack Special 418 hi def link forthSP Special 419 hi def link forthMemory Function 420 hi def link forthAdrArith Function 421 hi def link forthMemBlks Function 422 hi def link forthCond Conditional 423 hi def link forthLoop Repeat 424 hi def link forthColonDef Define 425 hi def link forthEndOfColonDef Define 426 hi def link forthDefine Define 427 hi def link forthDebug Debug 428 hi def link forthAssembler Include 429 hi def link forthCharOps Character 430 hi def link forthConversion String 431 hi def link forthForth Statement 432 hi def link forthVocs Statement 433 hi def link forthEscape Special 434 hi def link forthString String 435 hi def link forthComment Comment 436 hi def link forthClassDef Define 437 hi def link forthEndOfClassDef Define 438 hi def link forthObjectDef Define 439 hi def link forthEndOfObjectDef Define 440 hi def link forthInclude Include 441 hi def link forthLocals Type " nothing else uses type and locals must stand out 442 hi def link forthFileMode Function 443 hi def link forthFunction Function 444 hi def link forthFileWords Statement 445 hi def link forthBlocks Statement 446 hi def link forthSpaceError Error 447 "}}} 448 449 let b:current_syntax = "forth" 450 451 let &cpo = s:cpo_save 452 unlet s:cpo_save 453 454 " vim:ts=8:sw=4:nocindent:smartindent:fdm=marker:tw=78