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