Better ANSI C compatibility and portability - part 1:
+ Addition of function prototypes. + Change function definitions to ANSI C style.
This commit is contained in:
parent
f49a5a24f7
commit
42bbdec82d
|
@ -2,6 +2,7 @@
|
||||||
#ifdef LL_DEBUG
|
#ifdef LL_DEBUG
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#define LL_assert(x) assert(x)
|
#define LL_assert(x) assert(x)
|
||||||
#else
|
#else
|
||||||
#define LL_assert(x) /* nothing */
|
#define LL_assert(x) /* nothing */
|
||||||
|
@ -30,7 +31,6 @@ extern int LLstartsymb;
|
||||||
#define LLsincr(d) LLscnt[d]++
|
#define LLsincr(d) LLscnt[d]++
|
||||||
#define LLtincr(d) LLtcnt[d]++
|
#define LLtincr(d) LLtcnt[d]++
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
extern int LL_LEXI(void);
|
extern int LL_LEXI(void);
|
||||||
extern void LLread(void);
|
extern void LLread(void);
|
||||||
extern int LLskip(void);
|
extern int LLskip(void);
|
||||||
|
@ -48,21 +48,3 @@ extern int LLfirst(int, int);
|
||||||
#if LL_NON_CORR
|
#if LL_NON_CORR
|
||||||
extern void LLnc_recover(void);
|
extern void LLnc_recover(void);
|
||||||
#endif
|
#endif
|
||||||
#else /* not LL_ANSI_C */
|
|
||||||
extern LLread();
|
|
||||||
extern int LLskip();
|
|
||||||
extern int LLnext();
|
|
||||||
extern LLerror();
|
|
||||||
extern LLsafeerror();
|
|
||||||
extern LLnewlevel();
|
|
||||||
extern LLoldlevel();
|
|
||||||
#ifndef LL_FASTER
|
|
||||||
extern LLscan();
|
|
||||||
#endif
|
|
||||||
#ifndef LLNOFIRSTS
|
|
||||||
extern int LLfirst();
|
|
||||||
#endif
|
|
||||||
#if LL_NON_CORR
|
|
||||||
extern LLnc_recover();
|
|
||||||
#endif
|
|
||||||
#endif /* not LL_ANSI_C */
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
compile with -DNOFIRST to disable firstset optimization
|
compile with -DNOFIRST to disable firstset optimization
|
||||||
|
@ -12,9 +13,7 @@
|
||||||
extern int LLsymb;
|
extern int LLsymb;
|
||||||
extern int LLstartsymb;
|
extern int LLstartsymb;
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
void LLmessage(int);
|
void LLmessage(int);
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
struct stacks {
|
struct stacks {
|
||||||
|
@ -119,37 +118,21 @@ static struct nonterminal *nonterminals;
|
||||||
/* These functions must be called instead of the original functions in
|
/* These functions must be called instead of the original functions in
|
||||||
* 'malloc.h'. They offer a checking allocation mechanism.
|
* 'malloc.h'. They offer a checking allocation mechanism.
|
||||||
*/
|
*/
|
||||||
#if LL_ANSI_C
|
|
||||||
static char *Malloc(unsigned);
|
static char *Malloc(unsigned);
|
||||||
static char *Realloc(char*, unsigned);
|
static char *Realloc(char*, unsigned);
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
static char *Malloc();
|
|
||||||
static char *Realloc();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* These functions build the grammar */
|
/* These functions build the grammar */
|
||||||
#if LL_ANSI_C
|
|
||||||
static void init_grammar(void);
|
static void init_grammar(void);
|
||||||
static void build_grammar(void);
|
static void build_grammar(void);
|
||||||
static struct lhs *build_rule(void);
|
static struct lhs *build_rule(void);
|
||||||
static struct symbol *build_rhs(struct lhs*);
|
static struct symbol *build_rhs(struct lhs*);
|
||||||
static struct symbol *make_link(struct symbol*);
|
static struct symbol *make_link(struct symbol*);
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
static init_grammar();
|
|
||||||
static build_grammar();
|
|
||||||
static struct lhs *build_rule();
|
|
||||||
static struct symbol *build_rhs();
|
|
||||||
static struct symbol *make_link();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* These functions operate on the stacks */
|
/* These functions operate on the stacks */
|
||||||
#if LL_ANSI_C
|
|
||||||
static int optimize(struct stacks*, struct symbol*, int);
|
static int optimize(struct stacks*, struct symbol*, int);
|
||||||
static void read_token(void);
|
static void read_token(void);
|
||||||
static void start_stack(struct stacks*, int, int);
|
static void start_stack(struct stacks*, int, int);
|
||||||
|
@ -179,43 +162,9 @@ static void calculate(struct stacks*, int);
|
||||||
static void kill_stack(struct stacks *stack);
|
static void kill_stack(struct stacks *stack);
|
||||||
void LLnc_recover(void);
|
void LLnc_recover(void);
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
static int optimize();
|
|
||||||
static read_token();
|
|
||||||
static start_stack();
|
|
||||||
static continuation();
|
|
||||||
static struct stack_elt *push_rule();
|
|
||||||
static new_head();
|
|
||||||
static to_delete();
|
|
||||||
static substitute();
|
|
||||||
static int join();
|
|
||||||
static int path();
|
|
||||||
static int part_of_loop();
|
|
||||||
static generate_heads();
|
|
||||||
static delete();
|
|
||||||
static hyp_run();
|
|
||||||
static check_run();
|
|
||||||
static struct stack_elt *split();
|
|
||||||
static test();
|
|
||||||
static dump_stack();
|
|
||||||
static clear_flags();
|
|
||||||
static clear_gen_flags();
|
|
||||||
static match_heads();
|
|
||||||
static cleanup();
|
|
||||||
static initialize();
|
|
||||||
static calculate();
|
|
||||||
static kill_stack();
|
|
||||||
LLnc_recover();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static char *Malloc(unsigned size)
|
static char *Malloc(unsigned size)
|
||||||
#else
|
|
||||||
static char *Malloc(size)
|
|
||||||
unsigned size;
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
|
@ -227,13 +176,7 @@ unsigned size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static char *Realloc(char *ptr, unsigned size)
|
static char *Realloc(char *ptr, unsigned size)
|
||||||
#else
|
|
||||||
static char *Realloc(ptr, size)
|
|
||||||
char *ptr;
|
|
||||||
unsigned size;
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
|
@ -245,11 +188,7 @@ unsigned size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void init_grammar(void)
|
static void init_grammar(void)
|
||||||
#else
|
|
||||||
static init_grammar()
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
/* Allocate and initialize an array for terminals and nonterminals */
|
/* Allocate and initialize an array for terminals and nonterminals */
|
||||||
|
|
||||||
|
@ -270,11 +209,7 @@ static init_grammar()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void build_grammar(void)
|
static void build_grammar(void)
|
||||||
#else
|
|
||||||
static build_grammar()
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
/* Build a rule for every nonterminal. The LHS must be saved first because
|
/* Build a rule for every nonterminal. The LHS must be saved first because
|
||||||
* of the fact that the right side of an assignment statement (in C) will
|
* of the fact that the right side of an assignment statement (in C) will
|
||||||
|
@ -290,11 +225,7 @@ static build_grammar()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static struct lhs *build_rule(void)
|
static struct lhs *build_rule(void)
|
||||||
#else
|
|
||||||
static struct lhs *build_rule()
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
/* Build LHS and call a funcion to create RHS */
|
/* Build LHS and call a funcion to create RHS */
|
||||||
|
|
||||||
|
@ -322,12 +253,7 @@ static struct lhs *build_rule()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static struct symbol *build_rhs(struct lhs *l)
|
static struct symbol *build_rhs(struct lhs *l)
|
||||||
#else
|
|
||||||
static struct symbol *build_rhs(l)
|
|
||||||
struct lhs *l;
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
/* Build RHS by creating structs for all symbols including ALT and
|
/* Build RHS by creating structs for all symbols including ALT and
|
||||||
* EORULE. Also call a function for linking same terminals and
|
* EORULE. Also call a function for linking same terminals and
|
||||||
|
@ -371,12 +297,7 @@ struct lhs *l;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static struct symbol *make_link(struct symbol *r)
|
static struct symbol *make_link(struct symbol *r)
|
||||||
#else
|
|
||||||
static struct symbol *make_link(r)
|
|
||||||
struct symbol *r;
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
/* Link same terminals and nonterminals. Every new symbol is appended
|
/* Link same terminals and nonterminals. Every new symbol is appended
|
||||||
* in front of the corresponding list for efficiency.
|
* in front of the corresponding list for efficiency.
|
||||||
|
@ -400,15 +321,7 @@ struct symbol *r;
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static int optimize(struct stacks* stack, struct symbol *symb_ptr, int l_ahead)
|
static int optimize(struct stacks* stack, struct symbol *symb_ptr, int l_ahead)
|
||||||
#else
|
|
||||||
static int optimize(stack, symb_ptr, l_ahead)
|
|
||||||
struct stacks *stack;
|
|
||||||
struct symbol *symb_ptr;
|
|
||||||
int l_ahead;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Return 1 if rule symb_ptr can start with terminal l_ahead, else return 0.
|
/* Return 1 if rule symb_ptr can start with terminal l_ahead, else return 0.
|
||||||
* The array with expected terminals will also be filled in.
|
* The array with expected terminals will also be filled in.
|
||||||
*/
|
*/
|
||||||
|
@ -463,12 +376,7 @@ int l_ahead;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void read_token(void)
|
static void read_token(void)
|
||||||
#else
|
|
||||||
static read_token()
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Read token and put it in global variable LLsymb, skipping
|
/* Read token and put it in global variable LLsymb, skipping
|
||||||
* invalid tokens
|
* invalid tokens
|
||||||
*/
|
*/
|
||||||
|
@ -482,16 +390,8 @@ static read_token()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void start_stack(struct stacks *stack, int base, int l_ahead)
|
static void start_stack(struct stacks *stack, int base, int l_ahead)
|
||||||
#else
|
|
||||||
static start_stack(stack, base, l_ahead)
|
|
||||||
struct stacks *stack;
|
|
||||||
int base, l_ahead;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Start stack on base symbol base with lookahead l_ahead */
|
/* Start stack on base symbol base with lookahead l_ahead */
|
||||||
|
|
||||||
{
|
{
|
||||||
struct stack_elt *bottom, *top;
|
struct stack_elt *bottom, *top;
|
||||||
struct symbol *symb_ptr;
|
struct symbol *symb_ptr;
|
||||||
|
@ -587,14 +487,7 @@ int base, l_ahead;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void continuation(struct stacks *stack, int nt, int l_ahead)
|
static void continuation(struct stacks *stack, int nt, int l_ahead)
|
||||||
#else
|
|
||||||
static continuation(stack, nt, l_ahead)
|
|
||||||
struct stacks *stack;
|
|
||||||
int nt, l_ahead;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* We have 'eaten' a whole stack, and think we recognized nt. Now
|
/* We have 'eaten' a whole stack, and think we recognized nt. Now
|
||||||
look for rules that we can proceed with, ie containing nt in the RHS.
|
look for rules that we can proceed with, ie containing nt in the RHS.
|
||||||
Each rule found will be developed untill a terminal is at the top
|
Each rule found will be developed untill a terminal is at the top
|
||||||
|
@ -680,15 +573,8 @@ of the stack.*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static struct stack_elt *push_rule(struct stack_elt *element,
|
static struct stack_elt *push_rule(struct stack_elt *element,
|
||||||
struct symbol *symb_ptr)
|
struct symbol *symb_ptr)
|
||||||
#else
|
|
||||||
static struct stack_elt *push_rule(element, symb_ptr)
|
|
||||||
struct stack_elt *element;
|
|
||||||
struct symbol *symb_ptr;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Append the rule symb_ptr to stack element 'element'. Return a
|
/* Append the rule symb_ptr to stack element 'element'. Return a
|
||||||
* pointer to the new top of the stack
|
* pointer to the new top of the stack
|
||||||
*/
|
*/
|
||||||
|
@ -735,14 +621,7 @@ struct symbol *symb_ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void new_head(struct stacks *stack, struct stack_elt *ptr)
|
static void new_head(struct stacks *stack, struct stack_elt *ptr)
|
||||||
#else
|
|
||||||
static new_head(stack, ptr)
|
|
||||||
struct stacks *stack;
|
|
||||||
struct stack_elt *ptr;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Make ptr a head of stack */
|
/* Make ptr a head of stack */
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -773,14 +652,7 @@ struct stack_elt *ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void to_delete(struct stacks *stack, struct stack_elt *ptr)
|
static void to_delete(struct stacks *stack, struct stack_elt *ptr)
|
||||||
#else
|
|
||||||
static to_delete(stack, ptr)
|
|
||||||
struct stacks *stack;
|
|
||||||
struct stack_elt *ptr;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Remember that ptr has to be deleted */
|
/* Remember that ptr has to be deleted */
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -814,15 +686,7 @@ struct stack_elt *ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void substitute(struct stacks *stack, struct stack_elt *top, int l_ahead)
|
static void substitute(struct stacks *stack, struct stack_elt *top, int l_ahead)
|
||||||
#else
|
|
||||||
static substitute(stack, top, l_ahead)
|
|
||||||
struct stacks *stack;
|
|
||||||
struct stack_elt *top;
|
|
||||||
int l_ahead;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This function substitutes the NT pointed to by 'top'. 'top' should be a top
|
/* This function substitutes the NT pointed to by 'top'. 'top' should be a top
|
||||||
* of a stack
|
* of a stack
|
||||||
*/
|
*/
|
||||||
|
@ -900,15 +764,7 @@ int l_ahead;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static int join(struct stacks *stack, struct stack_elt *top, int l_ahead)
|
static int join(struct stacks *stack, struct stack_elt *top, int l_ahead)
|
||||||
#else
|
|
||||||
static int join(stack, top, l_ahead)
|
|
||||||
struct stacks *stack;
|
|
||||||
struct stack_elt *top;
|
|
||||||
int l_ahead;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This function tries to connect a NT on top of a stack with another stack,
|
/* This function tries to connect a NT on top of a stack with another stack,
|
||||||
* which has already substituted this NT
|
* which has already substituted this NT
|
||||||
*/
|
*/
|
||||||
|
@ -977,13 +833,7 @@ int l_ahead;
|
||||||
|
|
||||||
#ifndef NOLOOPS
|
#ifndef NOLOOPS
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static int path(struct stack_elt *se1, struct stack_elt *se2)
|
static int path(struct stack_elt *se1, struct stack_elt *se2)
|
||||||
#else
|
|
||||||
static int path(se1, se2)
|
|
||||||
struct stack_elt *se1, *se2;
|
|
||||||
#endif /* LL_ANSI_C */
|
|
||||||
|
|
||||||
/* If there is a path from se1 to se2 it returns 1 and marks all the paths
|
/* If there is a path from se1 to se2 it returns 1 and marks all the paths
|
||||||
* betweeen these two points, otherwise it returns 0. The flags LLYES and
|
* betweeen these two points, otherwise it returns 0. The flags LLYES and
|
||||||
* LLNO are used for optimization. */
|
* LLNO are used for optimization. */
|
||||||
|
@ -1014,13 +864,7 @@ struct stack_elt *se1, *se2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static int part_of_loop(struct stack_elt *se)
|
static int part_of_loop(struct stack_elt *se)
|
||||||
#else
|
|
||||||
static int part_of_loop(se)
|
|
||||||
struct stack_elt *se;
|
|
||||||
#endif /* LL_ANSI_C */
|
|
||||||
|
|
||||||
/* Checks if 'se' belongs to a loop */
|
/* Checks if 'se' belongs to a loop */
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -1034,16 +878,8 @@ struct stack_elt *se;
|
||||||
#endif /* NOLOOPS */
|
#endif /* NOLOOPS */
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void generate_heads(struct stacks *stack, struct stack_elt *se,
|
static void generate_heads(struct stacks *stack, struct stack_elt *se,
|
||||||
int l_ahead)
|
int l_ahead)
|
||||||
#else
|
|
||||||
static generate_heads(stack, se, l_ahead)
|
|
||||||
struct stacks *stack;
|
|
||||||
struct stack_elt *se;
|
|
||||||
int l_ahead;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This funcion finds all heads starting at 'se'. */
|
/* This funcion finds all heads starting at 'se'. */
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -1104,14 +940,7 @@ int l_ahead;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void delete(struct stacks *stack, struct stack_elt *se)
|
static void delete(struct stacks *stack, struct stack_elt *se)
|
||||||
#else
|
|
||||||
static delete(stack, se)
|
|
||||||
struct stacks *stack;
|
|
||||||
struct stack_elt *se;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This function runs down the stack(s) deleting every element which cannot be
|
/* This function runs down the stack(s) deleting every element which cannot be
|
||||||
* reached anymore. */
|
* reached anymore. */
|
||||||
{
|
{
|
||||||
|
@ -1172,13 +1001,7 @@ struct stack_elt *se;
|
||||||
|
|
||||||
#ifndef NOLOOPS
|
#ifndef NOLOOPS
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void hyp_run(struct stack_elt *se)
|
static void hyp_run(struct stack_elt *se)
|
||||||
#else
|
|
||||||
static hyp_run(se)
|
|
||||||
struct stack_elt *se;
|
|
||||||
#endif /* LL_ANSI_C */
|
|
||||||
|
|
||||||
/* This function sets the 'hyp_ref_counts' of all elements of the loop that
|
/* This function sets the 'hyp_ref_counts' of all elements of the loop that
|
||||||
* 'se' belongs to to the value that 'ref_count' will get when 'se' is
|
* 'se' belongs to to the value that 'ref_count' will get when 'se' is
|
||||||
* deleted
|
* deleted
|
||||||
|
@ -1212,14 +1035,7 @@ struct stack_elt *se;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void check_run(struct stacks *stack, struct stack_elt *se)
|
static void check_run(struct stacks *stack, struct stack_elt *se)
|
||||||
#else
|
|
||||||
static check_run(stack, se)
|
|
||||||
struct stacks *stack;
|
|
||||||
struct stack_elt *se;
|
|
||||||
#endif /* LL_ANSI_C */
|
|
||||||
|
|
||||||
/* This function checks all 'hyp_ref_counts' that 'hyp_run()' has set.
|
/* This function checks all 'hyp_ref_counts' that 'hyp_run()' has set.
|
||||||
* If one of them is not 0, 'check_run_ok' will be set to 0 indicating
|
* If one of them is not 0, 'check_run_ok' will be set to 0 indicating
|
||||||
* that 'se' cannot be deleted. 'check_run()' also resets all 'hyp_ref_counts'
|
* that 'se' cannot be deleted. 'check_run()' also resets all 'hyp_ref_counts'
|
||||||
|
@ -1244,13 +1060,7 @@ struct stack_elt *se;
|
||||||
#endif /* NOLOOPS */
|
#endif /* NOLOOPS */
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static struct stack_elt *split(struct stack_elt *se)
|
static struct stack_elt *split(struct stack_elt *se)
|
||||||
#else
|
|
||||||
static struct stack_elt *split(se)
|
|
||||||
struct stack_elt *se;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This function splits of a NT in de stack, and returns a pointer to it */
|
/* This function splits of a NT in de stack, and returns a pointer to it */
|
||||||
{
|
{
|
||||||
struct stack_elt *new_stack;
|
struct stack_elt *new_stack;
|
||||||
|
@ -1296,12 +1106,7 @@ struct stack_elt *se;
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
#if LL_ANSI_C
|
|
||||||
static void test(struct stacks *stack)
|
static void test(struct stacks *stack)
|
||||||
#else
|
|
||||||
static test(stack)
|
|
||||||
struct stacks *stack;
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
struct stack_elt *se;
|
struct stack_elt *se;
|
||||||
int i;
|
int i;
|
||||||
|
@ -1320,13 +1125,7 @@ struct stacks *stack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void dump_stack(struct stack_elt *se, int level)
|
static void dump_stack(struct stack_elt *se, int level)
|
||||||
#else
|
|
||||||
static dump_stack(se, level)
|
|
||||||
struct stack_elt *se;
|
|
||||||
int level;
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
|
@ -1385,14 +1184,7 @@ int level;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void clear_flags(struct stack_elt *se, char flag)
|
static void clear_flags(struct stack_elt *se, char flag)
|
||||||
#else
|
|
||||||
static clear_flags(se, flag)
|
|
||||||
struct stack_elt *se;
|
|
||||||
char flag;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Clears edge flag 'flag' */
|
/* Clears edge flag 'flag' */
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -1405,13 +1197,7 @@ char flag;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void clear_gen_flags(struct stacks *stack)
|
static void clear_gen_flags(struct stacks *stack)
|
||||||
#else
|
|
||||||
static clear_gen_flags(stack)
|
|
||||||
struct stacks *stack;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -1423,14 +1209,7 @@ struct stacks *stack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void match_heads(struct stacks *stack, int symb)
|
static void match_heads(struct stacks *stack, int symb)
|
||||||
#else
|
|
||||||
static match_heads(stack, symb)
|
|
||||||
struct stacks *stack;
|
|
||||||
int symb;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Match heads_buf against symb, leaving only matching heads,
|
/* Match heads_buf against symb, leaving only matching heads,
|
||||||
* whilst deallocating the non-matching stacks
|
* whilst deallocating the non-matching stacks
|
||||||
*/
|
*/
|
||||||
|
@ -1482,13 +1261,7 @@ int symb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void cleanup(struct stacks *stack)
|
static void cleanup(struct stacks *stack)
|
||||||
#else
|
|
||||||
static cleanup(stack)
|
|
||||||
struct stacks *stack;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Deletes all elements in 'cleanup_buf()' */
|
/* Deletes all elements in 'cleanup_buf()' */
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -1502,13 +1275,7 @@ struct stacks *stack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void initialize(struct stacks *stack)
|
static void initialize(struct stacks *stack)
|
||||||
#else
|
|
||||||
static initialize(stack)
|
|
||||||
struct stacks *stack;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Initializes some variables and arrays */
|
/* Initializes some variables and arrays */
|
||||||
{
|
{
|
||||||
int j;
|
int j;
|
||||||
|
@ -1541,14 +1308,7 @@ struct stacks *stack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void calculate(struct stacks *stack, int l_ahead)
|
static void calculate(struct stacks *stack, int l_ahead)
|
||||||
#else
|
|
||||||
static calculate(stack, l_ahead)
|
|
||||||
struct stacks *stack;
|
|
||||||
int l_ahead;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This function finds all new heads and deletes the old heads */
|
/* This function finds all new heads and deletes the old heads */
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -1592,12 +1352,7 @@ int l_ahead;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void kill_stack(struct stacks *stack)
|
static void kill_stack(struct stacks *stack)
|
||||||
#else
|
|
||||||
static kill_stack(stack)
|
|
||||||
struct stacks *stack;
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -1609,12 +1364,7 @@ struct stacks *stack;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
void LLnc_recover(void)
|
void LLnc_recover(void)
|
||||||
#else
|
|
||||||
LLnc_recover()
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This function contains the main loop for non correcting syntax error
|
/* This function contains the main loop for non correcting syntax error
|
||||||
* recovery
|
* recovery
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -17,29 +17,15 @@ int LLstartsymb;
|
||||||
static int fake_eof = 0;
|
static int fake_eof = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
#define LL_VOIDCST (void)
|
#define LL_VOIDCST (void)
|
||||||
void LLmessage(int);
|
void LLmessage(int);
|
||||||
#else
|
|
||||||
#define LL_VOIDCST
|
|
||||||
#endif
|
|
||||||
#ifdef LL_USERHOOK
|
#ifdef LL_USERHOOK
|
||||||
#if LL_ANSI_C
|
|
||||||
static int LLdoskip(int);
|
static int LLdoskip(int);
|
||||||
static int LLuserhook(int, int*);
|
static int LLuserhook(int, int*);
|
||||||
#else
|
|
||||||
static int LLdoskip();
|
|
||||||
static int LLuserhook();
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef LL_FASTER
|
#ifndef LL_FASTER
|
||||||
#if LL_ANSI_C
|
|
||||||
void LLscan(int t)
|
void LLscan(int t)
|
||||||
#else
|
|
||||||
LLscan(t)
|
|
||||||
int t;
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Check if the next symbol is equal to the parameter
|
* Check if the next symbol is equal to the parameter
|
||||||
|
@ -85,12 +71,7 @@ LLscan(t)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
void LLread(void) {
|
void LLread(void) {
|
||||||
#else
|
|
||||||
LLread() {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if LL_NON_CORR
|
#if LL_NON_CORR
|
||||||
/* Again, check if another parser has crashed,
|
/* Again, check if another parser has crashed,
|
||||||
* in that case intercept and go to the
|
* in that case intercept and go to the
|
||||||
|
@ -122,12 +103,7 @@ LLread() {
|
||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
void LLerror(int t)
|
void LLerror(int t)
|
||||||
#else
|
|
||||||
LLerror(t)
|
|
||||||
int t;
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
register int i;
|
register int i;
|
||||||
|
|
||||||
|
@ -189,12 +165,7 @@ LLerror(t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
void LLsafeerror(int t)
|
void LLsafeerror(int t)
|
||||||
#else
|
|
||||||
LLsafeerror(t)
|
|
||||||
int t;
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
if (t == EOFILE && LLsymb <= 0) return;
|
if (t == EOFILE && LLsymb <= 0) return;
|
||||||
#ifdef LL_NEWMESS
|
#ifdef LL_NEWMESS
|
||||||
|
@ -237,11 +208,7 @@ LLsafeerror(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef LLNOFIRSTS
|
#ifndef LLNOFIRSTS
|
||||||
#if LL_ANSI_C
|
|
||||||
int LLfirst(int x, int d) {
|
int LLfirst(int x, int d) {
|
||||||
#else
|
|
||||||
int LLfirst(x, d) {
|
|
||||||
#endif
|
|
||||||
register int i;
|
register int i;
|
||||||
|
|
||||||
return (i = LLindex[x]) >= 0 &&
|
return (i = LLindex[x]) >= 0 &&
|
||||||
|
@ -249,12 +216,7 @@ int LLfirst(x, d) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
int LLnext(int n)
|
int LLnext(int n)
|
||||||
#else
|
|
||||||
int LLnext(n)
|
|
||||||
int n;
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
/* returns: 0 if the current symbol is'nt skipped, and it
|
/* returns: 0 if the current symbol is'nt skipped, and it
|
||||||
is'nt a member of "n",
|
is'nt a member of "n",
|
||||||
|
@ -275,11 +237,7 @@ int LLnext(n)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
int LLskip(void) {
|
int LLskip(void) {
|
||||||
#else
|
|
||||||
int LLskip() {
|
|
||||||
#endif
|
|
||||||
/* returns 0 if the current symbol is'nt skipped, and
|
/* returns 0 if the current symbol is'nt skipped, and
|
||||||
1 if it is, t.i., we have a new symbol
|
1 if it is, t.i., we have a new symbol
|
||||||
*/
|
*/
|
||||||
|
@ -287,14 +245,8 @@ int LLskip() {
|
||||||
return LLdoskip(0);
|
return LLdoskip(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
extern void LL_USERHOOK(int, int *);
|
extern void LL_USERHOOK(int, int *);
|
||||||
static int LLuserhook(int e, int *list)
|
static int LLuserhook(int e, int *list)
|
||||||
#else
|
|
||||||
static int LLuserhook(e, list)
|
|
||||||
int e;
|
|
||||||
int *list;
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
int old = LLsymb;
|
int old = LLsymb;
|
||||||
LL_USERHOOK(e, list);
|
LL_USERHOOK(e, list);
|
||||||
|
@ -302,12 +254,7 @@ static int LLuserhook(e, list)
|
||||||
return LLsymb != old;
|
return LLsymb != old;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static void LLmklist(register int *list)
|
static void LLmklist(register int *list)
|
||||||
#else
|
|
||||||
static LLmklist(list)
|
|
||||||
register int *list;
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
char Xset[LL_SSIZE];
|
char Xset[LL_SSIZE];
|
||||||
register char *p;
|
register char *p;
|
||||||
|
@ -331,12 +278,7 @@ static LLmklist(list)
|
||||||
*list = 0;
|
*list = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
static int LLdoskip(int e)
|
static int LLdoskip(int e)
|
||||||
#else
|
|
||||||
static int LLdoskip(e)
|
|
||||||
int e;
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
int LLx;
|
int LLx;
|
||||||
int list[LL_NTERMINALS+1];
|
int list[LL_NTERMINALS+1];
|
||||||
|
@ -395,11 +337,7 @@ static int LLdoskip(e)
|
||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
void LLnewlevel(unsigned int *LLsinfo) {
|
void LLnewlevel(unsigned int *LLsinfo) {
|
||||||
#else
|
|
||||||
LLnewlevel(LLsinfo) unsigned int *LLsinfo; {
|
|
||||||
#endif
|
|
||||||
register int i;
|
register int i;
|
||||||
|
|
||||||
if (LLlevel++) {
|
if (LLlevel++) {
|
||||||
|
@ -417,11 +355,7 @@ LLnewlevel(LLsinfo) unsigned int *LLsinfo; {
|
||||||
LLtincr(0);
|
LLtincr(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LL_ANSI_C
|
|
||||||
void LLoldlevel(unsigned int *LLsinfo) {
|
void LLoldlevel(unsigned int *LLsinfo) {
|
||||||
#else
|
|
||||||
LLoldlevel(LLsinfo) unsigned int *LLsinfo; {
|
|
||||||
#endif
|
|
||||||
register int i;
|
register int i;
|
||||||
|
|
||||||
LLtdecr(0);
|
LLtdecr(0);
|
||||||
|
|
Loading…
Reference in a new issue