/* Grammar interface */#ifndef Py_GRAMMAR_H#define Py_GRAMMAR_H#ifdef __cplusplusextern "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);void freegrammar(grammar *g);dfa *adddfa(grammar *g, int type, const 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, const char *str);int findlabel(labellist *ll, int type, const char *str);const 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 */
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。