OpenCores
URL https://opencores.org/ocsvn/c16/c16/trunk

Subversion Repositories c16

[/] [c16/] [trunk/] [asm/] [assembler.flex] - Blame information for rev 33

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 jsauermann
 
2
D                       [0-9]
3
L                       [A-Za-z_]
4
LD                      [0-9A-Za-z_]
5
ID                      {L}{LD}*
6
HX                      [0-9A-Fa-f]
7
 
8
%{
9 33 jsauermann
 
10
#include 
11 2 jsauermann
#include 
12 33 jsauermann
#include 
13 2 jsauermann
 
14
class Opcode;
15
class Operand;
16
class Expression;
17
 
18 30 jsauermann
#include "assembler_bison.hh"
19 2 jsauermann
 
20
void count();
21
int show_token(int op, const char * txt, YYSTYPE & lval);
22
#define token(x) show_token(x, yytext, yylval)
23
 
24
%}
25
 
26
%%
27
";".*                   { count(); return token(EOL  ); }
28
" "                     { count(); }
29
"\n"                    { count(); return token(EOL  ); }
30
 
31
".BYTE"                 { count(); return token(_BYTE  ); }
32
".WORD"                 { count(); return token(_WORD  ); }
33
".OFFSET"               { count(); return token(_OFFSET); }
34
".EXTERN"               { count(); return token(_EXTERN); }
35
".STATIC"               { count(); return token(_STATIC); }
36
ADD                     { count(); return token(ADD    ); }
37
AND                     { count(); return token(AND    ); }
38
CALL                    { count(); return token(CALL   ); }
39
CLRB                    { count(); return token(CLRB   ); }
40
CLRW                    { count(); return token(CLRW   ); }
41
DI                      { count(); return token(DI     ); }
42
DIV_IS                  { count(); return token(DIV_IS ); }
43
DIV_IU                  { count(); return token(DIV_IU ); }
44
EI                      { count(); return token(EI     ); }
45
HALT                    { count(); return token(HALT   ); }
46
IN                      { count(); return token(IN     ); }
47
JMP                     { count(); return token(JMP    ); }
48
LEA                     { count(); return token(LEA    ); }
49
LNOT                    { count(); return token(LNOT   ); }
50
MD_STP                  { count(); return token(MD_STP ); }
51
MD_FIN                  { count(); return token(MD_FIN ); }
52
MOD_FIN                 { count(); return token(MOD_FIN); }
53
MUL_IS                  { count(); return token(MUL_IS ); }
54
MUL_IU                  { count(); return token(MUL_IU ); }
55
MOVE                    { count(); return token(MOVE   ); }
56
NEG                     { count(); return token(NEG    ); }
57
NOT                     { count(); return token(NOT    ); }
58
NOP                     { count(); return token(NOP    ); }
59
OUT                     { count(); return token(OUT    ); }
60
OR                      { count(); return token(OR     ); }
61
RET                     { count(); return token(RET    ); }
62
RETI                    { count(); return token(RETI   ); }
63
SEQ                     { count(); return token(SEQ    ); }
64
SGE                     { count(); return token(SGE    ); }
65
SGT                     { count(); return token(SGT    ); }
66
SLE                     { count(); return token(SLE    ); }
67
SLT                     { count(); return token(SLT    ); }
68
SNE                     { count(); return token(SNE    ); }
69
SHS                     { count(); return token(SHS    ); }
70
SHI                     { count(); return token(SHI    ); }
71
SLS                     { count(); return token(SLS    ); }
72
SLO                     { count(); return token(SLO    ); }
73
LSL                     { count(); return token(LSL    ); }
74
LSR                     { count(); return token(LSR    ); }
75
ASR                     { count(); return token(ASR    ); }
76
SUB                     { count(); return token(SUB    ); }
77
XOR                     { count(); return token(XOR    ); }
78
 
79
RR                      { count(); return token(_RR   );  }
80
R                       { count(); return token(_R    );  }
81
RS                      { count(); return token(_RS   );  }
82
RU                      { count(); return token(_RU   );  }
83
RRZ                     { count(); return token(_RRZ  );  }
84
RRNZ                    { count(); return token(_RRNZ );  }
85
 
86
LL                      { count(); return token(_LL   );  }
87
L                       { count(); return token(_L    );  }
88
LS                      { count(); return token(_LS   );  }
89
LU                      { count(); return token(_LU   );  }
90
 
91
SP                      { count(); return token(_SP   );  }
92
 
93
[#,:+=()*/-]            { count(); return token(*yytext); }
94
 
95
0[xX]{HX}+              { count();
96
                          sscanf(yytext + 2, "%X", &yylval._num);
97
                          return token(INT   ); }
98
 
99
"-"0[xX]{HX}+           { count();
100
                          sscanf(yytext + 3, "%X", &yylval._num);
101
                          yylval._num = -yylval._num;
102
                          return token(INT   ); }
103
 
104
{D}+                    { count();
105
                          sscanf(yytext, "%d", &yylval._num);
106
                          return token(INT   ); }
107
 
108
"-"{D}+                 { count();
109
                          sscanf(yytext + 1, "%d", &yylval._num);
110
                          yylval._num = -yylval._num;
111
                          return token(INT   ); }
112
 
113
{ID}                    { count();   return token(IDENT); }
114
 
115
[ \t\v\n\f]             { count(); }
116
 
117
<>                       { return EOFILE;  }
118
.                       { return ERROR;   }
119
 
120
%%
121
 
122
int yywrap()
123
{
124
        return(1);
125
}
126
 
127
int column = 0;
128
int row    = 1;
129
 
130
//-----------------------------------------------------------------------------
131
void count()
132
{
133
   for (int i = 0; yytext[i]; i++)
134
       {
135
         if (yytext[i] == '\n')        { column = 0;   row++; }
136
         else if (yytext[i] == '\t')   column += 8 - (column % 8);
137
         else                          column++;
138
       }
139
}
140
//-----------------------------------------------------------------------------
141
int yyerror(const char *s)
142
{
143
   printf("\n%s Line %d Col %d\n", s, row, column);
144
   fflush(stdout);
145
}
146
//-----------------------------------------------------------------------------
147
bool did_crlf = false;
148
bool show_it  = false;
149
 
150
int show_token(int op, const char * txt, YYSTYPE & lval)
151
{
152
   if (op == INT)
153
      {
154
        did_crlf = false;
155
        if (show_it)   fprintf(stderr, "Token %3d : %s\n", op, txt);
156
      }
157
   else if (op == EOL)
158
      {
159
        lval._txt = 0;
160
        if (!did_crlf && show_it)   fprintf(stderr, "\n");
161
        did_crlf = true;
162
      }
163
   else
164
      {
165
        assert(txt);
166
        did_crlf = false;
167
        if (show_it)   fprintf(stderr, "Token %3d : %s\n", op, txt);
168
        char * cp = new char[strlen(txt) + 1];
169
        strcpy(cp, txt);
170
        lval._txt = cp;
171
      }
172
    return op;
173
}
174
//-----------------------------------------------------------------------------

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.