Logo
~Apps~
~Projects~
~Contact~

a.lex

Go to the documentation of this file.
00001 %{
00002 #include <stdio.h>
00003 #include <string.h>
00004 #include <sys/types.h>
00005 #include <sys/stat.h>
00006 #include <unistd.h>
00007 
00008 #include "a.h"
00009 #include "a.tab.h"
00010 #include "Parser.h"
00011 
00012 #define C THIS -> m_the_str[THIS -> m_the_ptr]
00013 #define C_INCR THIS -> m_the_str[THIS -> m_the_ptr++]
00014 
00015 #define YY_INPUT(buf,result,max_size) { \
00016         if ( THIS -> m_the_str) \
00017                 *buf = C_INCR; \
00018         result = ( THIS -> m_the_str && *buf) ? 1 : YY_NULL; \
00019 }
00020 
00021 #define YY_DECL int yylex(void *yylval,void *parser)
00022 #define YYLVAL ((YYSTYPE *)yylval)
00023 
00024 %}
00025 
00026 DIGIT   [0-9]
00027 ID      [A-Z][A-Z0-9]*
00028 STRING  "\""[^\"]*"\""
00029 
00030 %%
00031 
00032 {DIGIT}+        {
00033                         YYLVAL -> d = atof(yytext);
00034                         return NUM;
00035                 }
00036 
00037 {DIGIT}*"."{DIGIT}* {
00038                         YYLVAL -> d = atof(yytext);
00039                         return NUM;
00040                 }
00041 
00042 {STRING}        {
00043                         strcpy(YYLVAL -> s,yytext + 1);
00044                         YYLVAL -> s[strlen(YYLVAL -> s) - 1] = 0;
00045                         return STRING;
00046                 }
00047 
00048 END             return End;
00049 FOR             return For;
00050 NEXT            return Next;
00051 DATA            {
00052                         int prevx;
00053 
00054                         prevx = THIS -> m_the_ptr;
00055                         while (C && C != ':')
00056                         {
00057                                 YYLVAL -> s[THIS -> m_the_ptr - prevx] = C;
00058                                 THIS -> m_the_ptr++;
00059                         }
00060                         YYLVAL -> s[THIS -> m_the_ptr - prevx] = 0;
00061                         return Data;
00062                 }
00063 INPUT           return Input;
00064 DEL             return Del;
00065 DIM             return Dim;
00066 READ            return Read;
00067 
00068 GR              return Gr;
00069 TEXT            return Text;
00070 PR              return Pr;
00071 IN              return In;
00072 CALL            return Call;
00073 PLOT            return Plot;
00074 HLIN            return Hlin;
00075 VLIN            return Vlin;
00076 
00077 HGR2            return Hgr2;
00078 HGR             return Hgr;
00079 HCOLOR          return Hcolor;
00080 HPLOT           return Hplot;
00081 DRAW            return Draw;
00082 XDRAW           return Xdraw;
00083 HTAB            return Htab;
00084 HOME            return Home;
00085 
00086 ROT             return Rot;
00087 SCALE           return Scale;
00088 SHLOAD          return Shload;
00089 TRACE           return Trace;
00090 NOTRACE         return Notrace;
00091 NORMAL          return Normal;
00092 INVERSE         return Inverse;
00093 FLASH           return Flash;
00094 
00095 COLOR           return Color;
00096 POP             return Pop;
00097 VTAB            return Vtab;
00098 HIMEM           return Himem;
00099 LOMEM           return Lomem;
00100 ONERR           return Onerr;
00101 RESUME          return Resume;
00102 RECALL          return Recall;
00103 
00104 STORE           return Store;
00105 SPEED"="        return Speed;
00106 LET             return Let;
00107 GOTO            return Goto;
00108 RUN             return Run;
00109 IF              return If;
00110 RESTORE         return Restore;
00111 
00112 GOSUB           return Gosub;
00113 RETURN          return Return;
00114 REM             {
00115                         strcpy(YYLVAL -> s,THIS -> m_the_str + THIS -> m_the_ptr);
00116                         C = 0;
00117                         return Rem;
00118                 }
00119 STOP            return Stop;
00120 ON              return On;
00121 WAIT            return Wait;
00122 LOAD            return Load;
00123 SAVE            return Save;
00124 
00125 DEF             return Def;
00126 POKE            return Poke;
00127 PRINT           return Print;
00128 CONT            return Cont;
00129 LIST            return List;
00130 CLEAR           return Clear;
00131 GET             return Get;
00132 NEW             return New;
00133 
00134 TAB             return Tab;
00135 TO              return To;
00136 FN              return Fn;
00137 SPC             return Spc;
00138 THEN            return Then;
00139 AT              return At;
00140 NOT             return Not;
00141 STEP            return Step;
00142 
00143 AND             return And;
00144 OR              return Or;
00145 
00146 SGN             return Sgn;
00147 INT             return Int;
00148 ABS             return Abs;
00149 USR             return Usr;
00150 FRE             return Fre;
00151 SCRN            return Scrn;
00152 
00153 PDL             return Pdl;
00154 POS             return Pos;
00155 SQR             return Sqr;
00156 RND             return Rnd;
00157 LOG             return Log;
00158 EXP             return Exp;
00159 COS             return Cos;
00160 SIN             return Sin;
00161 
00162 TAN             return Tan;
00163 ATN             return Atn;
00164 PEEK            return Peek;
00165 LEN             return Len;
00166 STR"$"          return Str;
00167 VAL             return Val;
00168 ASC             return Asc;
00169 CHR"$"          return Chr;
00170 
00171 LEFT"$"         return Left;
00172 RIGHT"$"        return Right;
00173 MID"$"          return Mid;
00174 
00175 
00176 "<"[ ]*"="              return LTEQ;
00177 "="[ ]*"<"              return LTEQ;
00178 "<"[ ]*">"              return NEQ;
00179 "="[ ]*">"              return GTEQ;
00180 ">"[ ]*"="              return GTEQ;
00181 
00182 ","|":"|";"     return *yytext;
00183 
00184 "="|"<"|">"|"("|")" {
00185                         return *yytext;
00186                 }
00187 "*"|"/"|"+"|"-" return *yytext;
00188 
00189 {ID}"$"         {
00190                         strcpy(YYLVAL -> s,yytext);
00191                         return STRINGVAR;
00192                 }
00193 
00194 {ID}"%"         {
00195                         strcpy(YYLVAL -> s,yytext);
00196                         return NUMVAR;
00197                 }
00198 
00199 {ID}            {
00200                         strcpy(YYLVAL -> s,yytext);
00201                         return IDENTIFIER;
00202                 }
00203 
00204 [ \t\n]
00205 
00206 "\""[^\"]*
00207 
00208 .               {
00209                         printf("Unrecognized char '%c' (0x%02x)\n",*yytext,*yytext);
00210                         *YYLVAL -> s = *yytext;
00211                         YYLVAL -> s[1] = 0;
00212                         return UNDEF;
00213                 }
00214 
00215 %%
00216 
00217 int yywrap()
00218 {
00219         return 1;               // end of file
00220 }
00221 
Page, code, and content Copyright (C) 2005 by Anders Hedström
Generated on Mon Aug 29 20:21:47 2005 for C++ Sockets by  doxygen 1.4.4