From 029f72b1a93430b24b88eb3a72c6114d9f149737 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 10 Apr 2024 22:09:20 +0200 Subject: Adding upstream version 2:9.1.0016. Signed-off-by: Daniel Baumann --- runtime/syntax/forth.vim | 455 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 455 insertions(+) create mode 100644 runtime/syntax/forth.vim (limited to 'runtime/syntax/forth.vim') diff --git a/runtime/syntax/forth.vim b/runtime/syntax/forth.vim new file mode 100644 index 0000000..252116a --- /dev/null +++ b/runtime/syntax/forth.vim @@ -0,0 +1,455 @@ +" Vim syntax file +" Language: Forth +" Maintainer: Johan Kotlinski +" Previous Maintainer: Christian V. J. Brüssow +" Last Change: 2023 Aug 13 +" Filenames: *.f,*.fs,*.ft,*.fth,*.4th +" URL: https://github.com/jkotlinski/forth.vim + +" Supports the Forth-2012 Standard. +" +" Removed words from the earlier Forth-79, Forth-83 and Forth-94 standards are +" also included. +" +" These have been organised according to the version in which they were +" initially included and the version in which they were removed (obsolescent +" status is ignored). Words with "experimental" or "uncontrolled" status are +" not included unless they were later standardised. + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Synchronization method +exe "syn sync minlines=" .. get(g:, "forth_minlines", 50) + +syn case ignore + +" Characters allowed in keywords +" I don't know if 128-255 are allowed in ANS-FORTH +syn iskeyword 33-126,128-255 + +" Space errors {{{1 +" when wanted, highlight trailing white space +if exists("forth_space_errors") + if !exists("forth_no_trail_space_error") + syn match forthSpaceError display excludenl "\s\+$" + endif + if !exists("forth_no_tab_space_error") + syn match forthSpaceError display " \+\t"me=e-1 + endif +endif + +" Core words {{{1 + +" basic mathematical and logical operators {{{2 +syn keyword forthOperators * */ */MOD + - / /MOD 0< 0= 1+ 1- 2* 2/ < = > ABS +syn keyword forthOperators AND FM/MOD INVERT LSHIFT M* MAX MIN MOD NEGATE OR +syn keyword forthOperators RSHIFT SM/REM U< UM* UM/MOD XOR + " extension words +syn keyword forthOperators 0<> 0> <> U> WITHIN + " Forth-79 +syn keyword forthOperators U* U/ U/MOD + " Forth-79, Forth-83 +syn keyword forthOperators NOT + " Forth-83 +syn keyword forthOperators 2+ 2- + +" non-standard basic mathematical and logical operators +syn keyword forthOperators 0<= 0>= 8* <= >= ?DNEGATE ?NEGATE U<= U>= UNDER+ + +" various words that take an input and do something with it {{{2 +syn keyword forthFunction . U. + " extension words +syn keyword forthFunction .R U.R + +" stack manipulations {{{2 +syn keyword forthStack 2DROP 2DUP 2OVER 2SWAP >R ?DUP DROP DUP OVER R> R@ ROT +syn keyword forthStack SWAP + " extension words +syn keyword forthStack NIP PICK ROLL TUCK +syn keyword forthRStack 2>R 2R> 2R@ + +" non-standard stack manipulations +syn keyword forthStack -ROT 3DROP 3DUP 4-ROT 4DROP 4DUP 4ROT 4SWAP 4TUCK +syn keyword forthStack 5DROP 5DUP 8DROP 8DUP 8SWAP +syn keyword forthRStack 4>R 4R> 4R@ 4RDROP RDROP + +" stack pointer manipulations {{{2 +syn keyword forthSP DEPTH + +" non-standard stack pointer manipulations +syn keyword forthSP FP! FP@ LP! LP@ RP! RP@ SP! SP@ + +" address operations {{{2 +syn keyword forthMemory ! +! 2! 2@ @ C! C@ +syn keyword forthAdrArith ALIGN ALIGNED ALLOT CELL+ CELLS CHAR+ CHARS +syn keyword forthMemBlks FILL MOVE + " extension words +syn keyword forthMemBlks ERASE UNUSED + +" non-standard address operations +syn keyword forthAdrArith ADDRESS-UNIT-BITS CELL CFALIGN CFALIGNED FLOAT +syn keyword forthAdrArith MAXALIGN MAXALIGNED + +" conditionals {{{2 +syn keyword forthCond ELSE IF THEN + " extension words +syn keyword forthCond CASE ENDCASE ENDOF OF + +" non-standard conditionals +syn keyword forthCond ?DUP-0=-IF ?DUP-IF ENDIF + +" iterations {{{2 +syn keyword forthLoop +LOOP BEGIN DO EXIT I J LEAVE LOOP RECURSE REPEAT UNLOOP +syn keyword forthLoop UNTIL WHILE + " extension words +syn keyword forthLoop ?DO AGAIN + +" non-standard iterations +syn keyword forthLoop +DO -DO -LOOP ?LEAVE DONE FOR K NEXT U+DO U-DO + +" new words {{{2 +syn match forthColonDef "\<:\s*[^ \t]\+\>" +syn keyword forthEndOfColonDef ; +syn keyword forthDefine ' , C, CONSTANT CREATE DOES> EXECUTE IMMEDIATE LITERAL +syn keyword forthDefine POSTPONE STATE VARIABLE ] +syn match forthDefine "\<\[']\>" +syn match forthDefine "\<\[\>" + " extension words +syn keyword forthColonDef :NONAME +syn keyword forthDefine BUFFER: COMPILE, DEFER IS MARKER TO VALUE +syn match forthDefine "\<\[COMPILE]\>" + " Forth-79, Forth-83 +syn keyword forthDefine COMPILE + +" non-standard new words +syn match forthClassDef "\<:CLASS\s*[^ \t]\+\>" +syn keyword forthEndOfClassDef ;CLASS +syn match forthObjectDef "\<:OBJECT\s*[^ \t]\+\>" +syn keyword forthEndOfObjectDef ;OBJECT +syn match forthColonDef "\<:M\s*[^ \t]\+\>" +syn keyword forthEndOfColonDef ;M +syn keyword forthDefine 2, COMPILE-ONLY CREATE-INTERPRET/COMPILE +syn keyword forthDefine CVARIABLE F, FIND-NAME INTERPRET INTERPRETATION> +syn keyword forthDefine LASTXT NAME>COMP NAME>INT NAME?INT POSTPONE, RESTRICT +syn keyword forthDefine USER +syn match forthDefine "\<\[COMP']\>" + +" basic character operations {{{2 +syn keyword forthCharOps BL COUNT CR EMIT FIND KEY SPACE SPACES TYPE WORD +" recognize 'char (' or '[CHAR] (' correctly, so it doesn't +" highlight everything after the paren as a comment till a closing ')' +syn match forthCharOps '\ #S <# >NUMBER HOLD S>D SIGN + " extension words +syn keyword forthConversion HOLDS + " Forth-79, Forth-83, Forth-93 +syn keyword forthConversion CONVERT + +" non-standard char-number conversion +syn keyword forthConversion #>> (NUMBER) (NUMBER?) <<# DIGIT DPL HLD NUMBER + +" interpreter, wordbook, compiler {{{2 +syn keyword forthForth >BODY >IN ACCEPT ENVIRONMENT? EVALUATE HERE QUIT SOURCE + " extension words +syn keyword forthForth ACTION-OF DEFER! DEFER@ PAD PARSE PARSE-NAME REFILL +syn keyword forthForth RESTORE-INPUT SAVE-INPUT SOURCE-ID + " Forth-79 +syn keyword forthForth 79-STANDARD + " Forth-83 +syn keyword forthForth MARK >RESOLVE ?BRANCH BRANCH FORTH-83 + " Forth-79, Forth-83, Forth-94 +syn keyword forthForth QUERY + " Forth-83, Forth-94 +syn keyword forthForth SPAN + +" non-standard interpreter, wordbook, compiler +syn keyword forthForth ) >LINK >NEXT >VIEW ASSERT( ASSERT0( ASSERT1( ASSERT2( +syn keyword forthForth ASSERT3( BODY> CFA COLD L>NAME LINK> N>LINK NAME> VIEW +syn keyword forthForth VIEW> + +" booleans {{{2 + " extension words +syn match forthBoolean "\<\%(TRUE\|FALSE\)\>" + +" numbers {{{2 +syn keyword forthMath BASE DECIMAL + " extension words +syn keyword forthMath HEX +syn match forthInteger '\<-\=\d\+\.\=\>' +syn match forthInteger '\<#-\=\d\+\.\=\>' +syn match forthInteger '\<\$-\=\x\+\.\=\>' +syn match forthInteger '\<%-\=[01]\+\.\=\>' + +" characters {{{2 +syn match forthCharacter "'\k'" + +" strings {{{2 + +" Words that end with " are assumed to start string parsing. +" This includes standard words: S" ." +syn region forthString matchgroup=forthString start=+\<\S\+"\s+ end=+"+ end=+$+ contains=@Spell + " extension words +syn region forthString matchgroup=forthString start=+\\|:\@=\)" + +" XXX If you find this overkill you can remove it. This has to come after the +" highlighting for numbers and booleans otherwise it has no effect. +syn region forthComment start='\<\%(0\|FALSE\)\s\+\[IF]' end='\<\[ENDIF]' end='\<\[THEN]' contains=forthTodo + +if get(g:, "forth_no_comment_fold", 0) + syn region forthComment start='\<(\>' end=')' contains=@Spell,forthTodo,forthSpaceError + " extension words + syn match forthComment '\<\\\>.*$' contains=@Spell,forthTodo,forthSpaceError +else + syn region forthComment start='\<(\>' end=')' contains=@Spell,forthTodo,forthSpaceError fold + " extension words + syn match forthComment '\<\\\>.*$' contains=@Spell,forthTodo,forthSpaceError + syn region forthMultilineComment start="^\s*\\\>" end="\n\%(\s*\\\>\)\@!" contains=forthComment transparent fold +endif + + " extension words +syn region forthComment start='\<\.(\>' end=')' end='$' contains=@Spell,forthTodo,forthSpaceError + +" ABORT {{{2 +syn keyword forthForth ABORT +syn region forthForth start=+\+ end=+$+ + +" The optional Block word set {{{1 +" Handled as Core words - REFILL +syn keyword forthBlocks BLK BLOCK BUFFER FLUSH LOAD SAVE-BUFFERS UPDATE + " extension words +syn keyword forthBlocks EMPTY-BUFFERS LIST SCR THRU + +" Non-standard Block words +syn keyword forthBlocks +LOAD +THRU --> BLOCK-INCLUDED BLOCK-OFFSET +syn keyword forthBlocks BLOCK-POSITION EMPTY-BUFFER GET-BLOCK-FID OPEN-BLOCKS +syn keyword forthBlocks SAVE-BUFFER UPDATED? USE + +" The optional Double-Number word set {{{1 +syn keyword forthConversion D>S +syn keyword forthDefine 2CONSTANT 2LITERAL 2VARIABLE +syn keyword forthFunction D. D.R +syn keyword forthOperators D+ D- D0= D2* D2/ D= DABS DMAX DMIN DNEGATE +syn keyword forthOperators D0< D< M+ M*/ + " extension words +syn keyword forthDefine 2VALUE +syn keyword forthOperators DU< +syn keyword forthStack 2ROT + +" Non-standard Double-Number words +syn keyword forthOperators D0<= D0<> D0> D0>= D<= D<> D> D>= DU<= DU> DU>= +syn keyword forthStack 2-ROT 2NIP 2RDROP 2TUCK + +" The optional Exception word set {{{1 +" Handled as Core words - ABORT ABORT" +syn keyword forthCond CATCH THROW + +" The optional Facility word set {{{1 +syn keyword forthCharOps AT-XY KEY? PAGE + " extension words +syn keyword forthCharOps EKEY EKEY>CHAR EKEY>FKEY EKEY? EMIT? K-ALT-MASK +syn keyword forthCharOps K-CTRL-MASK K-DELETE K-DOWN K-END K-F1 K-F10 K-F11 +syn keyword forthCharOps K-F12 K-F2 K-F3 K-F4 K-F5 K-F6 K-F7 K-F8 K-F9 K-HOME +syn keyword forthCharOps K-INSERT K-LEFT K-NEXT K-PRIOR K-RIGHT K-SHIFT-MASK +syn keyword forthCharOps K-UP +syn keyword forthDefine +FIELD BEGIN-STRUCTURE CFIELD: END-STRUCTURE FIELD: +syn keyword forthForth MS TIME&DATE + +" The optional File-Access word set {{{1 +" Handled as Core words - REFILL SOURCE-ID S\" S" ( +syn keyword forthFileMode BIN R/O R/W W/O +syn keyword forthFileWords CLOSE-FILE CREATE-FILE DELETE-FILE FILE-POSITION +syn keyword forthFileWords FILE-SIZE INCLUDE-FILE INCLUDED OPEN-FILE READ-FILE +syn keyword forthFileWords READ-LINE REPOSITION-FILE RESIZE-FILE WRITE-FILE +syn keyword forthFileWords WRITE-LINE + " extension words +syn keyword forthFileWords FILE-STATUS FLUSH-FILE RENAME-FILE REQUIRED +syn match forthInclude '\' + +syn keyword forthConversion >FLOAT D>F F>D +syn keyword forthAdrArith FALIGN FALIGNED FLOAT+ FLOATS +syn keyword forthDefine FCONSTANT FLITERAL FVARIABLE +syn keyword forthFStack FDROP FDUP FOVER FROT FSWAP +syn keyword forthFunction REPRESENT +syn keyword forthMemory F! F@ +syn keyword forthOperators F* F+ F- F/ F0< F0= F< FLOOR FMAX FMIN FNEGATE +syn keyword forthOperators FROUND +syn keyword forthSP FDEPTH + " extension words +syn keyword forthConversion F>S S>F +syn keyword forthAdrArith DFALIGN DFALIGNED DFLOAT+ DFLOATS SFALIGN +syn keyword forthAdrArith SFALIGNED SFLOAT+ SFLOATS +syn keyword forthDefine DFFIELD: FFIELD: FVALUE SFFIELD: +syn keyword forthFunction F. FE. FS. PRECISION SET-PRECISION +syn keyword forthMemory DF! DF@ SF! SF@ +syn keyword forthOperators F** FABS FACOS FACOSH FALOG FASIN FASINH FATAN +syn keyword forthOperators FATAN2 FATANH FCOS FCOSH FEXP FEXPM1 FLN FLNP1 +syn keyword forthOperators FLOG FSIN FSINCOS FSINH FSQRT FTAN FTANH FTRUNC F~ + +" Non-standard Floating-Point words +syn keyword forthOperators 1/F F2* F2/ F~ABS F~REL +syn keyword forthFStack FNIP FTUCK + +" The optional Locals word set {{{1 +syn keyword forthForth (LOCAL) + " extension words +syn region forthLocals start="\<{:\>" end="\<:}\>" +syn region forthLocals start="\" end="\<|\>" + +" Non-standard Locals words +syn region forthLocals start="\<{\>" end="\<}\>" + +" The optional Memory-Allocation word set {{{1 +syn keyword forthMemory ALLOCATE FREE RESIZE + +" The optional Programming-Tools wordset {{{1 +syn keyword forthDebug .S ? DUMP SEE WORDS + " extension words +syn keyword forthAssembler ;CODE ASSEMBLER CODE END-CODE +syn keyword forthCond AHEAD CS-PICK CS-ROLL +syn keyword forthDefine NAME>COMPILE NAME>INTERPRET NAME>STRING SYNONYM +syn keyword forthDefine TRAVERSE-WORDLIST +syn match forthDefine "\<\[DEFINED]\>" +syn match forthDefine "\<\[ELSE]\>" +syn match forthDefine "\<\[IF]\>" +syn match forthDefine "\<\[THEN]\>" +syn match forthDefine "\<\[UNDEFINED]\>" +syn keyword forthForth BYE FORGET +syn keyword forthStack N>R NR> +syn keyword forthVocs EDITOR + +" Non-standard Programming-Tools words +syn keyword forthAssembler FLUSH-ICACHE +syn keyword forthDebug PRINTDEBUGDATA PRINTDEBUGLINE +syn match forthDebug "\<\~\~\>" +syn match forthDefine "\<\[+LOOP]\>" +syn match forthDefine "\<\[?DO]\>" +syn match forthDefine "\<\[AGAIN]\>" +syn match forthDefine "\<\[BEGIN]\>" +syn match forthDefine "\<\[DO]\>" +syn match forthDefine "\<\[ENDIF]\>" +syn match forthDefine "\<\[IFDEF]\>" +syn match forthDefine "\<\[IFUNDEF]\>" +syn match forthDefine "\<\[LOOP]\>" +syn match forthDefine "\<\[NEXT]\>" +syn match forthDefine "\<\[REPEAT]\>" +syn match forthDefine "\<\[UNTIL]\>" +syn match forthDefine "\<\[WHILE]\>" + +" The optional Search-Order word set {{{1 +" Handled as Core words - FIND +syn keyword forthVocs DEFINITIONS FORTH-WORDLIST GET-CURRENT GET-ORDER +syn keyword forthVocs SEARCH-WORDLIST SET-CURRENT SET-ORDER WORDLIST + " extension words +syn keyword forthVocs ALSO FORTH ONLY ORDER PREVIOUS + " Forth-79, Forth-83 +syn keyword forthVocs CONTEXT CURRENT VOCABULARY + +" Non-standard Search-Order words +syn keyword forthVocs #VOCS ROOT SEAL VOCS + +" The optional String word set {{{1 +syn keyword forthFunction -TRAILING /STRING BLANK CMOVE CMOVE> COMPARE SEARCH +syn keyword forthFunction SLITERAL + " extension words +syn keyword forthFunction REPLACES SUBSTITUTE UNESCAPE + +" The optional Extended-Character word set {{{1 +" Handled as Core words - [CHAR] CHAR and PARSE +syn keyword forthAdrArith XCHAR+ +syn keyword forthCharOps X-SIZE XC-SIZE XEMIT XKEY XKEY? +syn keyword forthDefine XC, +syn keyword forthMemory XC!+ XC!+? XC@+ + " extension words +syn keyword forthAdrArith XCHAR- +X/STRING X\\STRING- +syn keyword forthCharOps EKEY>XCHAR X-WIDTH XC-WIDTH +syn keyword forthConversion XHOLD +syn keyword forthString -TRAILING-GARBAGE + +" Define the default highlighting {{{1 +hi def link forthBoolean Boolean +hi def link forthCharacter Character +hi def link forthTodo Todo +hi def link forthOperators Operator +hi def link forthMath Number +hi def link forthInteger Number +hi def link forthFloat Float +hi def link forthStack Special +hi def link forthRstack Special +hi def link forthFStack Special +hi def link forthSP Special +hi def link forthMemory Function +hi def link forthAdrArith Function +hi def link forthMemBlks Function +hi def link forthCond Conditional +hi def link forthLoop Repeat +hi def link forthColonDef Define +hi def link forthEndOfColonDef Define +hi def link forthDefine Define +hi def link forthDebug Debug +hi def link forthAssembler Include +hi def link forthCharOps Character +hi def link forthConversion String +hi def link forthForth Statement +hi def link forthVocs Statement +hi def link forthEscape Special +hi def link forthString String +hi def link forthComment Comment +hi def link forthClassDef Define +hi def link forthEndOfClassDef Define +hi def link forthObjectDef Define +hi def link forthEndOfObjectDef Define +hi def link forthInclude Include +hi def link forthLocals Type " nothing else uses type and locals must stand out +hi def link forthFileMode Function +hi def link forthFunction Function +hi def link forthFileWords Statement +hi def link forthBlocks Statement +hi def link forthSpaceError Error +"}}} + +let b:current_syntax = "forth" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim:ts=8:sw=4:nocindent:smartindent:fdm=marker:tw=78 + -- cgit v1.2.3