home *** CD-ROM | disk | FTP | other *** search
Lex Description | 1992-11-14 | 8.8 KB | 265 lines |
- %{
- /*
- * Copyright (C) 1990-1992 Quinn C. Jensen
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. The author makes no representations
- * about the suitability of this software for any purpose. It is
- * provided "as is" without express or implied warranty.
- *
- */
- %}
- %a 10000
- %o 10000
- %e 2000
- %k 2000
- %p 3000
- A [Aa]
- B [Bb]
- C [Cc]
- D [Dd]
- E [Ee]
- F [Ff]
- G [Gg]
- H [Hh]
- I [Ii]
- J [Jj]
- K [Kk]
- L [Ll]
- M [Mm]
- N [Nn]
- O [Oo]
- P [Pp]
- Q [Qq]
- R [Rr]
- S [Ss]
- T [Tt]
- U [Uu]
- V [Vv]
- W [Ww]
- X [Xx]
- Y [Yy]
- Z [Zz]
- WHITE [ \t]+
- ALCHR [_A-Za-z]
- ALPHA {ALCHR}+
- NUM [0-9]+
- FRAC ("-"|"")({NUM}"."{NUM})|("."{NUM})
- ALNUM {ALCHR}[0-9A-Za-z_]*
- HEXNUM [0-9A-Fa-f]+
- BW (^|{WHITE})
- %%
- {WHITE} ;
- \n {curline++; RET(EOL);}
- @ {RET(EOS);}
- ;.*$ {RET(COMMENT);}
- {X}: {RET(XMEM);}
- {Y}: {RET(YMEM);}
- {L}: {RET(LMEM);}
- {P}: {RET(PMEM);}
- {A}10 {RET(A10);}
- {A} {RET(AAAA);}
- {B}10 {RET(B10);}
- {B} {RET(BBBB);}
- {A}{B} {RET(AABB);}
- {B}{A} {RET(BBAA);}
- {X} {RET(XXXX);}
- {Y} {RET(YYYY);}
- {S}{R} {RET(SR);}
- {M}{R} {RET(MR);}
- {C}{C}{R} {RET(CCR);}
- {O}{M}{R} {RET(OMR);}
- {S}{P} {RET(SP);}
- {S}{S}{H} {RET(SSH);}
- {S}{S}{L} {RET(SSL);}
- {L}{A} {RET(LA);}
- {L}{C} {RET(LC);}
- {A}[0-2] {yylval.ival = atoi(&yytext[1]); RET(AREG);}
- {B}[0-2] {yylval.ival = atoi(&yytext[1]); RET(BREG);}
- {M}[0-7] {yylval.ival = atoi(&yytext[1]); RET(MREG);}
- {N}[0-7] {yylval.ival = atoi(&yytext[1]); RET(NREG);}
- {R}[0-7] {yylval.ival = atoi(&yytext[1]); RET(RREG);}
- {X}[01] {yylval.ival = atoi(&yytext[1]); RET(XREG);}
- {Y}[01] {yylval.ival = atoi(&yytext[1]); RET(YREG);}
- "$"{HEXNUM} {yylval.n.type = INT; yylval.n.val.i = strtol(&yytext[1], 0, 16); RET(CHEX);}
- {FRAC} {yylval.n.type = FLT; yylval.n.val.f = atof(yytext); RET(FRAC);}
- {NUM} {yylval.n.type = INT; yylval.n.val.i = atoi(yytext); RET(CDEC);}
- {A}{B}{S} {RET(OP_ABS);}
- {A}{D}{C} {RET(OP_ADC);}
- {A}{D}{D} {RET(OP_ADD);}
- {A}{D}{D}{L} {RET(OP_ADDL);}
- {A}{D}{D}{R} {RET(OP_ADDR);}
- {A}{S}{L} {RET(OP_ASL);}
- {A}{S}{R} {RET(OP_ASR);}
- {C}{L}{R} {RET(OP_CLR);}
- {C}{M}{P} {RET(OP_CMP);}
- {C}{M}{P}{M} {RET(OP_CMPM);}
- {D}{I}{V} {RET(OP_DIV);}
- {M}{A}{C} {RET(OP_MAC);}
- {M}{A}{C}{R} {RET(OP_MACR);}
- {M}{P}{Y} {RET(OP_MPY);}
- {M}{P}{Y}{R} {RET(OP_MPYR);}
- {N}{E}{G} {RET(OP_NEG);}
- {N}{O}{R}{M} {RET(OP_NORM);}
- {R}{N}{D} {RET(OP_RND);}
- {S}{B}{C} {RET(OP_SBC);}
- {S}{U}{B} {RET(OP_SUB);}
- {S}{U}{B}{L} {RET(OP_SUBL);}
- {S}{U}{B}{R} {RET(OP_SUBR);}
- {T}{C}{C} {yylval.cond = 0x0; RET(OP_TCC);}
- {T}{H}{S} {yylval.cond = 0x0; RET(OP_TCC);}
- {T}{G}{E} {yylval.cond = 0x1; RET(OP_TCC);}
- {T}{N}{E} {yylval.cond = 0x2; RET(OP_TCC);}
- {T}{P}{L} {yylval.cond = 0x3; RET(OP_TCC);}
- {T}{N}{N} {yylval.cond = 0x4; RET(OP_TCC);}
- {T}{E}{C} {yylval.cond = 0x5; RET(OP_TCC);}
- {T}{L}{C} {yylval.cond = 0x6; RET(OP_TCC);}
- {T}{G}{T} {yylval.cond = 0x7; RET(OP_TCC);}
- {T}{C}{S} {yylval.cond = 0x8; RET(OP_TCC);}
- {T}{L}{O} {yylval.cond = 0x8; RET(OP_TCC);}
- {T}{L}{T} {yylval.cond = 0x9; RET(OP_TCC);}
- {T}{E}{Q} {yylval.cond = 0xA; RET(OP_TCC);}
- {T}{M}{I} {yylval.cond = 0xB; RET(OP_TCC);}
- {T}{N}{R} {yylval.cond = 0xC; RET(OP_TCC);}
- {T}{E}{S} {yylval.cond = 0xD; RET(OP_TCC);}
- {T}{L}{S} {yylval.cond = 0xE; RET(OP_TCC);}
- {T}{L}{E} {yylval.cond = 0xF; RET(OP_TCC);}
- {T}{F}{R} {RET(OP_TFR);}
- {T}{S}{T} {RET(OP_TST);}
- {A}{N}{D} {RET(OP_AND);}
- {A}{N}{D}{I} {RET(OP_ANDI);}
- {E}{O}{R} {RET(OP_EOR);}
- {L}{S}{L} {RET(OP_LSL);}
- {L}{S}{R} {RET(OP_LSR);}
- {N}{O}{T} {RET(OP_NOT);}
- {O}{R} {RET(OP_OR);}
- {O}{R}{I} {RET(OP_ORI);}
- {R}{O}{L} {RET(OP_ROL);}
- {R}{O}{R} {RET(OP_ROR);}
- {B}{C}{L}{R} {RET(OP_BCLR);}
- {B}{S}{E}{T} {RET(OP_BSET);}
- {B}{C}{H}{G} {RET(OP_BCHG);}
- {B}{T}{S}{T} {RET(OP_BTST);}
- {D}{O} {RET(OP_DO);}
- {E}{N}{D}{D}{O} {RET(OP_ENDDO);}
- {L}{U}{A} {RET(OP_LUA);}
- {M}{O}{V}{E} {RET(OP_MOVE);}
- {M}{O}{V}{E}{C} {RET(OP_MOVEC);}
- {M}{O}{V}{E}{M} {RET(OP_MOVEM);}
- {M}{O}{V}{E}{P} {RET(OP_MOVEP);}
- {I}{N}{C}{L}{U}{D}{E} {RET(OP_INCLUDE);}
- {I}{L}{L}{E}{G}{A}{L} {RET(OP_ILLEGAL);}
- {J}{C}{C} {yylval.cond = 0x0; RET(OP_JCC);}
- {J}{H}{S} {yylval.cond = 0x0; RET(OP_JCC);}
- {J}{G}{E} {yylval.cond = 0x1; RET(OP_JCC);}
- {J}{N}{E} {yylval.cond = 0x2; RET(OP_JCC);}
- {J}{P}{L} {yylval.cond = 0x3; RET(OP_JCC);}
- {J}{N}{N} {yylval.cond = 0x4; RET(OP_JCC);}
- {J}{E}{C} {yylval.cond = 0x5; RET(OP_JCC);}
- {J}{L}{C} {yylval.cond = 0x6; RET(OP_JCC);}
- {J}{G}{T} {yylval.cond = 0x7; RET(OP_JCC);}
- {J}{C}{S} {yylval.cond = 0x8; RET(OP_JCC);}
- {J}{L}{O} {yylval.cond = 0x8; RET(OP_JCC);}
- {J}{L}{T} {yylval.cond = 0x9; RET(OP_JCC);}
- {J}{E}{Q} {yylval.cond = 0xA; RET(OP_JCC);}
- {J}{M}{I} {yylval.cond = 0xB; RET(OP_JCC);}
- {J}{N}{R} {yylval.cond = 0xC; RET(OP_JCC);}
- {J}{E}{S} {yylval.cond = 0xD; RET(OP_JCC);}
- {J}{L}{S} {yylval.cond = 0xE; RET(OP_JCC);}
- {J}{L}{E} {yylval.cond = 0xF; RET(OP_JCC);}
- {J}{M}{P} {RET(OP_JMP);}
- {J}{C}{L}{R} {RET(OP_JCLR);}
- {J}{S}{E}{T} {RET(OP_JSET);}
- {J}{S}{C}{C} {yylval.cond = 0x0; RET(OP_JSCC);}
- {J}{S}{H}{S} {yylval.cond = 0x0; RET(OP_JSCC);}
- {J}{S}{G}{E} {yylval.cond = 0x1; RET(OP_JSCC);}
- {J}{S}{N}{E} {yylval.cond = 0x2; RET(OP_JSCC);}
- {J}{S}{P}{L} {yylval.cond = 0x3; RET(OP_JSCC);}
- {J}{S}{N}{N} {yylval.cond = 0x4; RET(OP_JSCC);}
- {J}{S}{E}{C} {yylval.cond = 0x5; RET(OP_JSCC);}
- {J}{S}{L}{C} {yylval.cond = 0x6; RET(OP_JSCC);}
- {J}{S}{G}{T} {yylval.cond = 0x7; RET(OP_JSCC);}
- {J}{S}{C}{S} {yylval.cond = 0x8; RET(OP_JSCC);}
- {J}{S}{L}{O} {yylval.cond = 0x8; RET(OP_JSCC);}
- {J}{S}{L}{T} {yylval.cond = 0x9; RET(OP_JSCC);}
- {J}{S}{E}{Q} {yylval.cond = 0xA; RET(OP_JSCC);}
- {J}{S}{M}{I} {yylval.cond = 0xB; RET(OP_JSCC);}
- {J}{S}{N}{R} {yylval.cond = 0xC; RET(OP_JSCC);}
- {J}{S}{E}{S} {yylval.cond = 0xD; RET(OP_JSCC);}
- {J}{S}{L}{S} {yylval.cond = 0xE; RET(OP_JSCC);}
- {J}{S}{L}{E} {yylval.cond = 0xF; RET(OP_JSCC);}
- {J}{S}{R} {RET(OP_JSR);}
- {J}{S}{C}{L}{R} {RET(OP_JSCLR);}
- {J}{S}{S}{E}{T} {RET(OP_JSSET);}
- {N}{O}{P} {RET(OP_NOP);}
- {R}{E}{P} {RET(OP_REP);}
- {R}{E}{S}{E}{T} {RET(OP_RESET);}
- {R}{T}{I} {RET(OP_RTI);}
- {R}{T}{S} {RET(OP_RTS);}
- {S}{T}{O}{P} {RET(OP_STOP);}
- {S}{W}{I} {RET(OP_SWI);}
- {W}{A}{I}{T} {RET(OP_WAIT);}
- {E}{Q}{U} {RET(OP_EQU);}
- {O}{R}{G} {RET(OP_ORG);}
- {D}{C} {RET(OP_DC);}
- {E}{N}{D} {RET(OP_END);}
- {P}{A}{G}{E} {RET(OP_PAGE);}
- {P}{S}{E}{C}{T} {RET(OP_PSECT);}
- {A}{L}{I}{G}{N} {RET(OP_ALIGN);}
- {ALNUM} {yylval.sval = strsave(yytext); RET(SYM);};
- '\\b' {yylval.cval = '\b'; RET(CHAR);};
- '\\f' {yylval.cval = '\f'; RET(CHAR);};
- '\\n' {yylval.cval = '\n'; RET(CHAR);};
- '\\r' {yylval.cval = '\r'; RET(CHAR);};
- '\\t' {yylval.cval = '\t'; RET(CHAR);};
- '\\\\' {yylval.cval = '\\'; RET(CHAR);};
- '.' {yylval.cval = yytext[1]; RET(CHAR);};
- \".*\" |
- '..+' {yylval.sval = (char *)fixstring(yytext);
- yylval.sval = strsave(yylval.sval);
- RET(STRING);};
- "<<" {RET(SHL);};
- ">>" {RET(SHR);};
- . {RET(yytext[0]);}
- %%
-
- #undef input
- #define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):lgetc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
-
- #define INLINE 1024
-
- char inline[INLINE], *ip = NULL;
-
- lgetc(fp)
- FILE *fp;
- {
- int c;
-
- if(NOT ip) {
- if(NOT fgets(inline, INLINE, fp))
- return(EOF);
- rmcr(inline);
- ip = inline;
- }
- c = *ip;
-
- if(ldebug) {
- printf("i='%c'(%x)", c, c);
- fflush(stdout);
- }
-
- switch(c) {
- case '\0':
- c = '\n';
- ip = NULL;
- break;
- default:
- ip++;
- break;
- }
- return(c);
- }
-