fgen.h revision 1.9 1 /* $NetBSD: fgen.h,v 1.9 2010/02/08 20:14:55 eeh Exp $ */
2 /*
3 * fgen.h -- stuff for the fcode tokenizer.
4 *
5 * Copyright (c) 1998 Eduardo Horvath.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 /* Type of a Cell */
30 typedef int64_t Cell;
31
32 /* Token from the scanner. */
33 struct tok {
34 int type;
35 char *text;
36 };
37
38 #define TOKEN struct tok
39 #define YY_DECL TOKEN* yylex(void)
40
41 #define FCODE 0x000FC0DE
42 #define MACRO 0x0000F00D
43
44 /* Defined fcode and string. */
45 struct fcode {
46 const char *name;
47 long num;
48 int type;
49 struct fcode *l;
50 struct fcode *r;
51 };
52
53 /* macro instruction as separate words */
54 struct macro {
55 const char *name;
56 const char *equiv;
57 int type;
58 struct macro *l;
59 struct macro *r;
60 };
61
62 /*
63 * FCode header -- assumes big-endian machine,
64 * otherwise the bits need twiddling.
65 */
66 struct fcode_header {
67 char header;
68 char format;
69 short checksum;
70 int length;
71 };
72
73 /* Tokenizer tokens */
74 enum toktypes {
75 TOK_OCTAL = 8,
76 TOK_DECIMAL = 10,
77 TOK_HEX = 16,
78
79 TOK_NUMBER,
80 TOK_STRING_LIT,
81 TOK_C_LIT,
82 TOK_PSTRING,
83 TOK_TOKENIZE,
84 TOK_COMMENT,
85 TOK_COLON,
86 TOK_SEMICOLON,
87 TOK_TOSTRING,
88
89 /* These are special */
90 TOK_ABORT_S,
91 TOK_AGAIN,
92 TOK_ALIAS,
93 TOK_GETTOKEN,
94 TOK_ASCII,
95 TOK_BEGIN,
96 TOK_BUFFER,
97 TOK_CASE,
98 TOK_CONSTANT,
99 TOK_CONTROL,
100 TOK_CREATE,
101 TOK_DEFER,
102 TOK_DO,
103 TOK_ELSE,
104 TOK_END0,
105 TOK_ENDCASE,
106 TOK_ENDOF,
107 TOK_EXTERNAL,
108 TOK_FCODE_VERSION2,
109 TOK_FCODE_END,
110 TOK_FIELD,
111 TOK_HEADERLESS,
112 TOK_HEADERS,
113 TOK_IF,
114 TOK_LEAVE,
115 TOK_LOOP,
116 TOK_OF,
117 TOK_OFFSET16,
118 TOK_REPEAT,
119 TOK_STARTX,
120 TOK_THEN,
121 TOK_TO,
122 TOK_UNTIL,
123 TOK_VALUE,
124 TOK_VARIABLE,
125 TOK_VERSION1,
126 TOK_WHILE,
127
128 /* Tokenizer directives */
129 TOK_BEGTOK,
130 TOK_EMIT_BYTE,
131 TOK_ENDTOK,
132 TOK_FLOAD,
133
134 TOK_OTHER
135 };
136