Staging
v0.5.1
https://github.com/python/cpython
Revision c716edd6cfda4d5d0783ecb5a5b5b08e139b9fc7 authored by Hirokazu Yamamoto on 10 February 2009, 16:58:05 UTC, committed by Hirokazu Yamamoto on 10 February 2009, 16:58:05 UTC
svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r69497 | hirokazu.yamamoto | 2009-02-10 23:27:19 +0900 | 9 lines

  Merged revisions 69494 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r69494 | hirokazu.yamamoto | 2009-02-10 22:31:28 +0900 | 1 line

    Fixed svn:eol-style.
  ........
................
1 parent 8a2c980
Raw File
Tip revision: c716edd6cfda4d5d0783ecb5a5b5b08e139b9fc7 authored by Hirokazu Yamamoto on 10 February 2009, 16:58:05 UTC
Merged revisions 69497 via svnmerge from
Tip revision: c716edd
grammar.h

/* Grammar interface */

#ifndef Py_GRAMMAR_H
#define Py_GRAMMAR_H
#ifdef __cplusplus
extern "C" {
#endif

#include "bitset.h" /* Sigh... */

/* A label of an arc */

typedef struct {
    int		 lb_type;
    char	*lb_str;
} label;

#define EMPTY 0		/* Label number 0 is by definition the empty label */

/* A list of labels */

typedef struct {
    int		 ll_nlabels;
    label	*ll_label;
} labellist;

/* An arc from one state to another */

typedef struct {
    short	a_lbl;		/* Label of this arc */
    short	a_arrow;	/* State where this arc goes to */
} arc;

/* A state in a DFA */

typedef struct {
    int		 s_narcs;
    arc		*s_arc;		/* Array of arcs */
	
    /* Optional accelerators */
    int		 s_lower;	/* Lowest label index */
    int		 s_upper;	/* Highest label index */
    int		*s_accel;	/* Accelerator */
    int		 s_accept;	/* Nonzero for accepting state */
} state;

/* A DFA */

typedef struct {
    int		 d_type;	/* Non-terminal this represents */
    char	*d_name;	/* For printing */
    int		 d_initial;	/* Initial state */
    int		 d_nstates;
    state	*d_state;	/* Array of states */
    bitset	 d_first;
} dfa;

/* A grammar */

typedef struct {
    int		 g_ndfas;
    dfa		*g_dfa;		/* Array of DFAs */
    labellist	 g_ll;
    int		 g_start;	/* Start symbol of the grammar */
    int		 g_accel;	/* Set if accelerators present */
} grammar;

/* FUNCTIONS */

grammar *newgrammar(int start);
dfa *adddfa(grammar *g, int type, char *name);
int addstate(dfa *d);
void addarc(dfa *d, int from, int to, int lbl);
dfa *PyGrammar_FindDFA(grammar *g, int type);

int addlabel(labellist *ll, int type, char *str);
int findlabel(labellist *ll, int type, char *str);
char *PyGrammar_LabelRepr(label *lb);
void translatelabels(grammar *g);

void addfirstsets(grammar *g);

void PyGrammar_AddAccelerators(grammar *g);
void PyGrammar_RemoveAccelerators(grammar *);

void printgrammar(grammar *g, FILE *fp);
void printnonterminals(grammar *g, FILE *fp);

#ifdef __cplusplus
}
#endif
#endif /* !Py_GRAMMAR_H */
back to top