/[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

Annotation of /src/debug/debugparse.y

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (hide annotations)
Wed Sep 5 17:11:21 2007 UTC (16 years, 7 months ago) by dpavlin
File size: 7508 byte(s)
import upstream CVS
1 dpavlin 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