spef: Parser fixes
[tas-yagle.git] / distrib / sources / mbkspef / spef.l
1 %{
2 #include <string.h>
3 #include "spef.tab.h"
4 #include MUT_H
5 #define YY_NO_UNPUT
6 #define ECHO /*printf("token= %s\n", yytext)*/
7 extern int Line ;
8 /*
9 vector ([\<\>\[\]\{\}\(\)])
10 */
11 %}
12 %s IDENTIFIER
13 %x COMMENT NOI
14
15 upper [A-Z]
16 lower [a-z]
17 digit [0-9]
18 space [ \t]
19 eol \n
20 alpha ({upper}|{lower})
21 sign ({pos_sign}|{neg_sign})
22 pos_sign \+
23 neg_sign \-
24 pos_decimal {digit}+[.]{digit}*
25 pos_integer {digit}+
26 pos_fraction [.]{digit}+
27 pos_exp {pos_radix}{exp_char}{integer}
28 pos_radix ({pos_integer}|{pos_decimal}|{pos_fraction})
29 pos_float ({pos_decimal}|{pos_fraction}|{pos_exp})
30 pos_number ({pos_integer}|{pos_float})
31 decimal {sign}?{digit}+[.]{digit}*
32 integer {sign}?{digit}+
33 fraction {sign}?[.]{digit}+
34 exp {radix}{exp_char}{integer}
35 radix ({integer}|{decimal}|{fraction})
36 exp_char [E]|[e]
37 float ({decimal}|{fraction}|{exp})
38 number ({integer}|{float})
39 v0 (\[{digit}+\])
40 v1 (\<{digit}+\>)
41 v2 (\{{digit}+\})
42 v3 (\({digit}+\))
43 v4 (\\\[{digit}+\\\])
44 vector ({v0}|{v1}|{v2}|{v3}|{v4})
45 hdiv ([[./:_|@#\$%\-!+\\'`~,;=\?\^\&\*()])
46 identifier {alpha}({hdiv}|{alpha}|{digit}|{vector})*
47 identifier2 {integer}{hdiv}?({hdiv}|{alpha}|{digit}|{vector})*
48 qstring "\"".*"\""
49 hchar [./:|]
50
51 atbegin ^{space}*
52
53 prefix_bus_delim [[{(<]
54 suffix_bus_delim []})>]
55
56 %%
57 <INITIAL,NOI>{eol} { BEGIN INITIAL;
58 Line++;
59 }
60 <COMMENT>{eol} {
61 Line++;
62 }
63 <COMMENT>. { /* multi line comment */ }
64 "//".*$ { /* comment */ }
65 "/"\* {BEGIN COMMENT ; /* begin multi line comment */ }
66 <COMMENT>\*"/" {BEGIN INITIAL ; /* end multi line comment */ }
67 <INITIAL,NOI>{space} { /* separators */ }
68 <INITIAL,NOI>\*SPEF {ECHO; return _E_SPEF; }
69 <INITIAL,NOI>\*DESIGN {ECHO; return _E_DESIGN; }
70 <INITIAL,NOI>\*DATE {ECHO; return _E_DATE; }
71 <INITIAL,NOI>\*VENDOR {ECHO; return _E_VENDOR; }
72 <INITIAL,NOI>\*PROGRAM {ECHO; return _E_PROGRAM; }
73 <INITIAL,NOI>\*VERSION {ECHO; return _E_VERSION; }
74 <INITIAL,NOI>\*DESIGN_FLOW {ECHO; return _E_DESIGN_FLOW; }
75 <INITIAL,NOI>\*DIVIDER {ECHO; return _E_DIVIDER; }
76 <INITIAL,NOI>\*DELIMITER {ECHO; return _E_DELIMITER; }
77 <INITIAL,NOI>\*BUS_DELIMITER {ECHO; return _E_BUS_DELIMITER; }
78 <INITIAL,NOI>\*T_UNIT {ECHO; return _E_T_UNIT; }
79 <INITIAL,NOI>NS {ECHO; return _NS; }
80 <INITIAL,NOI>PS {ECHO; return _PS; }
81 <INITIAL,NOI>\*C_UNIT {ECHO; return _E_C_UNIT; }
82 <INITIAL,NOI>PF {ECHO; return _PF; }
83 <INITIAL,NOI>FF {ECHO; return _FF; }
84 <INITIAL,NOI>\*R_UNIT {ECHO; return _E_R_UNIT; }
85 <INITIAL,NOI>OHM {ECHO; return _OHM; }
86 <INITIAL,NOI>KOHM {ECHO; return _KOHM; }
87 <INITIAL,NOI>\*L_UNIT {ECHO; return _E_L_UNIT; }
88 <INITIAL,NOI>HENRY {ECHO; return _HENRY; }
89 <INITIAL,NOI>MH {ECHO; return _MH; }
90 <INITIAL,NOI>UH {ECHO; return _UH; }
91 <INITIAL,NOI>\*NAME_MAP {ECHO; return _E_NAME_MAP; }
92 <INITIAL,NOI>\*PORTS {ECHO; return _E_PORTS; }
93 <INITIAL,NOI>I {ECHO; return _SPEF_I; }
94 <INITIAL,NOI>B {ECHO; return _SPEF_B; }
95 <INITIAL,NOI>O {ECHO; return _SPEF_O; }
96 <INITIAL,NOI>X {ECHO; return _SPEF_X; }
97 <INITIAL,NOI>\*C {ECHO; return _E_C; }
98 <INITIAL,NOI>\*L {ECHO; BEGIN NOI;return _E_L; }
99 <INITIAL,NOI>\*S {ECHO; BEGIN NOI;return _E_S; }
100 <INITIAL,NOI>\*D {ECHO; return _E_D; }
101 <INITIAL,NOI>\*V {ECHO; return _E_V; }
102 <INITIAL,NOI>\*D_NET {ECHO; return _E_D_NET; }
103 <INITIAL,NOI>\*CONN {ECHO; return _E_CONN; }
104 <INITIAL,NOI>\*P {ECHO; return _E_P; }
105 <INITIAL,NOI>\*I {ECHO; return _E_I; }
106 <INITIAL,NOI>\*x {ECHO; return _E_X; }
107 <INITIAL,NOI>\*CAP {ECHO; return _E_CAP; }
108 <INITIAL,NOI>\*RES {ECHO; return _E_RES; }
109 <INITIAL,NOI>\*END {ECHO; return _E_END; }
110 <INITIAL,NOI>\*GROUND_NETS {ECHO; return _E_GROUND_NETS;}
111 <INITIAL,NOI>\*POWER_NETS {ECHO; return _E_POWER_NETS;}
112 <INITIAL,NOI>\*PHYSICAL_PORTS {ECHO; return _E_PHYSICAL_PORTS;}
113 <INITIAL,NOI>\*DEFINE {ECHO; return _E_DEFINE;}
114 <INITIAL,NOI>\*PDEFINE {ECHO; return _E_PDEFINE;}
115 <INITIAL,NOI>\*R_NET {ECHO; return _E_RNET;}
116 <INITIAL,NOI>\*R_PNET {ECHO; return _E_RPNET;}
117 <INITIAL,NOI>\*D_PNET {ECHO; return _E_DPNET;}
118 <INITIAL,NOI>\*INDUC {ECHO; return _E_INDUC;}
119 <INITIAL,NOI>\*DRIVER {ECHO; return _E_DRIVER;}
120 <INITIAL,NOI>\*CELL {ECHO; return _E_CELL;}
121 <INITIAL,NOI>\*C2_R1_C1 {ECHO; return _E_C2_R1_C1;}
122 <INITIAL,NOI>\*LOADS {ECHO; return _E_LOADS;}
123 <INITIAL,NOI>\*RC {ECHO; return _E_RC;}
124 <INITIAL,NOI>\*Q {ECHO; return _E_Q;}
125 <INITIAL,NOI>\*K {ECHO; return _E_K;}
126 <INITIAL,NOI>\*N {ECHO; return _E_N; }
127 <INITIAL,NOI>{pos_integer} {ECHO; speflval.UL.longint = atol(yytext) ; strcpy(speflval.UL.text,yytext) ; return _POS_INTEGER; }
128 <INITIAL,NOI>{pos_number} {ECHO; speflval.UR.real = atof(yytext) ; strcpy(speflval.UR.text,yytext) ; return _POS_NUMBER; }
129 <INITIAL,NOI>{number} {ECHO; speflval.UR.real = atof(yytext) ; strcpy(speflval.UR.text,yytext) ; return _NUMBER; }
130 <INITIAL,NOI>\*{pos_integer} {ECHO; speflval.text = mbkstrdup(yytext) ; return _INDEX; }
131 <INITIAL>{hchar} {ECHO; return *yytext; }
132 <INITIAL,NOI>{qstring} {ECHO; speflval.text = mbkstrdup(yytext) ; return (_QSTRING) ; }
133 <INITIAL,NOI>{identifier} {ECHO; speflval.text = mbkstrdup(yytext) ; return (_IDENTIFIER) ; }
134 <INITIAL>{identifier2} {ECHO; speflval.text = mbkstrdup(yytext) ; return (_IDENTIFIER) ; }
135 <INITIAL,NOI>\*{pos_integer}{hchar}{pos_integer} {ECHO; speflval.text = mbkstrdup(yytext) ; return (_IDENTIFIER) ; }
136 <INITIAL,NOI>\*{pos_integer}{hchar}{identifier} {ECHO; speflval.text = mbkstrdup(yytext) ; return (_IDENTIFIER) ; }
137 <INITIAL>{prefix_bus_delim}|{suffix_bus_delim} {ECHO; return *yytext;}
138 <INITIAL>.
139 <NOI>. {ECHO; return *yytext;}
140 %%
141
142 int yywrap() { return 1; }