]> gitweb.factorcode.org Git - factor.git/blob - basis/xmode/modes/forth.xml
450676b8e6ced88d45e2c22cd5f31acc12b203f1
[factor.git] / basis / xmode / modes / forth.xml
1 <?xml version="1.0"?>\r
2 <!DOCTYPE MODE SYSTEM "xmode.dtd">\r
3 \r
4 <!-- RetroForth is one of the nicest Forth implementations, so we\r
5 support that one. You can extend this to your own Forth's vocabulary\r
6 easily. -->\r
7 \r
8 <MODE>\r
9         <PROPS>\r
10                 <PROPERTY NAME="indentNextLines" VALUE="^:[^;]*" />\r
11                 <PROPERTY NAME="unindentNextLines" VALUE="^.*;$" />\r
12                 <PROPERTY NAME="commentStart" VALUE="(" />\r
13                 <PROPERTY NAME="commentEnd" VALUE=")" />\r
14                 <PROPERTY NAME="lineComment" VALUE="|" />\r
15                 <PROPERTY NAME="noWordSep" VALUE="+-*=&gt;&lt;;.?/'()%,_|$" />\r
16         </PROPS>\r
17         <RULES IGNORE_CASE="FALSE"\r
18                 NO_WORD_SEP="+-*=&gt;&lt;;.?/'&quot;()%,_$"\r
19                 HIGHLIGHT_DIGITS="TRUE"\r
20                 DIGIT_RE="|-?\d+([./]\d+)?">\r
21 \r
22                 <EOL_SPAN TYPE="COMMENT1" AT_WORD_START="TRUE">| </EOL_SPAN>\r
23 \r
24                 <MARK_FOLLOWING TYPE="DIGIT" AT_WORD_START="TRUE">$</MARK_FOLLOWING>\r
25                 <MARK_FOLLOWING TYPE="LITERAL3" AT_WORD_START="TRUE">'</MARK_FOLLOWING>\r
26 \r
27                 <!-- parsing words -->\r
28                 <SEQ_REGEXP TYPE="MARKUP"\r
29                         HASH_CHAR=":"\r
30                         AT_WORD_START="TRUE">:\s+(\S+)</SEQ_REGEXP>\r
31 \r
32                 <SPAN TYPE="COMMENT3" DELEGATE="STACK_EFFECT">\r
33                         <BEGIN>( </BEGIN>\r
34                         <END>)</END>\r
35                 </SPAN>\r
36 \r
37                 <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE"\r
38                         AT_WORD_START="TRUE">\r
39                         <BEGIN>s"</BEGIN>\r
40                         <END>"</END>\r
41                 </SPAN>\r
42 \r
43                 <SPAN TYPE="LITERAL2" NO_LINE_BREAK="TRUE"\r
44                         AT_WORD_START="TRUE">\r
45                         <BEGIN>."</BEGIN>\r
46                         <END>"</END>\r
47                 </SPAN>\r
48 \r
49                 <SPAN TYPE="LITERAL3" NO_LINE_BREAK="TRUE"\r
50                         AT_WORD_START="TRUE">\r
51                         <BEGIN>f"</BEGIN>\r
52                         <END>"</END>\r
53                 </SPAN>\r
54 \r
55                 <SPAN TYPE="LITERAL3" NO_LINE_BREAK="TRUE"\r
56                         AT_WORD_START="TRUE">\r
57                         <BEGIN>m"</BEGIN>\r
58                         <END>"</END>\r
59                 </SPAN>\r
60 \r
61                 <SPAN TYPE="LITERAL4" NO_LINE_BREAK="TRUE"\r
62                         AT_WORD_START="TRUE">\r
63                         <BEGIN>"</BEGIN>\r
64                         <END>"</END>\r
65                 </SPAN>\r
66 \r
67                 <KEYWORDS>\r
68                         <MARKUP>;</MARKUP>\r
69                         <MARKUP>;;</MARKUP>\r
70                         <MARKUP>0;</MARKUP>\r
71 \r
72                         <KEYWORD1>swap</KEYWORD1>\r
73                         <KEYWORD1>drop</KEYWORD1>\r
74                         <KEYWORD1>dup</KEYWORD1>\r
75                         <KEYWORD1>nip</KEYWORD1>\r
76                         <KEYWORD1>over</KEYWORD1>\r
77                         <KEYWORD1>rot</KEYWORD1>\r
78                         <KEYWORD1>-rot</KEYWORD1>\r
79                         <KEYWORD1>2dup</KEYWORD1>\r
80                         <KEYWORD1>2drop</KEYWORD1>\r
81                         <KEYWORD1>2over</KEYWORD1>\r
82                         <KEYWORD1>2swap</KEYWORD1>\r
83                         <KEYWORD1>&gt;r</KEYWORD1>\r
84                         <KEYWORD1>r&gt;</KEYWORD1>\r
85 \r
86                         <KEYWORD2>and</KEYWORD2>\r
87                         <KEYWORD2>or</KEYWORD2>\r
88                         <KEYWORD2>xor</KEYWORD2>\r
89                         <KEYWORD2>&gt;&gt;</KEYWORD2>\r
90                         <KEYWORD2>&lt;&lt;</KEYWORD2>\r
91                         <KEYWORD2>not</KEYWORD2>\r
92                         <KEYWORD2>+</KEYWORD2>\r
93                         <KEYWORD2>*</KEYWORD2>\r
94                         <KEYWORD2>negate</KEYWORD2>\r
95                         <KEYWORD2>-</KEYWORD2>\r
96                         <KEYWORD2>/</KEYWORD2>\r
97                         <KEYWORD2>mod</KEYWORD2>\r
98                         <KEYWORD2>/mod</KEYWORD2>\r
99                         <KEYWORD2>*/</KEYWORD2>\r
100                         <KEYWORD2>1+</KEYWORD2>\r
101                         <KEYWORD2>1-</KEYWORD2>\r
102                         <KEYWORD2>base</KEYWORD2>\r
103                         <KEYWORD2>hex</KEYWORD2>\r
104                         <KEYWORD2>decimal</KEYWORD2>\r
105                         <KEYWORD2>binary</KEYWORD2>\r
106                         <KEYWORD2>octal</KEYWORD2>\r
107 \r
108                         <KEYWORD3>@</KEYWORD3>\r
109                         <KEYWORD3>!</KEYWORD3>\r
110                         <KEYWORD3>c@</KEYWORD3>\r
111                         <KEYWORD3>c!</KEYWORD3>\r
112                         <KEYWORD3>+!</KEYWORD3>\r
113                         <KEYWORD3>cell+</KEYWORD3>\r
114                         <KEYWORD3>cells</KEYWORD3>\r
115                         <KEYWORD3>char+</KEYWORD3>\r
116                         <KEYWORD3>chars</KEYWORD3>\r
117 \r
118                         <KEYWORD4>[</KEYWORD4>\r
119                         <KEYWORD4>]</KEYWORD4>\r
120                         <KEYWORD4>create</KEYWORD4>\r
121                         <KEYWORD4>does&gt;</KEYWORD4>\r
122                         <KEYWORD4>variable</KEYWORD4>\r
123                         <KEYWORD4>variable,</KEYWORD4>\r
124                         <KEYWORD4>literal</KEYWORD4>\r
125                         <KEYWORD4>last</KEYWORD4>\r
126                         <KEYWORD4>1,</KEYWORD4>\r
127                         <KEYWORD4>2,</KEYWORD4>\r
128                         <KEYWORD4>3,</KEYWORD4>\r
129                         <KEYWORD4>,</KEYWORD4>\r
130                         <KEYWORD4>here</KEYWORD4>\r
131                         <KEYWORD4>allot</KEYWORD4>\r
132                         <KEYWORD4>parse</KEYWORD4>\r
133                         <KEYWORD4>find</KEYWORD4>\r
134                         <KEYWORD4>compile</KEYWORD4>\r
135 \r
136                         <OPERATOR>if</OPERATOR>\r
137                         <OPERATOR>=if</OPERATOR>\r
138                         <OPERATOR>&lt;if</OPERATOR>\r
139                         <OPERATOR>&gt;if</OPERATOR>\r
140                         <OPERATOR>&lt;&gt;if</OPERATOR>\r
141                         <OPERATOR>then</OPERATOR>\r
142                         <OPERATOR>repeat</OPERATOR>\r
143                         <OPERATOR>until</OPERATOR>\r
144 \r
145                         <OPERATOR>forth</OPERATOR>\r
146                         <OPERATOR>macro</OPERATOR>\r
147                 </KEYWORDS>\r
148         </RULES>\r
149 \r
150         <RULES SET="STACK_EFFECT" DEFAULT="COMMENT4">\r
151                 <SEQ TYPE="COMMENT3">--</SEQ>\r
152         </RULES>\r
153 </MODE>\r