⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lpgparse.h

📁 一个非常好的检索工具
💻 H
字号:
/* $Id: lpgparse.h,v 1.4 2001/10/10 14:53:10 ericb Exp $ *//* This software is subject to the terms of the IBM Jikes Compiler License Agreement available at the following URL: http://ibm.com/developerworks/opensource/jikes. Copyright (C) 1983, 1999, 2001 International Business Machines Corporation and others.  All Rights Reserved. You must accept the terms of that agreement to use this software.*//*******************************************************************//*******************************************************************//**                                                               **//**                        OPTIONS DECLARATIONS                   **//**                                                               **//*******************************************************************//*******************************************************************//* The following static variables are used only in processing the  *//* options.                                                        *//*******************************************************************/#define OUTPUT_PARM_SIZE MAX_PARM_SIZE + 7#define MAXIMUM_LA_LEVEL 15#define STRING_BUFFER_SIZE 8192#if defined(VM) || defined(CW)static char han[9] = "",            hat[9] = "INCLUDE",            ham[3] = "A",            an[9]  = "",            at[9]  = "ACTION",            am[3]  = "A",            pn[9]  = "",            pt[9]  = "H",            pm[3]  = "A",            sn[9]  = "",            st[9]  = "H",            sm[3]  = "A";#endifstatic const char *oaction             = "ACTION",                  *oactfile_name       = "ACTFILENAME",                  *oactfile_name2      = "ACTFILE-NAME",                  *oactfile_name3      = "ACTFILE_NAME",#if defined(VM) || defined(CW)                  *oactfile_type       = "ACTFILETYPE",                  *oactfile_type2      = "ACTFILE-TYPE",                  *oactfile_type3      = "ACTFILE_TYPE",                  *oactfile_mode       = "ACTFILEMODE",                  *oactfile_mode2      = "ACTFILE-MODE",                  *oactfile_mode3      = "ACTFILE_MODE",#endif                  *oblockb             = "BLOCKB",                  *oblocke             = "BLOCKE",                  *obyte               = "BYTE",                  *oconflicts          = "CONFLICTS",                  *odebug              = "DEBUG",                  *odefault            = "DEFAULT",                  *odeferred           = "DEFERRED",                  *oedit               = "EDIT",/*Option no longer used ...                  *oerrproc3           = "ERROR-PROC",                  *oerrproc2           = "ERROR_PROC",                  *oerrproc            = "ERRORPROC",*/                  *oerrormaps2         = "ERROR_MAPS",                  *oerrormaps3         = "ERROR-MAPS",                  *oerrormaps          = "ERRORMAPS",                  *oescape             = "ESCAPE",                  *ofile_prefix2       = "FILE_PREFIX",                  *ofile_prefix3       = "FILE-PREFIX",                  *ofile_prefix        = "FILEPREFIX",                  *ofirst              = "FIRST",                  *ofixed              = "FIXED",                  *ofollow             = "FOLLOW",                  *ofull               = "FULL",                  *ogenprsr3           = "GENERATE-PARSER",                  *ogenprsr2           = "GENERATE_PARSER",                  *ogenprsr            = "GENERATEPARSER",                  *ogotodefault2       = "GOTO_DEFAULT",                  *ogotodefault3       = "GOTO-DEFAULT",                  *ogotodefault        = "GOTODEFAULT",                  *ohactfile_name      = "HACTFILENAME",                  *ohactfile_name2     = "HACTFILE-NAME",                  *ohactfile_name3     = "HACTFILE_NAME",#if defined(VM) || defined(CW)                  *ohactfile_type      = "HACTFILETYPE",                  *ohactfile_type2     = "HACTFILE-TYPE",                  *ohactfile_type3     = "HACTFILE_TYPE",                  *ohactfile_mode      = "HACTFILEMODE",                  *ohactfile_mode2     = "HACTFILE-MODE",                  *ohactfile_mode3     = "HACTFILE_MODE",#endif                  *ohalfword2          = "HALF_WORD",                  *ohalfword3          = "HALF-WORD",                  *ohalfword           = "HALFWORD",                  *ohblockb            = "HBLOCKB",                  *ohblocke            = "HBLOCKE",                  *ojikes              = "JIKES",                  *olalr               = "LALR",                  *olist               = "LIST",                  *omax                = "MAXIMUM",                  *omaximum_distance2  = "MAX_DISTANCE",                  *omaximum_distance3  = "MAX-DISTANCE",                  *omaximum_distance   = "MAXDISTANCE",                  *omin                = "MINIMUM",                  *ominimum_distance2  = "MIN_DISTANCE",                  *ominimum_distance3  = "MIN-DISTANCE",                  *ominimum_distance   = "MINDISTANCE",                  *onames              = "NAMES",                  *ontcheck2           = "NT_CHECK",                  *ontcheck3           = "NT-CHECK",                  *ontcheck            = "NTCHECK",                  *ooptimized          = "OPTIMIZED",                  *oormark             = "ORMARK",                  *ooutputsize2        = "OUTPUT-SIZE",                  *ooutputsize3        = "OUTPUT_SIZE",                  *ooutputsize         = "OUTPUTSIZE",                  *oprefix             = "PREFIX",                  *oreadreduce2        = "READ_REDUCE",                  *oreadreduce3        = "READ-REDUCE",                  *oreadreduce         = "READREDUCE",#if defined(VM) || defined(CW)                  *orecordformat2      = "RECORD_FORMAT",                  *orecordformat3      = "RECORD-FORMAT",                  *orecordformat       = "RECORDFORMAT",#endif/*Option no longer used ...                  *ogettok             = "SCANNER_PROC",                  *ogettok2            = "SCANNER-PROC",                  *ogettok3            = "SCANNERPROC",*/                  *oscopes             = "SCOPES",                  *oshiftdefault2      = "SHIFT-DEFAULT",                  *oshiftdefault3      = "SHIFT_DEFAULT",                  *oshiftdefault       = "SHIFTDEFAULT",                  *osingleproductions2 = "SINGLE-PRODUCTIONS",                  *osingleproductions3 = "SINGLE_PRODUCTIONS",                  *osingleproductions  = "SINGLEPRODUCTIONS",                  *oslr                = "SLR",/*Option no longer used ...                  *osmactn2            = "SEMANTIC-PROC",                  *osmactn3            = "SEMANTIC_PROC",                  *osmactn             = "SEMANTICPROC",*/                  *ospace              = "SPACE",                  *ostack_size2        = "STACK_SIZE",                  *ostack_size3        = "STACK-SIZE",                  *ostack_size         = "STACKSIZE",                  *ostates             = "STATES",                  *osuffix             = "SUFFIX",                  *otable              = "TABLE",                  *otime               = "TIME",/*Option no longer used ...                  *otkactn3            = "TERMINAL-PROC",                  *otkactn2            = "TERMINAL_PROC",                  *otkactn             = "TERMINALPROC",*/                  *otrace              = "TRACE",                  *ovariable           = "VARIABLE",                  *overbose            = "VERBOSE",                  *owarnings           = "WARNINGS",                  *oxref               = "XREF";/*******************************************************************//*******************************************************************//**                                                               **//**                        PARSING DECLARATIONS                   **//**                                                               **//*******************************************************************//*******************************************************************//* The following static variables are used only in processing the  *//* the input source.                                               *//*******************************************************************/#define CTL_Z '\x1a'#undef  min#define min(x, y) ((x) < (y) ? (x) : (y))/*******************************************************************//*                                                                 *//*                             IO variables                        *//*                                                                 *//* The two character pointer variables, P1 and P2, are used in     *//* processing the io buffer, INPUT_BUFFER.                         *//*******************************************************************/static char *p1,            *p2,            *input_buffer;static char *linestart,            *bufend,            *ct_ptr;static short ct            = 0, /* current token & related variables */             ct_start_col  = 0,             ct_end_col    = 0,             ct_length     = 0;static long ct_start_line = 0,            ct_end_line   = 0;static int num_acts = 0,     /* macro definition & action variables */           num_defs = 0;static long defelmt_size = 0, /* macro definition & action vars */            actelmt_size = 0,            rulehdr_size = 0;struct rulehdr_type       /* structure to store rule in first pass */{    struct node *rhs_root;    short        lhs;    BOOLEAN      sp;};struct defelmt_type   /* structure to store location of macro def. */{    short                next,                         length,                         start_column,                         end_column;    char                *macro;    long                 start_line,                         end_line;    char                 name[SYMBOL_SIZE + 1];};struct actelmt_type       /* structure to store location of action */{    long    start_line,            end_line;    short   rule_number,            start_column,            end_column;    BOOLEAN header_block;};struct hash_type         /* structure used to hash grammar symbols */{    struct hash_type *link;    short             number,                      name_index;    int               st_ptr;};struct terminal_type   /* structure used to hold token information */{    long  start_line,          end_line;    short start_column,          end_column,          length,          kind;    char  name[SYMBOL_SIZE + 1];};static struct rulehdr_type   *rulehdr = NULL;static struct defelmt_type   *defelmt = NULL;static struct actelmt_type   *actelmt = NULL;static struct node           *start_symbol_root;static struct hash_type      **hash_table;static struct terminal_type  *terminal;/******************************************//* The following variables hold the names *//*  of keywords and predefined macros.    *//******************************************/static char kdefine[8]             = " define",            kterminals[11]         = " terminals",            kalias[7]              = " alias",            kstart[7]              = " start",            krules[7]              = " rules",            knames[7]              = " names",            kend[5]                = " end",            krule_text[11]         = " rule_text",            krule_number[13]       = " rule_number",            knum_rules[11]         = " num_rules",            krule_size[11]         = " rule_size",            knum_terminals[15]     = " num_terminals",            knum_non_terminals[19] = " num_non_terminals",            knum_symbols[13]       = " num_symbols",            kinput_file[12]        = " input_file",            kcurrent_line[14]      = " current_line",            knext_line[11]         = " next_line",     /*****************************************************************/     /* Note that the next four keywords start with \n instead of     */     /* the escape character.  This is to prevent the user from       */     /* declaring a grammar symbol with the same name.  The           */     /* end-of-line character was chosen since that character can     */     /* never appear in the input without being interpreted as        */     /* marking the end of an input line.  When printing such a       */     /* keyword, the \n is properly replaced by the escape character. */     /* See RESTORE_SYMBOL in the file LPGUTIL.C.                     */     /*****************************************************************/            kempty[7]              = "\nempty",            kerror[7]              = "\nerror",            keoft[5]               = "\neof",            kaccept[5]             = "\nacc",            kstart_nt[7]           = " start",            keolt[5]               = " eol";static struct line_elemt{    struct line_elemt *link;    char line[MAX_LINE_SIZE + 1];}  *line_pool_root = NULL;static int blockb_len,           blocke_len,           hblockb_len,           hblocke_len;static int stack_top = -1;static void init_process(void);static void exit_process(void);static BOOLEAN verify(char *item);static char *translate(char *str, int len);static void options(void);static void process_options_lines(void);static int hash(char *symbl);static void insert_string(struct hash_type *q, char *string);static void assign_symbol_no(char *string_ptr, int image);static void alias_map(char *stringptr, int image);static int symbol_image(char *item);static int name_map(char *symb);static void process_grammar(void);static void scanner(void);static void token_action(void);static void error_action(void);static void accept_action(void);static void build_symno(void);static struct hash_type *alias_root = NULL;static short *macro_table;static void make_rules_map(void);static void make_names_map(void);static void process_actions(void);static void process_action_line(FILE *sysout, char *text,                                int line_no, int rule_no);static struct line_elemt *alloc_line(void);static void free_line(struct line_elemt *p);static void mapmacro(int def_index);static struct line_elemt *find_macro(char *name);static void process_aliases(void);static void display_input(void);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -