diff options
author | Dawn Perchik <dawn@cygnus> | 1997-02-11 02:07:57 +0000 |
---|---|---|
committer | Dawn Perchik <dawn@cygnus> | 1997-02-11 02:07:57 +0000 |
commit | 8e5c905e99f422e16eddf45d6718c0931f288a05 (patch) | |
tree | 75ff8dc90b50e814483212922889591ed0f33aea /gas/itbl-lex.l | |
parent | 242ce3d85799ded0e3f725c919c41cb9af1183e0 (diff) | |
download | ppe42-binutils-8e5c905e99f422e16eddf45d6718c0931f288a05.tar.gz ppe42-binutils-8e5c905e99f422e16eddf45d6718c0931f288a05.zip |
* itbl-ops.c: New file. Add support for dynamically read
instruction registers, opcodes and formats. Build internal table
for new instructions and provide callbacks for assembler and
disassembler.
* itbl-lex.l, itbl-parse.y: Lex and yacc parsers for instruction
spec table.
* itbl-ops.h: New file. Header file for itbl support.
* config/itbl-mips.h: New file. Mips specific definitions for
itbl support.
Diffstat (limited to 'gas/itbl-lex.l')
-rw-r--r-- | gas/itbl-lex.l | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/gas/itbl-lex.l b/gas/itbl-lex.l new file mode 100644 index 0000000000..8c1e8e4313 --- /dev/null +++ b/gas/itbl-lex.l @@ -0,0 +1,86 @@ +%{ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <ctype.h> +#include "itbl-parse.h" + +#ifdef DEBUG +#define DBG(x) printf x +#define MDBG(x) printf x +#else +#define DBG(x) +#define MDBG(x) +#endif + +int insntbl_line = 1; +%} + +ALNUM [A-Za-z0-9_] +DIGIT [0-9] +ALPHA [A-Za-z_] +HEX [0-9A-Fa-f] + +%% + +"creg"|"CREG" { + return CREG; + } +"dreg"|"DREG" { + return DREG; + } +"greg"|"GREG" { + return GREG; + } +"immed"|"IMMED" { + return IMMED; + } +"addr"|"ADDR" { + return ADDR; + } +"insn"|"INSN" { + return INSN; + } +"p"{DIGIT} { + yytext[yyleng]=0; + yylval.processor = strtoul(yytext+1,0,0); + return PNUM; + } +{DIGIT}+ { + yytext[yyleng]=0; + yylval.num = strtoul(yytext,0,0); + return NUM; + } +"0x"{HEX}+ { + yytext[yyleng]=0; + yylval.num = strtoul(yytext,0,0); + return NUM; + } +{ALPHA}{ALNUM}* { + yytext[yyleng]=0; + yylval.str = strdup(yytext); + return ID; + } +";"|"#" { + int c; + while ((c = input()) != EOF) { + if (c == '\n') + { + unput(c); + break; + } + } + } +"\n" { + insntbl_line++; + MDBG(("in lex, NL=%d (x%x)\n",NL,NL)); + return NL; + } +" "|"\t" { } +. { + MDBG(("char=%x,%d\n",yytext[0],yytext[0])); + return yytext[0]; + } +%% + +int yywrap() { return 1; } |