| /* |
| Copyright 2002-2003 John Plevyak, All Rights Reserved |
| */ |
| #ifndef _dparse_tables_H_ |
| #define _dparse_tables_H_ |
| |
| #define SCANNER_BLOCKS_POW2 2 |
| #define SCANNER_BLOCKS (1 << SCANNER_BLOCKS_POW2) |
| #define SCANNER_BLOCK_SHIFT (8 - SCANNER_BLOCKS_POW2) |
| #define SCANNER_BLOCK_MASK ((1 << SCANNER_BLOCK_SHIFT) - 1) |
| #define SCANNER_BLOCK_SIZE (256 / SCANNER_BLOCKS) |
| |
| struct D_Parser; |
| struct D_ShiftTable; |
| |
| #define D_PN(_x, _o) ((D_ParseNode*)((char*)(_x) + _o)) |
| |
| typedef struct d_loc_t { |
| char *s, *pathname; |
| int previous_col, col, line; |
| } d_loc_t; |
| |
| typedef void (*D_WhiteSpaceFn)(struct D_Parser *p, |
| d_loc_t *loc, void **p_globals); |
| typedef int (*D_ScanCode)( |
| char **s, int *col, int *line, unsigned short *symbol, |
| int *term_priority, unsigned char *op_assoc, int *op_priority); |
| typedef int (*D_ReductionCode)( |
| void *new_ps, void **children, int n_children, int pn_offset, |
| struct D_Parser *parser); |
| |
| typedef struct D_Reduction { |
| unsigned short nelements; |
| unsigned short symbol; |
| D_ReductionCode speculative_code; |
| D_ReductionCode final_code; |
| unsigned short op_assoc; |
| unsigned short rule_assoc; |
| int op_priority; |
| int rule_priority; |
| int action_index; |
| int npass_code; |
| D_ReductionCode *pass_code; |
| } D_Reduction; |
| |
| typedef struct D_RightEpsilonHint { |
| unsigned short depth; |
| unsigned short preceeding_state; |
| D_Reduction *reduction; |
| } D_RightEpsilonHint; |
| |
| typedef struct D_ErrorRecoveryHint { |
| unsigned short depth; |
| unsigned short symbol; |
| char *string; |
| } D_ErrorRecoveryHint; |
| |
| typedef struct D_Shift { |
| unsigned short symbol; |
| unsigned char shift_kind; |
| unsigned char op_assoc; |
| int op_priority; |
| int term_priority; |
| D_ReductionCode speculative_code; |
| } D_Shift; |
| |
| typedef struct SB_uint8 { |
| D_Shift **shift; |
| unsigned char *scanner_block[SCANNER_BLOCKS]; |
| } SB_uint8; |
| |
| typedef struct SB_uint16 { |
| D_Shift **shift; |
| unsigned short *scanner_block[SCANNER_BLOCKS]; |
| } SB_uint16; |
| |
| typedef struct SB_uint32 { |
| D_Shift **shift; |
| unsigned int *scanner_block[SCANNER_BLOCKS]; |
| } SB_uint32; |
| |
| typedef struct SB_trans_uint8 { |
| unsigned char *scanner_block[SCANNER_BLOCKS]; |
| } SB_trans_uint8; |
| |
| typedef struct SB_trans_uint16 { |
| unsigned short *scanner_block[SCANNER_BLOCKS]; |
| } SB_trans_uint16; |
| |
| typedef struct SB_trans_uint32 { |
| unsigned int *scanner_block[SCANNER_BLOCKS]; |
| } SB_trans_uint32; |
| |
| #define D_SCAN_ALL 0 |
| #define D_SCAN_LONGEST 1 |
| #define D_SCAN_MIXED 2 |
| #define D_SCAN_RESERVED 3 |
| #define D_SCAN_DEFAULT D_SCAN_ALL |
| |
| typedef struct D_State { |
| unsigned char *goto_valid; |
| int goto_table_offset; |
| struct { |
| unsigned int n; |
| D_Reduction **v; |
| } reductions; |
| struct { |
| unsigned int n; |
| D_RightEpsilonHint *v; |
| } right_epsilon_hints; |
| struct { |
| unsigned int n; |
| D_ErrorRecoveryHint *v; |
| } error_recovery_hints; |
| D_Shift **shifts; |
| D_ScanCode scanner_code; |
| void* scanner_table; |
| unsigned char scanner_size; |
| unsigned char accept; |
| unsigned char scan_kind; |
| void* transition_table; |
| D_Shift ***accepts_diff; |
| int reduces_to; |
| } D_State; |
| |
| #define D_SHIFTS_CODE ((D_Shift**)-1) |
| |
| #define D_SYMBOL_NTERM 1 |
| #define D_SYMBOL_INTERNAL 2 |
| #define D_SYMBOL_STRING 3 |
| #define D_SYMBOL_REGEX 4 |
| #define D_SYMBOL_CODE 5 |
| #define D_SYMBOL_TOKEN 6 |
| typedef struct D_Symbol { |
| unsigned int kind; |
| char *name; |
| int name_len; |
| } D_Symbol; |
| |
| #define D_PASS_PRE_ORDER 0x0001 |
| #define D_PASS_POST_ORDER 0x0002 |
| #define D_PASS_MANUAL 0x0004 |
| #define D_PASS_FOR_ALL 0x0008 |
| #define D_PASS_FOR_UNDEFINED 0x0010 |
| typedef struct D_Pass { |
| char *name; |
| unsigned int name_len; |
| unsigned int kind; |
| unsigned int index; |
| } D_Pass; |
| |
| typedef struct D_ParserTables { |
| unsigned int nstates; |
| D_State *state; |
| unsigned short *goto_table; |
| unsigned int whitespace_state; |
| unsigned int nsymbols; |
| D_Symbol *symbols; |
| D_WhiteSpaceFn default_white_space; |
| unsigned int npasses; |
| D_Pass *passes; |
| unsigned int save_parse_tree; |
| } D_ParserTables; |
| |
| #endif |