/[smarc]/smarc/src/spasm/spasm.lex
ViewVC logotype

Diff of /smarc/src/spasm/spasm.lex

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by batonik, Thu Dec 19 20:45:37 2002 UTC revision 1.2 by batonik, Sat Dec 28 21:29:26 2002 UTC
# Line 5  Line 5 
5    
6    
7  _SPACJE         [ \t]  _SPACJE         [ \t]
8  _KOMENTARZ      [!;]  _KOMENTARZ      "!"
9    _PRZECINEK      ","
10    
11  _ETYKIETA       [a-zA-Z][a-zA-Z0-9_]*  _ETYKIETA       [a-zA-Z][a-zA-Z0-9_]*
12  _LICZBA         [0-9]+|"0x"[0-9]+  _LICZBA         [0-9]+|"0x"[0-9a-fA-F]+
13    
14    _REJESTR        "%"(([sS][pP]|[fF][pP])|([rRgGiIoOlL][0-9]{1,2}))
15    
16    _HI             "%"[hH][iI]
17    _LO             "%"[lL][oO]
18    _NAWIASL        "("
19    _NAWIASP        ")"
20    
21    _ALNUM          {_ETYKIETA}
22    _ZNAK_ROWN      "="
23    
24  _ASCII          ".ascii"  _ASCII          ".ascii"
25  _TEXT           ".text"  _TEXT           ".text"
26  _ALIGN          ".align"  _ALIGN          ".align"
27  _DATA           ".data"  _DATA           ".data"
28  _SKIP           ".skip"  _SKIP           ".skip"
29    _BYTE           ".byte"
30    _HALF           ".half"
31    _WORD           ".word"
32    
33    _B_BN           "bn"
34    _B_BE           "be"|"bz"
35    _B_BLE          "ble"
36    _B_BL           "bl"
37    _B_BLEU         "bleu"
38    _B_BCS          "bcs"|"blu"
39    _B_BNEG         "bneg"
40    _B_BVS          "bvs"
41    _B_BA           "ba"
42    _B_BNE          "bne"|"bnz"
43    _B_BG           "bg"
44    _B_BGE          "bge"
45    _B_BGU          "bgu"
46    _B_BCC          "bcc"|"bgeu"
47    _B_BPOS         "bpos"
48    _B_BVC          "bvc"
49    
50    _R_ADD          "add"
51    _R_AND          "and"
52    _R_OR           "or"
53    _R_XOR          "xor"
54    _R_SUB          "sub"
55    _R_ANDN         "andn"
56    _R_ORN          "orn"
57    _R_XNOR         "xnor"
58    _R_ADDX         "addx"
59    _R_SUBX         "subx"
60    _R_ADDCC        "addcc"
61    _R_ANDCC        "andcc"
62    _R_ORCC         "orcc"
63    _R_XORCC        "xorcc"
64    _R_SUBCC        "subcc"
65    _R_ANDNCC       "andncc"
66    _R_ORNCC        "orncc"
67    _R_XNORCC       "xnorcc"
68    _R_ADDXCC       "addxcc"
69    _R_SUBXCC       "subxcc"
70    _R_SLL          "sll"
71    _R_SRL          "srl"
72    _R_SRA          "sra"
73    _R_JMPL         "jmpl"
74    _R_SAVE         "save"
75    _R_RESTORE      "restore"
76    _R_SETHI        "sethi"
77    _R_CALL         "call"
78    _R_LD           "ld"
79    _R_LDUB         "ldub"
80    _R_LDUH         "lduh"
81    _R_ST           "st"
82    _R_STB          "stb"
83    _R_STH          "sth"
84    _R_LDSB         "ldsb"
85    _R_LDSH         "ldsh"
86    _R_LDSTUB       "ldstub"
87    _R_SWAP         "swap"
88    
89    _PR_MOV         "mov"
90    _PR_CMP         "cmp"
91    _PR_TST         "tst"
92    _PR_NOT         "not"
93    _PR_NEG         "neg"
94    _PR_INC         "inc"
95    _PR_DEC         "dec"
96    _PR_CLR         "clr"
97    _PR_RET         "ret"
98    _PR_JMP         "jmp"
99    _PR_SKIPZ       "skipz"
100    _PR_SKIPNZ      "skipnz"
101    _PR_SET         "set"
102    _PR_NOP         "nop"
103    
 _PSEUDOR        mov|cmp|tst|not|neg|inc|dec|clr|restore|ret|jmp|skipz|skipnz|set|nop  
104    
105  %{  %{
106    
107  #include "zmienne.h"  #include "zmienne.h"
108  #include "stale.h"  #include "stale.h"
109  #include "funkcje.h"  #include "funkcje.h"
110    #include "rozkazy.h"
111    
112  #include <string.h>  #include <string.h>
113  #include "spasm.tab.h"  #include "spasm.tab.h"
# Line 35  _PSEUDOR       mov|cmp|tst|not|neg|inc|dec|clr Line 120  _PSEUDOR       mov|cmp|tst|not|neg|inc|dec|clr
120  ^{_SPACJE}*{_KOMENTARZ}+.*[^\n]         /* ...i komentarze */  ^{_SPACJE}*{_KOMENTARZ}+.*[^\n]         /* ...i komentarze */
121    
122  {_ETYKIETA}":"          return (ETYKIETA);  {_ETYKIETA}":"          return (ETYKIETA);
 {_PSEUDOR}              return (PSEUDO_R);  
123    
124  {_LICZBA}               yylval.lcalk = strtol(yytext, NULL, 0); return (LICZBA);  
125    {_B_BN}{_SPACJE}                yylval.lcalk = CND_BN;  return (B_BN);
126    {_B_BE}{_SPACJE}                yylval.lcalk = CND_BE;  return (B_BE);
127    {_B_BLE}{_SPACJE}               yylval.lcalk = CND_BLE; return (B_BLE);
128    {_B_BL}{_SPACJE}                yylval.lcalk = CND_BL;  return (B_BL);
129    {_B_BLEU}{_SPACJE}              yylval.lcalk = CND_BLEU;return (B_BLEU);
130    {_B_BCS}{_SPACJE}               yylval.lcalk = CND_BCS; return (B_BCS);
131    {_B_BNEG}{_SPACJE}              yylval.lcalk = CND_BNEG;return (B_BNEG);
132    {_B_BVS}{_SPACJE}               yylval.lcalk = CND_BVS; return (B_BVS);
133    {_B_BA}{_SPACJE}                yylval.lcalk = CND_BA;  return (B_BA);
134    {_B_BNE}{_SPACJE}               yylval.lcalk = CND_BNE; return (B_BNE);
135    {_B_BG}{_SPACJE}                yylval.lcalk = CND_BG;  return (B_BG);
136    {_B_BGE}{_SPACJE}               yylval.lcalk = CND_BGE; return (B_BGE);
137    {_B_BGU}{_SPACJE}               yylval.lcalk = CND_BGU; return (B_BGU);
138    {_B_BCC}{_SPACJE}               yylval.lcalk = CND_BCC; return (B_BCC);
139    {_B_BPOS}{_SPACJE}              yylval.lcalk = CND_BPOS;return (B_BPOS);
140    {_B_BVC}{_SPACJE}               yylval.lcalk = CND_BVC; return (B_BVC);
141    
142    {_R_ADD}{_SPACJE}       yylval.lcalk = OPC_ADD;         return(R_ADD);
143    {_R_AND}{_SPACJE}       yylval.lcalk = OPC_AND;         return(R_AND);
144    {_R_OR}{_SPACJE}        yylval.lcalk = OPC_OR;          return(R_OR);
145    {_R_XOR}{_SPACJE}       yylval.lcalk = OPC_XOR;         return(R_XOR);
146    {_R_SUB}{_SPACJE}       yylval.lcalk = OPC_SUB;         return(R_SUB);
147    {_R_ANDN}{_SPACJE}      yylval.lcalk = OPC_ANDN;        return(R_ANDN);
148    {_R_ORN}{_SPACJE}       yylval.lcalk = OPC_ORN;         return(R_ORN);
149    {_R_XNOR}{_SPACJE}      yylval.lcalk = OPC_XNOR;        return(R_XNOR);
150    {_R_ADDX}{_SPACJE}      yylval.lcalk = OPC_ADDX;        return(R_ADDX);
151    {_R_SUBX}{_SPACJE}      yylval.lcalk = OPC_SUBX;        return(R_SUBX);
152    {_R_ADDCC}{_SPACJE}     yylval.lcalk = OPC_ADDCC;       return(R_ADDCC);
153    {_R_ANDCC}{_SPACJE}     yylval.lcalk = OPC_ANDCC;       return(R_ANDCC);
154    {_R_ORCC}{_SPACJE}      yylval.lcalk = OPC_ORCC;        return(R_ORCC);
155    {_R_XORCC}{_SPACJE}     yylval.lcalk = OPC_XORCC;       return(R_XORCC);
156    {_R_SUBCC}{_SPACJE}     yylval.lcalk = OPC_SUBCC;       return(R_SUBCC);
157    {_R_ANDNCC}{_SPACJE}    yylval.lcalk = OPC_ANDNCC;      return(R_ANDNCC);
158    {_R_ORNCC}{_SPACJE}     yylval.lcalk = OPC_ORNCC;       return(R_ORNCC);
159    {_R_XNORCC}{_SPACJE}    yylval.lcalk = OPC_XNORCC;      return(R_XNORCC);
160    {_R_ADDXCC}{_SPACJE}    yylval.lcalk = OPC_ADDXCC;      return(R_ADDXCC);
161    {_R_SUBXCC}{_SPACJE}    yylval.lcalk = OPC_SUBXCC;      return(R_SUBXCC);
162    {_R_SLL}{_SPACJE}       yylval.lcalk = OPC_SLL;         return(R_SLL);
163    {_R_SRL}{_SPACJE}       yylval.lcalk = OPC_SRL;         return(R_SRL);
164    {_R_SRA}{_SPACJE}       yylval.lcalk = OPC_SRA;         return(R_SRA);
165    {_R_JMPL}{_SPACJE}      yylval.lcalk = OPC_JMPL;        return(R_JMPL);
166    {_R_SAVE}{_SPACJE}      yylval.lcalk = OPC_SAVE;        return(R_SAVE);
167    {_R_RESTORE}{_SPACJE}*  yylval.lcalk = OPC_RESTORE;     return(R_RESTORE);
168    {_R_SETHI}{_SPACJE}     return(R_SETHI);
169    {_R_CALL}{_SPACJE}      return(R_CALL);
170    {_R_LD}{_SPACJE}        yylval.lcalk = OPC_LD;          return(R_LD);
171    {_R_LDUB}{_SPACJE}      yylval.lcalk = OPC_LDUB;        return(R_LDUB);
172    {_R_LDUH}{_SPACJE}      yylval.lcalk = OPC_LDUH;        return(R_LDUH);
173    {_R_ST}{_SPACJE}        yylval.lcalk = OPC_ST;          return(R_ST);
174    {_R_STB}{_SPACJE}       yylval.lcalk = OPC_STB;         return(R_STB);
175    {_R_STH}{_SPACJE}       yylval.lcalk = OPC_STH;         return(R_STH);
176    {_R_LDSB}{_SPACJE}      yylval.lcalk = OPC_LDSB;        return(R_LDSB);
177    {_R_LDSH}{_SPACJE}      yylval.lcalk = OPC_LDSH;        return(R_LDSH);
178    {_R_LDSTUB}{_SPACJE}    yylval.lcalk = OPC_LDSTUB;      return(R_LDSTUB);
179    {_R_SWAP}{_SPACJE}      yylval.lcalk = OPC_SWAP;        return(R_SWAP);
180    
181    {_PR_MOV}{_SPACJE}      return(PR_MOV);
182    {_PR_CMP}{_SPACJE}      return(PR_CMP);
183    {_PR_TST}{_SPACJE}      return(PR_TST);
184    {_PR_NOT}{_SPACJE}      return(PR_NOT);
185    {_PR_NEG}{_SPACJE}      return(PR_NEG);
186    {_PR_INC}{_SPACJE}      return(PR_INC);
187    {_PR_DEC}{_SPACJE}      return(PR_DEC);
188    {_PR_CLR}{_SPACJE}      return(PR_CLR);
189    {_PR_RET}{_SPACJE}*     return(PR_RET);
190    {_PR_JMP}{_SPACJE}      return(PR_JMP);
191    {_PR_SKIPZ}{_SPACJE}*   return(PR_SKIPZ);
192    {_PR_SKIPNZ}{_SPACJE}*  return(PR_SKIPNZ);
193    {_PR_SET}{_SPACJE}      return(PR_SET);
194    {_PR_NOP}{_SPACJE}*     return(PR_NOP);
195    
196    
197    
198    
199    {_ALNUM}                return (CIAG_ALNUM);
200    {_ZNAK_ROWN}            return (ZNAK_ROWN);
201    
202    {_LICZBA}               yylval.lcalk = strtoul(yytext, NULL, 0); return (LICZBA);
203    
204  "'"                     { /* ciągi po ".ascii" muszą się zawierać w  "'"                     { /* ciągi po ".ascii" muszą się zawierać w
205                               cudzysłowach '' */                               cudzysłowach '' */
# Line 97  _PSEUDOR       mov|cmp|tst|not|neg|inc|dec|clr Line 259  _PSEUDOR       mov|cmp|tst|not|neg|inc|dec|clr
259  {_ALIGN}                return (ALIGN);  {_ALIGN}                return (ALIGN);
260  {_DATA}                 return (DATA);  {_DATA}                 return (DATA);
261  {_SKIP}                 return (SKIP);  {_SKIP}                 return (SKIP);
262    {_BYTE}                 return (BYTE);
263    {_HALF}                 return (HALF);
264    {_WORD}                 return (WORD);
265    
266    {_PRZECINEK}            return (PRZECINEK);
267    
268    {_REJESTR}              {
269                                    int ileDodac = 0;
270                                    int wartosc = 0;
271    
272                                    ++yytext;       //przechodzimy "%"
273    
274                                    if (strncasecmp(yytext,"fp",2) == 0)
275                                            yylval.lcalk = 30;      // %fp == %r30
276                                    else if (strncasecmp(yytext,"sp",2) == 0)
277                                            yylval.lcalk = 14;      // %sp == %r14
278                                    else
279                                    {
280                                            //mamy pojedynczą literkę oraz cyfry(ę)
281                                            // po niej - numer rejestru
282                                            wartosc = (int) strtol(yytext+1,NULL,0);
283                                            if (*yytext == 'r' || *yytext == 'R')
284                                            {
285                                                    if (wartosc > 31)
286                                                            yylval.lcalk = 0xFF;
287                                                    else
288                                                            yylval.lcalk = wartosc;
289                                            }
290                                            else
291                                            {
292                                                    if (wartosc > 7)
293                                                            yylval.lcalk = 0xFF;
294                                                    else
295                                                    {
296                                                            //lecimy dalej
297                                                            switch ((char) *yytext)
298                                                            {
299                                                            case 'o':
300                                                            case 'O':       ileDodac = 8;
301                                                                            break;
302                                                            case 'l':
303                                                            case 'L':       ileDodac = 16;
304                                                                            break;
305                                                            case 'i':
306                                                            case 'I':       ileDodac = 24;
307                                                                            break;
308                                                            }
309                                                            yylval.lcalk = wartosc + ileDodac;
310                                                    }
311                                            }
312                                    }
313                                    return (REJESTR);
314                            }
315    
316    {_HI}                   return (HI);
317    {_LO}                   return (LO);
318    {_NAWIASL}              return (NAWIASL);
319    {_NAWIASP}              return (NAWIASP);
320    
321    
322    
323    
324  {_KOMENTARZ}+.*[^\n]    /* komentarze po jakiejś komendzie/dyrektywie... */  {_KOMENTARZ}+.*[^\n]    /* komentarze po jakiejś komendzie/dyrektywie... */
325  {_SPACJE}+              /* zbędne spacje */  {_SPACJE}+              /* zbędne spacje */
326    
327  \n                      ++numerLinii; return (NLINIA);  \n                      ++numerLinii; return (NLINIA);
328  .                       { yyerror("ze co??"); exit(1); }  .                       { return ((char) *yytext); }
329    

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26