Annotation of src/usr.bin/lex/tables_shared.h, Revision 1.1
1.1 ! tedu 1: /* $OpenBSD$ */
! 2:
! 3: #ifdef FLEX_SCANNER
! 4: /*
! 5: dnl tables_shared.h - tables serialization header
! 6: dnl
! 7: dnl Copyright (c) 1990 The Regents of the University of California.
! 8: dnl All rights reserved.
! 9: dnl
! 10: dnl This code is derived from software contributed to Berkeley by
! 11: dnl Vern Paxson.
! 12: dnl
! 13: dnl The United States Government has rights in this work pursuant
! 14: dnl to contract no. DE-AC03-76SF00098 between the United States
! 15: dnl Department of Energy and the University of California.
! 16: dnl
! 17: dnl This file is part of flex.
! 18: dnl
! 19: dnl Redistribution and use in source and binary forms, with or without
! 20: dnl modification, are permitted provided that the following conditions
! 21: dnl are met:
! 22: dnl
! 23: dnl 1. Redistributions of source code must retain the above copyright
! 24: dnl notice, this list of conditions and the following disclaimer.
! 25: dnl 2. Redistributions in binary form must reproduce the above copyright
! 26: dnl notice, this list of conditions and the following disclaimer in the
! 27: dnl documentation and/or other materials provided with the distribution.
! 28: dnl
! 29: dnl Neither the name of the University nor the names of its contributors
! 30: dnl may be used to endorse or promote products derived from this software
! 31: dnl without specific prior written permission.
! 32: dnl
! 33: dnl THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
! 34: dnl IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! 35: dnl WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
! 36: dnl PURPOSE.
! 37:
! 38: dnl
! 39: dnl This file is meant to be included in both the skeleton and the actual
! 40: dnl flex code (hence the name "_shared").
! 41: */
! 42: #ifndef yyskel_static
! 43: #define yyskel_static static
! 44: #endif
! 45: #else
! 46: #ifndef yyskel_static
! 47: #define yyskel_static
! 48: #endif
! 49: #endif
! 50:
! 51: /* Structures and prototypes for serializing flex tables. The
! 52: * binary format is documented in the manual.
! 53: *
! 54: * Design considerations:
! 55: *
! 56: * - The format allows many tables per file.
! 57: * - The tables can be streamed.
! 58: * - All data is stored in network byte order.
! 59: * - We do not hinder future unicode support.
! 60: * - We can lookup tables by name.
! 61: */
! 62:
! 63: /** Magic number for serialized format. */
! 64: #ifndef YYTBL_MAGIC
! 65: #define YYTBL_MAGIC 0xF13C57B1
! 66: #endif
! 67:
! 68: /** Calculate (0-7) = number bytes needed to pad n to next 64-bit boundary. */
! 69: #ifndef yypad64
! 70: #define yypad64(n) ((8-((n)%8))%8)
! 71: #endif
! 72:
! 73:
! 74: #ifndef YYTABLES_TYPES
! 75: #define YYTABLES_TYPES
! 76: /** Possible values for td_id field. Each one corresponds to a
! 77: * scanner table of the same name.
! 78: */
! 79: enum yytbl_id {
! 80: YYTD_ID_ACCEPT = 0x01, /**< 1-dim ints */
! 81: YYTD_ID_BASE = 0x02, /**< 1-dim ints */
! 82: YYTD_ID_CHK = 0x03, /**< 1-dim ints */
! 83: YYTD_ID_DEF = 0x04, /**< 1-dim ints */
! 84: YYTD_ID_EC = 0x05, /**< 1-dim ints */
! 85: YYTD_ID_META = 0x06, /**< 1-dim ints */
! 86: YYTD_ID_NUL_TRANS = 0x07, /**< 1-dim ints, maybe indices */
! 87: YYTD_ID_NXT = 0x08, /**< may be 2 dimensional ints */
! 88: YYTD_ID_RULE_CAN_MATCH_EOL = 0x09, /**< 1-dim ints */
! 89: YYTD_ID_START_STATE_LIST = 0x0A, /**< 1-dim indices into trans tbl */
! 90: YYTD_ID_TRANSITION = 0x0B, /**< structs */
! 91: YYTD_ID_ACCLIST = 0x0C /**< 1-dim ints */
! 92: };
! 93:
! 94: /** bit flags for t_flags field of struct yytbl_data */
! 95: enum yytbl_flags {
! 96: /* These first three are mutually exclusive */
! 97: YYTD_DATA8 = 0x01, /**< data is an array of type flex_int8_t */
! 98: YYTD_DATA16 = 0x02, /**< data is an array of type flex_int16_t */
! 99: YYTD_DATA32 = 0x04, /**< data is an array of type flex_int32_t */
! 100:
! 101: /* These two are mutually exclusive. */
! 102: YYTD_PTRANS = 0x08, /**< data is a list of indexes of entries
! 103: into the expanded `yy_transition'
! 104: array. See notes in manual. */
! 105: YYTD_STRUCT = 0x10 /**< data consists of yy_trans_info structs */
! 106: };
! 107:
! 108: /* The serialized tables header. */
! 109: struct yytbl_hdr {
! 110: flex_uint32_t th_magic; /**< Must be 0xF13C57B1 (comes from "Flex Table") */
! 111: flex_uint32_t th_hsize; /**< Size of this header in bytes. */
! 112: flex_uint32_t th_ssize; /**< Size of this dataset, in bytes, including header. */
! 113: flex_uint16_t th_flags; /**< Currently unused, must be 0 */
! 114: char *th_version; /**< Flex version string. NUL terminated. */
! 115: char *th_name; /**< The name of this table set. NUL terminated. */
! 116: };
! 117:
! 118: /** A single serialized table */
! 119: struct yytbl_data {
! 120: flex_uint16_t td_id; /**< enum yytbl_id table identifier */
! 121: flex_uint16_t td_flags; /**< how to interpret this data */
! 122: flex_uint32_t td_hilen; /**< num elements in highest dimension array */
! 123: flex_uint32_t td_lolen; /**< num elements in lowest dimension array */
! 124: void *td_data; /**< table data */
! 125: };
! 126: #endif
! 127:
! 128: /** Extract corresponding data size_t from td_flags */
! 129: #ifndef YYTDFLAGS2BYTES
! 130: #define YYTDFLAGS2BYTES(td_flags)\
! 131: (((td_flags) & YYTD_DATA8)\
! 132: ? sizeof(flex_int8_t)\
! 133: :(((td_flags) & YYTD_DATA16)\
! 134: ? sizeof(flex_int16_t)\
! 135: :sizeof(flex_int32_t)))
! 136: #endif
! 137:
! 138: #ifdef FLEX_SCANNER
! 139: %not-for-header
! 140: #endif
! 141: yyskel_static flex_int32_t yytbl_calc_total_len (const struct yytbl_data *tbl);
! 142: #ifdef FLEX_SCANNER
! 143: %ok-for-header
! 144: #endif
! 145:
! 146: /* vim:set noexpandtab cindent tabstop=8 softtabstop=0 shiftwidth=8 textwidth=0: */