/[pearpc]/src/debug/debugparse.y
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /src/debug/debugparse.y

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (show annotations)
Wed Sep 5 17:11:21 2007 UTC (16 years, 6 months ago) by dpavlin
File size: 7508 byte(s)
import upstream CVS
1
2 %pure_parser
3
4 %{
5
6 #define YYPARSE_PARAM resultptr
7
8 #include "debugtype.h"
9 #include "parsehelper.h"
10
11 void yyerror (char *s)
12 {
13 set_eval_error(s);
14 }
15
16 %}
17
18 %union {
19 struct eval_command command;
20 struct eval_scalar scalar;
21 eval_commandtype commandtoken;
22 char *ident;
23 struct eval_scalarlist scalars;
24 };
25
26 %token <scalar> EVAL_INT
27 %token <scalar> EVAL_GPR
28 %token <scalar> EVAL_FPR
29 %token <scalar> EVAL_REG_PC
30 %token <scalar> EVAL_REG_CR
31 %token <scalar> EVAL_REG_LR
32 %token <scalar> EVAL_REG_CTR
33 %token <scalar> EVAL_REG_XER
34 %token <scalar> EVAL_REG_MSR
35 %token <scalar> EVAL_REG_SRR0
36 %token <scalar> EVAL_REG_SRR1
37 %token <scalar> EVAL_STR
38 %token <scalar> EVAL_FLOAT
39 %token <ident> EVAL_IDENT
40 %token <commandtoken> EVAL_PRINT
41 %token <commandtoken> EVAL_SETREG
42 %token <commandtoken> EVAL_REGS
43 %token <commandtoken> EVAL_FLOATS
44 %token <commandtoken> EVAL_BREAK
45 %token <commandtoken> EVAL_LIST_BREAK
46 %token <commandtoken> EVAL_STEP
47 %token <commandtoken> EVAL_NEXT
48 %token <commandtoken> EVAL_CONTINUE
49 %token <commandtoken> EVAL_QUIT
50 %token <commandtoken> EVAL_E2P
51 %token <commandtoken> EVAL_INSPECT_BYTE
52 %token <commandtoken> EVAL_INSPECT_HALF
53 %token <commandtoken> EVAL_INSPECT_WORD
54 %token <commandtoken> EVAL_INSPECT_DWORD
55 %token <commandtoken> EVAL_INSPECT_STRING
56 %token <commandtoken> EVAL_INSPECT_MEM
57 %token <commandtoken> EVAL_WATCH
58 %token <commandtoken> EVAL_WATCH_BYTE
59 %token <commandtoken> EVAL_WATCH_HALF
60 %token <commandtoken> EVAL_WATCH_WORD
61 %token <commandtoken> EVAL_WATCH_DWORD
62 %token <commandtoken> EVAL_DELETE_WATCH
63 %token <commandtoken> EVAL_DUMP
64 %token <commandtoken> EVAL_DISASM
65 %token <commandtoken> EVAL_HELP
66
67
68 %type <command> command
69 %type <scalar> scalar
70 %type <scalar> reg
71 %type <scalar> optional_scalar1
72 %type <scalar> optional_scalar2
73 %type <scalars> scalarlist
74 %type <scalars> scalarlist_or_null
75 %type <ident> identifier
76
77 %left ','
78 %right '?' ':'
79 %left '.'
80 %left EVAL_LAND
81 %left EVAL_LXOR
82 %left EVAL_LOR
83 %left '|'
84 %left '^'
85 %left '&'
86 %nonassoc EVAL_EQ
87 %nonassoc EVAL_NE
88 %nonassoc EVAL_LT
89 %nonassoc EVAL_LE
90 %nonassoc EVAL_GT
91 %nonassoc EVAL_GE
92 %nonassoc EVAL_SHL
93 %nonassoc EVAL_SHR
94 %left '-' '+'
95 %left '*' '/' '%'
96
97 %left NEG
98 %left EVAL_POW
99
100 %%
101
102 input: '\n' { create_command((struct eval_command*)resultptr, COMMAND_NOP, 0); }
103 | command '\n' { *(struct eval_command*)resultptr = $1; }
104 | scalar '\n' { create_command((struct eval_command*)resultptr, COMMAND_PRINT, 1, &$1); }
105 ;
106
107 command: EVAL_PRINT scalar { create_command(&$$, COMMAND_PRINT, 1, &$2); }
108 | EVAL_REGS { create_command(&$$, COMMAND_REGS, 0); }
109 | EVAL_FLOATS { create_command(&$$, COMMAND_FLOATS, 0); }
110 | EVAL_SETREG reg '=' scalar { create_command(&$$, COMMAND_SETREG, 2, &$2, &$4); }
111 | EVAL_BREAK scalar optional_scalar2 { create_command(&$$, COMMAND_BREAK, 2, &$2, &$3); }
112 | EVAL_LIST_BREAK { create_command(&$$, COMMAND_LIST_BREAK, 0); }
113 | EVAL_STEP optional_scalar1 { create_command(&$$, COMMAND_STEP, 1, &$2); }
114 | EVAL_NEXT optional_scalar1 { create_command(&$$, COMMAND_NEXT, 1, &$2); }
115 | EVAL_CONTINUE { create_command(&$$, COMMAND_CONTINUE, 0); }
116 | EVAL_QUIT { create_command(&$$, COMMAND_QUIT, 0); }
117 | EVAL_E2P scalar { create_command(&$$, COMMAND_E2P, 1, &$2); }
118 | EVAL_INSPECT_BYTE scalar { create_command(&$$, COMMAND_INSPECT_BYTE, 1, &$2); }
119 | EVAL_INSPECT_HALF scalar { create_command(&$$, COMMAND_INSPECT_HALF, 1, &$2); }
120 | EVAL_INSPECT_WORD scalar { create_command(&$$, COMMAND_INSPECT_WORD, 1, &$2); }
121 | EVAL_INSPECT_DWORD scalar { create_command(&$$, COMMAND_INSPECT_DWORD, 1, &$2); }
122 | EVAL_INSPECT_STRING scalar { create_command(&$$, COMMAND_INSPECT_STRING, 1, &$2); }
123 | EVAL_INSPECT_MEM scalar optional_scalar2 { create_command(&$$, COMMAND_INSPECT_MEM, 1, &$2); }
124 | EVAL_WATCH scalar optional_scalar2 { create_command(&$$, COMMAND_WATCH, 2, &$2, &$3); }
125 | EVAL_WATCH_BYTE scalar optional_scalar2 { create_command(&$$, COMMAND_WATCH_BYTE, 2, &$2, &$3); }
126 | EVAL_WATCH_HALF scalar optional_scalar2 { create_command(&$$, COMMAND_WATCH_HALF, 2, &$2, &$3); }
127 | EVAL_WATCH_WORD scalar optional_scalar2 { create_command(&$$, COMMAND_WATCH_WORD, 2, &$2, &$3); }
128 | EVAL_WATCH_DWORD scalar optional_scalar2 { create_command(&$$, COMMAND_WATCH_DWORD, 2, &$2, &$3); }
129 | EVAL_DELETE_WATCH scalar { create_command(&$$, COMMAND_DELETE_WATCH, 1, &$2); }
130 | EVAL_DUMP scalar optional_scalar2 { create_command(&$$, COMMAND_DUMP, 2, &$2, &$3); }
131 | EVAL_DISASM optional_scalar1 optional_scalar2 { create_command(&$$, COMMAND_DISASM, 2, &$2, &$3); }
132 | EVAL_HELP optional_scalar1 { create_command(&$$, COMMAND_HELP, 0); }
133 ;
134
135 optional_scalar1: /* empty */ {
136 struct eval_scalar s;
137 s.type = SCALAR_EMPTY;
138 $$ = s;
139 }
140 | scalar { $$ = $1; }
141 ;
142
143 optional_scalar2: /* empty */ {
144 struct eval_scalar s;
145 s.type = SCALAR_EMPTY;
146 $$ = s;
147 }
148 | ',' scalar { $$ = $2; }
149 ;
150
151 reg:
152 EVAL_GPR { $$ = $1; }
153 | EVAL_FPR { $$ = $1; }
154 | EVAL_REG_PC { $$ = $1; }
155 | EVAL_REG_CR { $$ = $1; }
156 | EVAL_REG_LR { $$ = $1; }
157 | EVAL_REG_CTR { $$ = $1; }
158 | EVAL_REG_XER { $$ = $1; }
159 | EVAL_REG_MSR { $$ = $1; }
160 | EVAL_REG_SRR0 { $$ = $1; }
161 | EVAL_REG_SRR1 { $$ = $1; }
162 ;
163
164 scalar: EVAL_INT { $$ = $1; }
165 | reg { $$ = $1; }
166 | EVAL_FLOAT { $$ = $1; }
167 | EVAL_STR { $$ = $1; }
168 | scalar '*' scalar { create_func_call(&$$, "*", 2, &$1, &$3); }
169 | scalar '/' scalar { create_func_call(&$$, "/", 2, &$1, &$3); }
170 | scalar '%' scalar { create_func_call(&$$, "%", 2, &$1, &$3); }
171 | scalar '+' scalar { create_func_call(&$$, "+", 2, &$1, &$3); }
172 | scalar '-' scalar { create_func_call(&$$, "-", 2, &$1, &$3); }
173 | scalar '&' scalar { create_func_call(&$$, "&", 2, &$1, &$3); }
174 | scalar '|' scalar { create_func_call(&$$, "|", 2, &$1, &$3); }
175 | scalar '^' scalar { create_func_call(&$$, "^", 2, &$1, &$3); }
176 | scalar EVAL_POW scalar { create_func_call(&$$, "**", 2, &$1, &$3); }
177 | scalar EVAL_SHL scalar { create_func_call(&$$, "<<", 2, &$1, &$3); }
178 | scalar EVAL_SHR scalar { create_func_call(&$$, ">>", 2, &$1, &$3); }
179 | scalar EVAL_EQ scalar { create_func_call(&$$, "==", 2, &$1, &$3); }
180 | scalar EVAL_NE scalar { create_func_call(&$$, "!=", 2, &$1, &$3); }
181 | scalar EVAL_GT scalar { create_func_call(&$$, ">", 2, &$1, &$3); }
182 | scalar EVAL_GE scalar { create_func_call(&$$, ">=", 2, &$1, &$3); }
183 | scalar EVAL_LT scalar { create_func_call(&$$, "<", 2, &$1, &$3); }
184 | scalar EVAL_LE scalar { create_func_call(&$$, "<=", 2, &$1, &$3); }
185 | scalar EVAL_LAND scalar { create_func_call(&$$, "&&", 2, &$1, &$3); }
186 | scalar EVAL_LXOR scalar { create_func_call(&$$, "||", 2, &$1, &$3); }
187 | scalar EVAL_LOR scalar { create_func_call(&$$, "^^", 2, &$1, &$3); }
188 | '-' scalar %prec NEG { create_func_call(&$$, "-", 1, &$2); }
189 | '(' scalar ')' { $$ = $2; }
190 | scalar '?' scalar ':' scalar { create_func_call(&$$, "?:", 3, &$1, &$3, &$5); }
191 | scalar '.' scalar { create_func_call(&$$, ".", 2, &$1, &$3); }
192 | identifier '(' scalarlist_or_null ')'
193 { create_func_call_list(&$$, $1, &$3); }
194 /* | identifier
195 { create_func_call(&$$, $1, 0); } */
196 ;
197
198 scalarlist_or_null: /* empty */
199 {
200 struct eval_scalarlist s;
201 s.count = 0;
202 s.scalars = NULL;
203 $$ = s;
204 }
205 | scalarlist { $$ = $1; }
206 ;
207
208 scalarlist: scalar { scalarlist_set(&$$, &$1); }
209 | scalarlist ',' scalarlist
210 {
211 scalarlist_concat(&$$, &$1, &$3);
212 scalarlist_destroy_flat(&$1);
213 scalarlist_destroy_flat(&$3);
214 }
215 ;
216
217 identifier: EVAL_IDENT { $$ = $1; }
218 ;
219
220 %%

  ViewVC Help
Powered by ViewVC 1.1.26