OpenCores
URL https://opencores.org/ocsvn/eco32/eco32/trunk

Subversion Repositories eco32

[/] [eco32/] [trunk/] [lcc/] [lburg/] [lburg.h] - Rev 18

Go to most recent revision | Compare with Previous | Blame | View Log

#ifndef BURG_INCLUDED
 
#define BURG_INCLUDED
 
 
 
/* $Id: lburg.h,v 2.1 1994/11/30 21:53:18 drh Exp $ */
 
/* iburg.c: */
 
extern void *alloc(int nbytes);
 
 
 
typedef enum { TERM=1, NONTERM } Kind;
 
typedef struct rule *Rule;
 
typedef struct term *Term;
 
struct term {		/* terminals: */
 
	char *name;		/* terminal name */
 
	Kind kind;		/* TERM */
 
	int esn;		/* external symbol number */
 
	int arity;		/* operator arity */
 
	Term link;		/* next terminal in esn order */
 
	Rule rules;		/* rules whose pattern starts with term */
 
};
 
 
 
typedef struct nonterm *Nonterm;
 
struct nonterm {	/* nonterminals: */
 
	char *name;		/* nonterminal name */
 
	Kind kind;		/* NONTERM */
 
	int number;		/* identifying number */
 
	int lhscount;		/* # times nt appears in a rule lhs */
 
	int reached;		/* 1 iff reached from start nonterminal */
 
	Rule rules;		/* rules w/nonterminal on lhs */
 
	Rule chain;		/* chain rules w/nonterminal on rhs */
 
	Nonterm link;		/* next terminal in number order */
 
};
 
extern Nonterm nonterm(char *id);
 
extern Term term(char *id, int esn);
 
 
 
typedef struct tree *Tree;
 
struct tree {		/* tree patterns: */
 
	void *op;		/* a terminal or nonterminal */
 
	Tree left, right;	/* operands */
 
	int nterms;		/* number of terminal nodes in this tree */
 
};
 
extern Tree tree(char *op, Tree left, Tree right);
 
 
 
struct rule {		/* rules: */
 
	Nonterm lhs;		/* lefthand side nonterminal */
 
	Tree pattern;		/* rule pattern */
 
	int ern;		/* external rule number */
 
	int packed;		/* packed external rule number */
 
	int cost;		/* cost, if a constant */
 
	char *code;		/* cost, if an expression */
 
	char *template;		/* assembler template */
 
	Rule link;		/* next rule in ern order */
 
	Rule next;		/* next rule with same pattern root */
 
	Rule chain;		/* next chain rule with same rhs */
 
	Rule decode;		/* next rule with same lhs */
 
	Rule kids;		/* next rule with same _kids pattern */
 
};
 
extern Rule rule(char *id, Tree pattern, char *template, char *code);
 
 
 
/* gram.y: */
 
void yyerror(char *fmt, ...);
 
int yyparse(void);
 
void yywarn(char *fmt, ...);
 
extern int errcnt;
 
extern FILE *infp;
 
extern FILE *outfp;
 
 
 
#endif
 
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.