Blame


1 5cedca1b 2004-05-15 devnull %Start A str def thru sh
2 5cedca1b 2004-05-15 devnull
3 5cedca1b 2004-05-15 devnull %{
4 5cedca1b 2004-05-15 devnull #undef input
5 5cedca1b 2004-05-15 devnull #undef unput
6 5cedca1b 2004-05-15 devnull #include <stdio.h>
7 5cedca1b 2004-05-15 devnull #include <stdlib.h>
8 5cedca1b 2004-05-15 devnull #include <ctype.h>
9 5cedca1b 2004-05-15 devnull #include "grap.h"
10 5cedca1b 2004-05-15 devnull #include "y.tab.h"
11 5cedca1b 2004-05-15 devnull
12 5cedca1b 2004-05-15 devnull int yyback(int *, int);
13 5cedca1b 2004-05-15 devnull int yylook(void);
14 5cedca1b 2004-05-15 devnull int yywrap(void);
15 5cedca1b 2004-05-15 devnull void shell_init(void), shell_exec(void), shell_text(char *);
16 5cedca1b 2004-05-15 devnull
17 5cedca1b 2004-05-15 devnull #define CADD cbuf[clen++] = yytext[0]; \
18 5cedca1b 2004-05-15 devnull if (clen >= CBUFLEN-1) { \
19 18b08117 2004-08-17 devnull ERROR "string too long" WARNING; BEGIN A; }
20 5cedca1b 2004-05-15 devnull #define CBUFLEN 1500
21 5cedca1b 2004-05-15 devnull char cbuf[CBUFLEN];
22 5cedca1b 2004-05-15 devnull int clen, cflag;
23 5cedca1b 2004-05-15 devnull int c, delim, shcnt;
24 5cedca1b 2004-05-15 devnull %}
25 5cedca1b 2004-05-15 devnull
26 5cedca1b 2004-05-15 devnull A [a-zA-Z_]
27 5cedca1b 2004-05-15 devnull B [a-zA-Z0-9_]
28 5cedca1b 2004-05-15 devnull D [0-9]
29 5cedca1b 2004-05-15 devnull WS [ \t]
30 5cedca1b 2004-05-15 devnull
31 5cedca1b 2004-05-15 devnull %%
32 5cedca1b 2004-05-15 devnull if (yybgin-yysvec-1 == 0) { /* witchcraft */
33 5cedca1b 2004-05-15 devnull BEGIN A;
34 5cedca1b 2004-05-15 devnull }
35 5cedca1b 2004-05-15 devnull
36 5cedca1b 2004-05-15 devnull <A>{WS} ;
37 5cedca1b 2004-05-15 devnull <A>"\\"\n ;
38 5cedca1b 2004-05-15 devnull <A>\n return(ST);
39 5cedca1b 2004-05-15 devnull <A>";" return(ST);
40 5cedca1b 2004-05-15 devnull
41 5cedca1b 2004-05-15 devnull <A>line return(yylval.i = LINE);
42 5cedca1b 2004-05-15 devnull <A>arrow { yylval.i = ARROW; return(LINE); }
43 5cedca1b 2004-05-15 devnull <A>circle return(yylval.i = CIRCLE);
44 5cedca1b 2004-05-15 devnull <A>frame return(FRAME);
45 5cedca1b 2004-05-15 devnull <A>tick(s)? return(TICKS);
46 5cedca1b 2004-05-15 devnull <A>grid(line)?(s)? return(GRID);
47 5cedca1b 2004-05-15 devnull <A>coord(s)? return(COORD);
48 5cedca1b 2004-05-15 devnull <A>log return(LOG);
49 5cedca1b 2004-05-15 devnull <A>exp return(EXP);
50 5cedca1b 2004-05-15 devnull <A>sin return(SIN);
51 5cedca1b 2004-05-15 devnull <A>cos return(COS);
52 5cedca1b 2004-05-15 devnull <A>atan2 return(ATAN2);
53 5cedca1b 2004-05-15 devnull <A>sqrt return(SQRT);
54 5cedca1b 2004-05-15 devnull <A>rand return(RAND);
55 5cedca1b 2004-05-15 devnull <A>max return(MAX);
56 5cedca1b 2004-05-15 devnull <A>min return(MIN);
57 5cedca1b 2004-05-15 devnull <A>int return(INT);
58 5cedca1b 2004-05-15 devnull <A>print return(PRINT);
59 5cedca1b 2004-05-15 devnull <A>sprintf return(SPRINTF);
60 5cedca1b 2004-05-15 devnull <A>pic{WS}.* { yylval.p = tostring(yytext+3); return(PIC); }
61 5cedca1b 2004-05-15 devnull <A>graph{WS}.* { yylval.p = tostring(yytext+5); return(GRAPH); }
62 5cedca1b 2004-05-15 devnull
63 5cedca1b 2004-05-15 devnull <A>for return(FOR);
64 5cedca1b 2004-05-15 devnull <A>^Endfor\n { endfor(); }
65 5cedca1b 2004-05-15 devnull <A>do { yylval.p = delimstr("loop body"); BEGIN A; return(DOSTR); }
66 5cedca1b 2004-05-15 devnull
67 5cedca1b 2004-05-15 devnull <A>copy|include { return(COPY); }
68 5cedca1b 2004-05-15 devnull <A>thru|through { BEGIN thru; return(THRU); }
69 5cedca1b 2004-05-15 devnull <thru>{WS}+ ;
70 5cedca1b 2004-05-15 devnull <thru>{A}{B}*|. { yylval.op = copythru(yytext); BEGIN A; return(DEFNAME); }
71 5cedca1b 2004-05-15 devnull <A>until return(UNTIL);
72 5cedca1b 2004-05-15 devnull
73 5cedca1b 2004-05-15 devnull <A>if return(IF);
74 5cedca1b 2004-05-15 devnull <A>then { yylval.p = delimstr("then part"); BEGIN A; return(THEN); }
75 5cedca1b 2004-05-15 devnull <A>else { yylval.p = delimstr("else part"); BEGIN A; return(ELSE); }
76 5cedca1b 2004-05-15 devnull
77 5cedca1b 2004-05-15 devnull <A>next return(NEXT);
78 5cedca1b 2004-05-15 devnull <A>draw return(yylval.i = DRAW);
79 5cedca1b 2004-05-15 devnull <A>new return(yylval.i = NEW);
80 5cedca1b 2004-05-15 devnull <A>plot return(yylval.i = PLOT);
81 5cedca1b 2004-05-15 devnull <A>label(s)? return(LABEL);
82 5cedca1b 2004-05-15 devnull <A>x return(X);
83 5cedca1b 2004-05-15 devnull <A>y return(Y);
84 5cedca1b 2004-05-15 devnull
85 5cedca1b 2004-05-15 devnull <A>top { yylval.i = TOP; return SIDE; }
86 5cedca1b 2004-05-15 devnull <A>bot(tom)? { yylval.i = BOT; return SIDE; }
87 5cedca1b 2004-05-15 devnull <A>left { yylval.i = LEFT; return SIDE; }
88 5cedca1b 2004-05-15 devnull <A>right { yylval.i = RIGHT; return SIDE; }
89 5cedca1b 2004-05-15 devnull <A>up return(yylval.i = UP);
90 5cedca1b 2004-05-15 devnull <A>down return(yylval.i = DOWN);
91 5cedca1b 2004-05-15 devnull <A>across return(yylval.i = ACROSS);
92 5cedca1b 2004-05-15 devnull <A>height|ht return(yylval.i = HEIGHT);
93 5cedca1b 2004-05-15 devnull <A>wid(th)? return(yylval.i = WIDTH);
94 5cedca1b 2004-05-15 devnull <A>rad(ius)? return(yylval.i = RADIUS);
95 5cedca1b 2004-05-15 devnull <A>invis return(yylval.i = INVIS);
96 5cedca1b 2004-05-15 devnull <A>dot(ted) return(yylval.i = DOT);
97 5cedca1b 2004-05-15 devnull <A>dash(ed) return(yylval.i = DASH);
98 5cedca1b 2004-05-15 devnull <A>solid return(yylval.i = SOLID);
99 5cedca1b 2004-05-15 devnull
100 5cedca1b 2004-05-15 devnull <A>ljust { yylval.i = LJUST; return JUST; }
101 5cedca1b 2004-05-15 devnull <A>rjust { yylval.i = RJUST; return JUST; }
102 5cedca1b 2004-05-15 devnull <A>above { yylval.i = ABOVE; return JUST; }
103 5cedca1b 2004-05-15 devnull <A>below { yylval.i = BELOW; return JUST; }
104 5cedca1b 2004-05-15 devnull <A>size return(yylval.i = SIZE);
105 5cedca1b 2004-05-15 devnull
106 5cedca1b 2004-05-15 devnull <A>from return(yylval.i = FROM);
107 5cedca1b 2004-05-15 devnull <A>to return(yylval.i = TO);
108 5cedca1b 2004-05-15 devnull <A>by|step return(yylval.i = BY);
109 5cedca1b 2004-05-15 devnull <A>at return(yylval.i = AT);
110 5cedca1b 2004-05-15 devnull <A>with return(yylval.i = WITH);
111 5cedca1b 2004-05-15 devnull <A>in return(yylval.i = IN);
112 5cedca1b 2004-05-15 devnull <A>out return(yylval.i = OUT);
113 5cedca1b 2004-05-15 devnull <A>off return(yylval.i = OFF);
114 5cedca1b 2004-05-15 devnull
115 5cedca1b 2004-05-15 devnull <A>sh{WS}+ { BEGIN sh;
116 5cedca1b 2004-05-15 devnull if ((delim = input()) == '{') {
117 5cedca1b 2004-05-15 devnull shcnt = 1;
118 5cedca1b 2004-05-15 devnull delim = '}';
119 5cedca1b 2004-05-15 devnull }
120 5cedca1b 2004-05-15 devnull shell_init();
121 5cedca1b 2004-05-15 devnull }
122 5cedca1b 2004-05-15 devnull <sh>{A}{B}* {
123 5cedca1b 2004-05-15 devnull int c;
124 5cedca1b 2004-05-15 devnull Obj *p;
125 5cedca1b 2004-05-15 devnull if (yytext[0] == delim) {
126 5cedca1b 2004-05-15 devnull shell_exec();
127 5cedca1b 2004-05-15 devnull BEGIN A;
128 5cedca1b 2004-05-15 devnull } else {
129 5cedca1b 2004-05-15 devnull p = lookup(yytext, 0);
130 5cedca1b 2004-05-15 devnull if (p != NULL && p->type == DEFNAME) {
131 5cedca1b 2004-05-15 devnull c = input();
132 5cedca1b 2004-05-15 devnull unput(c);
133 5cedca1b 2004-05-15 devnull if (c == '(')
134 5cedca1b 2004-05-15 devnull dodef(p);
135 5cedca1b 2004-05-15 devnull else
136 5cedca1b 2004-05-15 devnull pbstr(p->val);
137 5cedca1b 2004-05-15 devnull } else
138 5cedca1b 2004-05-15 devnull shell_text(yytext);
139 5cedca1b 2004-05-15 devnull }
140 5cedca1b 2004-05-15 devnull }
141 5cedca1b 2004-05-15 devnull <sh>"{" { shcnt++; shell_text(yytext); }
142 5cedca1b 2004-05-15 devnull <sh>"}" { if (delim != '}' || --shcnt > 0)
143 5cedca1b 2004-05-15 devnull shell_text(yytext);
144 5cedca1b 2004-05-15 devnull else {
145 5cedca1b 2004-05-15 devnull shell_exec();
146 5cedca1b 2004-05-15 devnull BEGIN A;
147 5cedca1b 2004-05-15 devnull }
148 5cedca1b 2004-05-15 devnull }
149 5cedca1b 2004-05-15 devnull <sh>.|\n { if (yytext[0] == delim) {
150 5cedca1b 2004-05-15 devnull shell_exec();
151 5cedca1b 2004-05-15 devnull BEGIN A;
152 5cedca1b 2004-05-15 devnull } else
153 5cedca1b 2004-05-15 devnull shell_text(yytext);
154 5cedca1b 2004-05-15 devnull }
155 5cedca1b 2004-05-15 devnull
156 5cedca1b 2004-05-15 devnull <A>define{WS}+ { BEGIN def; }
157 5cedca1b 2004-05-15 devnull <def>{A}{B}* { definition(yytext); BEGIN A; }
158 5cedca1b 2004-05-15 devnull
159 5cedca1b 2004-05-15 devnull <A>({D}+("."?){D}*|"."{D}+)((e|E)("+"|-)?{D}+)?i? {
160 5cedca1b 2004-05-15 devnull yylval.f = atof(yytext); return(NUMBER); }
161 5cedca1b 2004-05-15 devnull
162 5cedca1b 2004-05-15 devnull <A>^"."[^0-9].* { if (yytext[1] == 'G' && yytext[2] == '2') {
163 5cedca1b 2004-05-15 devnull yylval.i = yytext[2];
164 5cedca1b 2004-05-15 devnull return(EOF);
165 5cedca1b 2004-05-15 devnull } else {
166 5cedca1b 2004-05-15 devnull yylval.p = tostring(yytext);
167 5cedca1b 2004-05-15 devnull return(PIC);
168 5cedca1b 2004-05-15 devnull }
169 5cedca1b 2004-05-15 devnull }
170 5cedca1b 2004-05-15 devnull
171 5cedca1b 2004-05-15 devnull <A>{A}{B}* {
172 5cedca1b 2004-05-15 devnull int c;
173 5cedca1b 2004-05-15 devnull Obj *p;
174 5cedca1b 2004-05-15 devnull p = lookup(yytext, 1);
175 5cedca1b 2004-05-15 devnull if (p->type == DEFNAME) {
176 5cedca1b 2004-05-15 devnull c = input();
177 5cedca1b 2004-05-15 devnull unput(c);
178 5cedca1b 2004-05-15 devnull if (c == '(') /* it's name(...) */
179 5cedca1b 2004-05-15 devnull dodef(p);
180 5cedca1b 2004-05-15 devnull else /* no argument list */
181 5cedca1b 2004-05-15 devnull pbstr(p->val);
182 5cedca1b 2004-05-15 devnull } else {
183 5cedca1b 2004-05-15 devnull yylval.op = p;
184 5cedca1b 2004-05-15 devnull return p->type; /* NAME or VARNAME */
185 5cedca1b 2004-05-15 devnull }
186 5cedca1b 2004-05-15 devnull }
187 5cedca1b 2004-05-15 devnull
188 5cedca1b 2004-05-15 devnull <A>"==" return(EQ);
189 5cedca1b 2004-05-15 devnull <A>">=" return(GE);
190 5cedca1b 2004-05-15 devnull <A>"<=" return(LE);
191 5cedca1b 2004-05-15 devnull <A>"!=" return(NE);
192 5cedca1b 2004-05-15 devnull <A>">" return(GT);
193 5cedca1b 2004-05-15 devnull <A>"<" return(LT);
194 5cedca1b 2004-05-15 devnull <A>"&&" return(AND);
195 5cedca1b 2004-05-15 devnull <A>"||" return(OR);
196 5cedca1b 2004-05-15 devnull <A>"!" return(NOT);
197 5cedca1b 2004-05-15 devnull
198 5cedca1b 2004-05-15 devnull <A>\" { BEGIN str; clen = 0; }
199 5cedca1b 2004-05-15 devnull
200 5cedca1b 2004-05-15 devnull <A>#.* ;
201 5cedca1b 2004-05-15 devnull
202 5cedca1b 2004-05-15 devnull <A>. { yylval.i = yytext[0]; return(yytext[0]); }
203 5cedca1b 2004-05-15 devnull
204 5cedca1b 2004-05-15 devnull <str>\" { BEGIN A; cbuf[clen] = 0;
205 5cedca1b 2004-05-15 devnull yylval.p = tostring(cbuf); return(STRING); }
206 5cedca1b 2004-05-15 devnull <str>\n { ERROR "newline in string" WARNING; BEGIN A; return(ST); }
207 5cedca1b 2004-05-15 devnull <str>"\\\"" { cbuf[clen++] = '\\'; cbuf[clen++] = '"'; }
208 5cedca1b 2004-05-15 devnull <str>"\\\\" { cbuf[clen++] = '\\'; cbuf[clen++] = '\\'; }
209 5cedca1b 2004-05-15 devnull <str>. { CADD; }
210 5cedca1b 2004-05-15 devnull
211 5cedca1b 2004-05-15 devnull %%