xref: /vim-8.2.3635/runtime/syntax/forth.vim (revision 3577c6fa)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:    FORTH
3071d4279SBram Moolenaar" Maintainer:  Christian V. J. Br�ssow <[email protected]>
4*3577c6faSBram Moolenaar" Last Change: Sa 14 Jul 2007 21:39:53 CEST
5071d4279SBram Moolenaar" Filenames:   *.fs,*.ft
6071d4279SBram Moolenaar" URL:	       http://www.cvjb.de/comp/vim/forth.vim
7071d4279SBram Moolenaar
8071d4279SBram Moolenaar" $Id$
9071d4279SBram Moolenaar
10071d4279SBram Moolenaar" The list of keywords is incomplete, compared with the offical ANS
11071d4279SBram Moolenaar" wordlist. If you use this language, please improve it, and send me
12071d4279SBram Moolenaar" the patches.
13071d4279SBram Moolenaar
14071d4279SBram Moolenaar" Many Thanks to...
15071d4279SBram Moolenaar"
16*3577c6faSBram Moolenaar" 2007-07-11:
17*3577c6faSBram Moolenaar" Benjamin Krill <ben at codiert dot org> send me a patch
18*3577c6faSBram Moolenaar" to highlight space errors.
19*3577c6faSBram Moolenaar" You can toggle this feature on through setting the
20*3577c6faSBram Moolenaar" flag forth_space_errors in you vimrc. If you have switched it on,
21*3577c6faSBram Moolenaar" you can turn off highlighting of trailing spaces in comments by
22*3577c6faSBram Moolenaar" setting forth_no_trail_space_error in your vimrc. If you do not want
23*3577c6faSBram Moolenaar" the highlighting of a tabulator following a space in comments, you
24*3577c6faSBram Moolenaar" can turn this off by setting forth_no_tab_space_error.
25*3577c6faSBram Moolenaar"
26*3577c6faSBram Moolenaar" 2006-05-25:
27*3577c6faSBram Moolenaar" Bill McCarthy <WJMc@...> and Ilya Sher <ilya-vim@...>
28*3577c6faSBram Moolenaar" Who found a bug in the ccomment line in 2004!!!
29*3577c6faSBram Moolenaar" I'm really very sorry, that it has taken two years to fix that
30*3577c6faSBram Moolenaar" in the offical version of this file. Shame on me.
31*3577c6faSBram Moolenaar" I think my face will be red the next ten years...
32*3577c6faSBram Moolenaar"
33*3577c6faSBram Moolenaar" 2006-05-21:
34*3577c6faSBram Moolenaar" Thomas E. Vaughan <tevaugha at ball dot com> send me a patch
35*3577c6faSBram Moolenaar" for the parenthesis comment word, so words with a trailing
36*3577c6faSBram Moolenaar" parenthesis will not start the highlighting for such comments.
378299df96SBram Moolenaar"
38071d4279SBram Moolenaar" 2003-05-10:
39071d4279SBram Moolenaar" Andrew Gaul <andrew at gaul.org> send me a patch for
40071d4279SBram Moolenaar" forthOperators.
41071d4279SBram Moolenaar"
42071d4279SBram Moolenaar" 2003-04-03:
43*3577c6faSBram Moolenaar" Ron Aaron <ron at ronware dot org> made updates for an
44071d4279SBram Moolenaar" improved Win32Forth support.
45071d4279SBram Moolenaar"
46071d4279SBram Moolenaar" 2002-04-22:
47*3577c6faSBram Moolenaar" Charles Shattuck <charley at forth dot org> helped me to settle up with the
48071d4279SBram Moolenaar" binary and hex number highlighting.
49071d4279SBram Moolenaar"
50071d4279SBram Moolenaar" 2002-04-20:
51*3577c6faSBram Moolenaar" Charles Shattuck <charley at forth dot org> send me some code for correctly
52071d4279SBram Moolenaar" highlighting char and [char] followed by an opening paren. He also added
53071d4279SBram Moolenaar" some words for operators, conditionals, and definitions; and added the
54071d4279SBram Moolenaar" highlighting for s" and c".
55071d4279SBram Moolenaar"
56071d4279SBram Moolenaar" 2000-03-28:
57*3577c6faSBram Moolenaar" John Providenza <john at probo dot com> made improvements for the
58071d4279SBram Moolenaar" highlighting of strings, and added the code for highlighting hex numbers.
59071d4279SBram Moolenaar"
60071d4279SBram Moolenaar
61071d4279SBram Moolenaar
62071d4279SBram Moolenaar" For version 5.x: Clear all syntax items
63071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded
64071d4279SBram Moolenaarif version < 600
65071d4279SBram Moolenaar    syntax clear
66071d4279SBram Moolenaarelseif exists("b:current_syntax")
67071d4279SBram Moolenaar    finish
68071d4279SBram Moolenaarendif
69071d4279SBram Moolenaar
70071d4279SBram Moolenaar" Synchronization method
718299df96SBram Moolenaarsyn sync ccomment
728299df96SBram Moolenaarsyn sync maxlines=200
73071d4279SBram Moolenaar
74071d4279SBram Moolenaar" I use gforth, so I set this to case ignore
75071d4279SBram Moolenaarsyn case ignore
76071d4279SBram Moolenaar
77071d4279SBram Moolenaar" Some special, non-FORTH keywords
78071d4279SBram Moolenaarsyn keyword forthTodo contained TODO FIXME XXX
79071d4279SBram Moolenaarsyn match forthTodo contained 'Copyright\(\s([Cc])\)\=\(\s[0-9]\{2,4}\)\='
80071d4279SBram Moolenaar
81071d4279SBram Moolenaar" Characters allowed in keywords
82071d4279SBram Moolenaar" I don't know if 128-255 are allowed in ANS-FORHT
83071d4279SBram Moolenaarif version >= 600
84071d4279SBram Moolenaar    setlocal iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
85071d4279SBram Moolenaarelse
86071d4279SBram Moolenaar    set iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
87071d4279SBram Moolenaarendif
88071d4279SBram Moolenaar
89*3577c6faSBram Moolenaar" when wanted, highlight trailing white space
90*3577c6faSBram Moolenaarif exists("forth_space_errors")
91*3577c6faSBram Moolenaar    if !exists("forth_no_trail_space_error")
92*3577c6faSBram Moolenaar        syn match forthSpaceError display excludenl "\s\+$"
93*3577c6faSBram Moolenaar    endif
94*3577c6faSBram Moolenaar    if !exists("forth_no_tab_space_error")
95*3577c6faSBram Moolenaar        syn match forthSpaceError display " \+\t"me=e-1
96*3577c6faSBram Moolenaar    endif
97*3577c6faSBram Moolenaarendif
98071d4279SBram Moolenaar
99071d4279SBram Moolenaar" Keywords
100071d4279SBram Moolenaar
101071d4279SBram Moolenaar" basic mathematical and logical operators
102071d4279SBram Moolenaarsyn keyword forthOperators + - * / MOD /MOD NEGATE ABS MIN MAX
103071d4279SBram Moolenaarsyn keyword forthOperators AND OR XOR NOT INVERT 2* 2/ 1+ 1- 2+ 2- 8*
104071d4279SBram Moolenaarsyn keyword forthOperators M+ */ */MOD M* UM* M*/ UM/MOD FM/MOD SM/REM
105071d4279SBram Moolenaarsyn keyword forthOperators D+ D- DNEGATE DABS DMIN DMAX
106071d4279SBram Moolenaarsyn keyword forthOperators F+ F- F* F/ FNEGATE FABS FMAX FMIN FLOOR FROUND
107071d4279SBram Moolenaarsyn keyword forthOperators F** FSQRT FEXP FEXPM1 FLN FLNP1 FLOG FALOG FSIN
108071d4279SBram Moolenaarsyn keyword forthOperators FCOS FSINCOS FTAN FASIN FACOS FATAN FATAN2 FSINH
109071d4279SBram Moolenaarsyn keyword forthOperators FCOSH FTANH FASINH FACOSH FATANH
110071d4279SBram Moolenaarsyn keyword forthOperators 0< 0<= 0<> 0= 0> 0>= < <= <> = > >=
111071d4279SBram Moolenaarsyn keyword forthOperators ?NEGATE ?DNEGATE
112071d4279SBram Moolenaar
113071d4279SBram Moolenaar" stack manipulations
114071d4279SBram Moolenaarsyn keyword forthStack DROP NIP DUP OVER TUCK SWAP ROT -ROT ?DUP PICK ROLL
115071d4279SBram Moolenaarsyn keyword forthStack 2DROP 2NIP 2DUP 2OVER 2TUCK 2SWAP 2ROT
116071d4279SBram Moolenaarsyn keyword forthStack 3DUP 4DUP
117071d4279SBram Moolenaarsyn keyword forthRStack >R R> R@ RDROP 2>R 2R> 2R@ 2RDROP
118071d4279SBram Moolenaarsyn keyword forthFStack FDROP FNIP FDUP FOVER FTUCK FSWAP FROT
119071d4279SBram Moolenaar
120071d4279SBram Moolenaar" stack pointer manipulations
121071d4279SBram Moolenaarsyn keyword forthSP SP@ SP! FP@ FP! RP@ RP! LP@ LP!
122071d4279SBram Moolenaar
123071d4279SBram Moolenaar" address operations
124071d4279SBram Moolenaarsyn keyword forthMemory @ ! +! C@ C! 2@ 2! F@ F! SF@ SF! DF@ DF!
125071d4279SBram Moolenaarsyn keyword forthAdrArith CHARS CHAR+ CELLS CELL+ CELL ALIGN ALIGNED FLOATS
126071d4279SBram Moolenaarsyn keyword forthAdrArith FLOAT+ FLOAT FALIGN FALIGNED SFLOATS SFLOAT+
127071d4279SBram Moolenaarsyn keyword forthAdrArith SFALIGN SFALIGNED DFLOATS DFLOAT+ DFALIGN DFALIGNED
128071d4279SBram Moolenaarsyn keyword forthAdrArith MAXALIGN MAXALIGNED CFALIGN CFALIGNED
129071d4279SBram Moolenaarsyn keyword forthAdrArith ADDRESS-UNIT-BITS ALLOT ALLOCATE HERE
130071d4279SBram Moolenaarsyn keyword forthMemBlks MOVE ERASE CMOVE CMOVE> FILL BLANK
131071d4279SBram Moolenaar
132071d4279SBram Moolenaar" conditionals
133071d4279SBram Moolenaarsyn keyword forthCond IF ELSE ENDIF THEN CASE OF ENDOF ENDCASE ?DUP-IF
134071d4279SBram Moolenaarsyn keyword forthCond ?DUP-0=-IF AHEAD CS-PICK CS-ROLL CATCH THROW WITHIN
135071d4279SBram Moolenaar
136071d4279SBram Moolenaar" iterations
137071d4279SBram Moolenaarsyn keyword forthLoop BEGIN WHILE REPEAT UNTIL AGAIN
138071d4279SBram Moolenaarsyn keyword forthLoop ?DO LOOP I J K +DO U+DO -DO U-DO DO +LOOP -LOOP
139071d4279SBram Moolenaarsyn keyword forthLoop UNLOOP LEAVE ?LEAVE EXIT DONE FOR NEXT
140071d4279SBram Moolenaar
141071d4279SBram Moolenaar" new words
142071d4279SBram Moolenaarsyn match forthColonDef '\<:m\?\s*[^ \t]\+\>'
143071d4279SBram Moolenaarsyn keyword forthEndOfColonDef ; ;M ;m
144071d4279SBram Moolenaarsyn keyword forthDefine CONSTANT 2CONSTANT FCONSTANT VARIABLE 2VARIABLE CREATE
145071d4279SBram Moolenaarsyn keyword forthDefine USER VALUE TO DEFER IS DOES> IMMEDIATE COMPILE-ONLY
146071d4279SBram Moolenaarsyn keyword forthDefine COMPILE RESTRICT INTERPRET POSTPONE EXECUTE LITERAL
147071d4279SBram Moolenaarsyn keyword forthDefine CREATE-INTERPRET/COMPILE INTERPRETATION> <INTERPRETATION
148071d4279SBram Moolenaarsyn keyword forthDefine COMPILATION> <COMPILATION ] LASTXT COMP' POSTPONE,
149071d4279SBram Moolenaarsyn keyword forthDefine FIND-NAME NAME>INT NAME?INT NAME>COMP NAME>STRING STATE
150071d4279SBram Moolenaarsyn keyword forthDefine C; CVARIABLE
151071d4279SBram Moolenaarsyn match forthDefine "\[COMP']"
152071d4279SBram Moolenaarsyn match forthDefine "'"
153071d4279SBram Moolenaarsyn match forthDefine '\<\[\>'
154071d4279SBram Moolenaarsyn match forthDefine "\[']"
155071d4279SBram Moolenaarsyn match forthDefine '\[COMPILE]'
156071d4279SBram Moolenaarsyn match forthClassDef '\<:class\s*[^ \t]\+\>'
157071d4279SBram Moolenaarsyn match forthObjectDef '\<:object\s*[^ \t]\+\>'
158071d4279SBram Moolenaarsyn keyword forthEndOfClassDef ';class'
159071d4279SBram Moolenaarsyn keyword forthEndOfObjectDef ';object'
160071d4279SBram Moolenaar
161071d4279SBram Moolenaar" debugging
162071d4279SBram Moolenaarsyn keyword forthDebug PRINTDEBUGDATA PRINTDEBUGLINE
163071d4279SBram Moolenaarsyn match forthDebug "\<\~\~\>"
164071d4279SBram Moolenaar
165071d4279SBram Moolenaar" Assembler
166071d4279SBram Moolenaarsyn keyword forthAssembler ASSEMBLER CODE END-CODE ;CODE FLUSH-ICACHE C,
167071d4279SBram Moolenaar
168071d4279SBram Moolenaar" basic character operations
169071d4279SBram Moolenaarsyn keyword forthCharOps (.) CHAR EXPECT FIND WORD TYPE -TRAILING EMIT KEY
170071d4279SBram Moolenaarsyn keyword forthCharOps KEY? TIB CR
171071d4279SBram Moolenaar" recognize 'char (' or '[char] (' correctly, so it doesn't
172071d4279SBram Moolenaar" highlight everything after the paren as a comment till a closing ')'
173071d4279SBram Moolenaarsyn match forthCharOps '\<char\s\S\s'
174071d4279SBram Moolenaarsyn match forthCharOps '\<\[char\]\s\S\s'
175071d4279SBram Moolenaarsyn region forthCharOps start=+."\s+ skip=+\\"+ end=+"+
176071d4279SBram Moolenaar
177071d4279SBram Moolenaar" char-number conversion
178071d4279SBram Moolenaarsyn keyword forthConversion <# # #> #S (NUMBER) (NUMBER?) CONVERT D>F D>S DIGIT
179071d4279SBram Moolenaarsyn keyword forthConversion DPL F>D HLD HOLD NUMBER S>D SIGN >NUMBER
180071d4279SBram Moolenaar
181071d4279SBram Moolenaar" interptreter, wordbook, compiler
182071d4279SBram Moolenaarsyn keyword forthForth (LOCAL) BYE COLD ABORT >BODY >NEXT >LINK CFA >VIEW HERE
183071d4279SBram Moolenaarsyn keyword forthForth PAD WORDS VIEW VIEW> N>LINK NAME> LINK> L>NAME FORGET
184071d4279SBram Moolenaarsyn keyword forthForth BODY>
185071d4279SBram Moolenaarsyn region forthForth start=+ABORT"\s+ skip=+\\"+ end=+"+
186071d4279SBram Moolenaar
187071d4279SBram Moolenaar" vocabularies
188071d4279SBram Moolenaarsyn keyword forthVocs ONLY FORTH ALSO ROOT SEAL VOCS ORDER CONTEXT #VOCS
189071d4279SBram Moolenaarsyn keyword forthVocs VOCABULARY DEFINITIONS
190071d4279SBram Moolenaar
191071d4279SBram Moolenaar" numbers
192071d4279SBram Moolenaarsyn keyword forthMath DECIMAL HEX BASE
193071d4279SBram Moolenaarsyn match forthInteger '\<-\=[0-9.]*[0-9.]\+\>'
194071d4279SBram Moolenaar" recognize hex and binary numbers, the '$' and '%' notation is for gforth
195071d4279SBram Moolenaarsyn match forthInteger '\<\$\x*\x\+\>' " *1* --- dont't mess
196071d4279SBram Moolenaarsyn match forthInteger '\<\x*\d\x*\>'  " *2* --- this order!
197071d4279SBram Moolenaarsyn match forthInteger '\<%[0-1]*[0-1]\+\>'
198071d4279SBram Moolenaarsyn match forthFloat '\<-\=\d*[.]\=\d\+[Ee]\d\+\>'
199071d4279SBram Moolenaar
200071d4279SBram Moolenaar" Strings
201071d4279SBram Moolenaarsyn region forthString start=+\.*\"+ end=+"+ end=+$+
202071d4279SBram Moolenaar" XXX
203071d4279SBram Moolenaarsyn region forthString start=+s\"+ end=+"+ end=+$+
204071d4279SBram Moolenaarsyn region forthString start=+c\"+ end=+"+ end=+$+
205071d4279SBram Moolenaar
206071d4279SBram Moolenaar" Comments
207*3577c6faSBram Moolenaarsyn match forthComment '\\\s.*$' contains=forthTodo,forthSpaceError
208*3577c6faSBram Moolenaarsyn region forthComment start='\\S\s' end='.*' contains=forthTodo,forthSpaceError
209*3577c6faSBram Moolenaarsyn match forthComment '\.(\s[^)]*)' contains=forthTodo,forthSpaceError
210*3577c6faSBram Moolenaarsyn region forthComment start='\s(\s' skip='\\)' end=')' contains=forthTodo,forthSpaceError
211*3577c6faSBram Moolenaarsyn region forthComment start='/\*' end='\*/' contains=forthTodo,forthSpaceError
212071d4279SBram Moolenaar
213071d4279SBram Moolenaar" Include files
214071d4279SBram Moolenaarsyn match forthInclude '^INCLUDE\s\+\k\+'
215071d4279SBram Moolenaarsyn match forthInclude '^fload\s\+'
216071d4279SBram Moolenaarsyn match forthInclude '^needs\s\+'
217071d4279SBram Moolenaar
218071d4279SBram Moolenaar" Define the default highlighting.
219071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already
220071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet
221071d4279SBram Moolenaarif version >= 508 || !exists("did_forth_syn_inits")
222071d4279SBram Moolenaar    if version < 508
223071d4279SBram Moolenaar	let did_forth_syn_inits = 1
224071d4279SBram Moolenaar	command -nargs=+ HiLink hi link <args>
225071d4279SBram Moolenaar    else
226071d4279SBram Moolenaar	command -nargs=+ HiLink hi def link <args>
227071d4279SBram Moolenaar    endif
228071d4279SBram Moolenaar
229071d4279SBram Moolenaar    " The default methods for highlighting. Can be overriden later.
230071d4279SBram Moolenaar    HiLink forthTodo Todo
231071d4279SBram Moolenaar    HiLink forthOperators Operator
232071d4279SBram Moolenaar    HiLink forthMath Number
233071d4279SBram Moolenaar    HiLink forthInteger Number
234071d4279SBram Moolenaar    HiLink forthFloat Float
235071d4279SBram Moolenaar    HiLink forthStack Special
236071d4279SBram Moolenaar    HiLink forthRstack Special
237071d4279SBram Moolenaar    HiLink forthFStack Special
238071d4279SBram Moolenaar    HiLink forthSP Special
239071d4279SBram Moolenaar    HiLink forthMemory Function
240071d4279SBram Moolenaar    HiLink forthAdrArith Function
241071d4279SBram Moolenaar    HiLink forthMemBlks Function
242071d4279SBram Moolenaar    HiLink forthCond Conditional
243071d4279SBram Moolenaar    HiLink forthLoop Repeat
244071d4279SBram Moolenaar    HiLink forthColonDef Define
245071d4279SBram Moolenaar    HiLink forthEndOfColonDef Define
246071d4279SBram Moolenaar    HiLink forthDefine Define
247071d4279SBram Moolenaar    HiLink forthDebug Debug
248071d4279SBram Moolenaar    HiLink forthAssembler Include
249071d4279SBram Moolenaar    HiLink forthCharOps Character
250071d4279SBram Moolenaar    HiLink forthConversion String
251071d4279SBram Moolenaar    HiLink forthForth Statement
252071d4279SBram Moolenaar    HiLink forthVocs Statement
253071d4279SBram Moolenaar    HiLink forthString String
254071d4279SBram Moolenaar    HiLink forthComment Comment
255071d4279SBram Moolenaar    HiLink forthClassDef Define
256071d4279SBram Moolenaar    HiLink forthEndOfClassDef Define
257071d4279SBram Moolenaar    HiLink forthObjectDef Define
258071d4279SBram Moolenaar    HiLink forthEndOfObjectDef Define
259071d4279SBram Moolenaar    HiLink forthInclude Include
260*3577c6faSBram Moolenaar    HiLink forthSpaceError Error
261071d4279SBram Moolenaar
262071d4279SBram Moolenaar    delcommand HiLink
263071d4279SBram Moolenaarendif
264071d4279SBram Moolenaar
265071d4279SBram Moolenaarlet b:current_syntax = "forth"
266071d4279SBram Moolenaar
267071d4279SBram Moolenaar" vim:ts=8:sw=4:nocindent:smartindent:
268