00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00029 #ifndef _PDL_RULE_H
00030 #define _PDL_RULE_H
00031
00032 #include "pdl.h"
00033
00034
00040 typedef struct rule_s {
00041 const char* state;
00042 const char* true_branch;
00043 const char* false_branch;
00044 unsigned int lineno;
00045 struct rule_s* next;
00046 } rule_t;
00047
00048
00052 typedef enum {
00053 STATE,
00054 TRUE_BRANCH,
00055 FALSE_BRANCH
00056 } rule_type_t;
00057
00058
00062 typedef enum {
00063 NO_RECURSION = 0x00,
00064 RECURSION = 0x01,
00065 RECURSION_HANDLED = 0x02
00066 } recursion_t;
00067
00068
00072 typedef enum {
00073 left_side,
00074 right_side
00075 } side_t;
00076
00077
00078 extern rule_t* add_rule(record_t* state, record_t* true_branch, record_t* false_branch);
00079 extern void free_rules(rule_t* rule);
00080 extern const rule_t* find_state(const rule_t* rule, const char* state);
00081 extern void show_rules(const rule_t* rule);
00082 extern void start_new_rules(void);
00083 extern const rule_t* get_top_rule(void);
00084 extern void allow_new_rules(BOOL allow);
00085 extern const rule_t* get_rule(const char* rule, side_t side);
00086 extern void set_top_rule(const rule_t* rule);
00087 extern BOOL check_rule_for_recursion(const rule_t* rule);
00088 extern void reduce_rule(rule_t* rule);
00089
00090 #endif