-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathComGenerate.h
161 lines (151 loc) · 5.48 KB
/
ComGenerate.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#pragma once
#include <string>
#ifdef LRSTAR
class Generate
#endif
#ifdef DFASTAR
#include "LGComputeLA.h"
class Generate : public LGComputeLA
#endif
{
public:
bool GenerateCode(const char* sklfid, const char* outfid, int verbose);
protected:
virtual void initialize() = 0; // TODO: use constructor Luke
virtual int value(int x) = 0;
virtual void emit(int x) = 0;
virtual void emitStr(int x) = 0;
virtual void emitType(int x) = 0;
private:
static int open_code (const char* out_fid);
static void prt_code(const char *format, ...);
static void close_code ();
static void KEYWORD_OPTIMIZATION();
static void DO_SWITCH (int s);
static void DO_CASES (int s, int* action, int* seq);
static void DO_DEFAULT (int s, int ret);
static void DO_RETURN (int s);
static void P_SYMBOL (int s);
static void PRT_STA (int s);
static void p_prod (int p, int dot, char *before, char* after);
static int p_sym (int s, char *sp);
void INIT_VARS();
void EMIT_ALL(int verbose);
void SCAN();
static void STAKCOND();
static void UNSTAKCOND();
const char* READ_CODE (const char* sk);
static const char* GETCODENUM(const char* keyword, int& x);
static char GET_OPER (const char* p, int x);
static void GET_STRINGS(const char *p);
void READ_VARS(const char* p);
static int GET_NUM (int& num);
void DEF_T (int *x, int n, int min, int max);
static void SkipRestOfLineOrBlock(const char *s);
static void SkipBlock ();
static const char* skip_rest_of_string(const char* skel);
static const char* skip_rest_of_code(const char* sk);
static const char* skip_rest_of_line(const char* skel);
static const char* skip_rest_of_comment(const char* skel);
static void ERASE ();
static int GET_STRING (char *string, int size);
static int GETN(const char* p);
static const char* READNUM (const char* p, int* num);
static void EMIT_NUM (int num);
static int FIRSTNB (char *p);
static void DUMP_BUFFER ();
static int OUTPUT (const char* buffer, int leng);
static void DUMP_SKEL(const char* start, const char* end, const char* newstart);
static void O_TERM_CONS (int* x, int n);
static void O_DATA (int i, int* data, char* text, char* str);
static void O_NA1 (char**s, int* npp, int n, int *seq);
static void O_DEFCON (int *x, char**s, int n);
static void O_ONLY (char**s, int n, char ch);
static void O_ONLY2 (char**s, int n, char ch);
static void O_KEYWRD (char**s, int n);
static void O_SORTED (char**s, int n, int *seq);
static void O_SORTED2(int *s, int n, int *seq);
static const char* prt_line (int numb, const char* line);
static void ISEOL (char*str);
static int N_NP1 (int *chk, int n);
static int N_ONLY (char**s, int n, char ch);
static int N_ONLY2 (char**s, int n, char ch);
static int N_KEYWRD (char**s, int n);
static void O_BITNO (char *x, int n);
static void O_NP1 (char**s, int n, int *chk);
static void O_NA1 (char**s, int n, int *seq, int *chk);
static void prt_pointer(int numb, const char* line, const char* object);
protected:
static int OUTPUT_CODE ();
void DEF_TYPE(int* x, int n);
void DEF_TYPEA(int n);
void DEF_TYPEC(int n);
void DEF_TYPES(int* x, int n);
static void O_ARRAY (int *x, int n);
static void O_ARRAY_CHAR (char *x, int n);
static void O_NUMTXT (int *x, char**s, int n);
static void O_NUMTXT2(int *x, char**s, int n);
static void O_TERM (char**s, int n);
static void O_HEAD (char**s, int n);
static void O_TXT (char**s, int n);
static void O_TXTN (char**s, int m, int n);
static void O_TXTSTR (char**s, int n);
static void PRT_ERR(const char *p, int line);
static void PUT_FILE (char* string, int leng);
static int SPRINT(const char* format, int indx, int *data, int *text);
protected:
static char skl_fid [MAX_PATH];
static char out_fid [MAX_PATH];
static int linenumb;
static const char* skel;
static int n_addedlines;
static char format[50];
private:
std::string str_char = "char";
std::string str_uchar = "unsigned char";
std::string str_short = "short";
std::string str_ushort = "unsigned short";
std::string str_int = "int";
std::string str_uint = "unsigned int";
std::string str_charp = "const char*";
static int num_char;
static int num_uchar;
static int num_short;
static int num_ushort;
static int num_int;
static int num_uint;
static int num_charp;
static STAKTYPE STAK[MAXTOP];
static int staktop;
static int maxtop;
static const char* group_start;
static int skip_code;
static int g_size;
static char in_group;
static int width;
static int bytes_out;
static int first_err;
static int last_sep_l;
static int fd;
static int count;
static int mult;
static int plus;
static char middle[2000];
static char sep[2000];
static char end[2000];
static char arg4[30];
static char arg5[30];
static char arg6[30];
static int middle_l;
static int sep_l;
static int end_l;
static int n_out;
static const char* skelbeg;
static const char* skelend;
static char* buffer;
static char* buffptr;
static char* buffend;
static int operation_flag;
static int n_origlines;
static int max_outbuff;
};