1/* $NetBSD: fgen.h,v 1.4 2001/06/13 10:46:05 wiz 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 */ 30typedef int64_t Cell; 31 32/* Token from the scanner. */ 33struct 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. */ 45struct 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 */ 54struct 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 */ 66struct fcode_header { 67 char header; 68 char format; 69 short checksum; 70 int length; 71}; 72 73/* Tokenizer tokens */ 74enum 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