Commit 1b032096 authored by Taddeüs Kroes's avatar Taddeüs Kroes

Updated token formats and added tokes REF, INT instead of ARG.

parent c14e76cf
...@@ -2,17 +2,20 @@ ...@@ -2,17 +2,20 @@
#include <stdio.h> #include <stdio.h>
#include "y.tab.h" #include "y.tab.h"
%} %}
arg \$[a-zA-Z0-9\.]+ reg \$[a-zA-Z0-9]+
word [a-zA-Z0-9_\.]+
int [1-9][0-9]*
%% %%
#[^\n]* { yylval.sval = yytext; return COMMENT; } /* Comment */ [\n] { return NL; } /* Newline */
[a-zA-Z0-9$\.]+: { yylval.sval = yytext; return LABEL; } /* Label */ #.* { yylval.sval = yytext; return COMMENT; } /* Comment */
{arg} { yylval.sval = yytext; return ARG; } /* Arg of instr */ \..* { yylval.sval = yytext; return DIRECTIVE; } /* Assembly directive */
[0-9]+(\({arg}\))? { yylval.sval = yytext; return ARG; } /* Arg of instr */ {reg} { yylval.sval = yytext; return REG; } /* Registry address */
\.[^\n]* { yylval.sval = yytext; return DIRECTIVE; } /* Assembly */ {word}: { yylval.sval = yytext; return LABEL; } /* Label */
[a-z\.]+ { yylval.sval = yytext; return INSTR; } /* Instruction */ {int} { yylval.ival = atoi(yytext); return INT; } /* Integer */
[,] { return COMMA; } /* Comma */ [0-9]+(\({reg}\))? { yylval.sval = yytext; return OFFSET; } /* Registry offset */
[\n] { return NL; } /* New line */ [a-z\.]+ { yylval.sval = yytext; return INSTR; } /* Instruction */
{word} { yylval.sval = yytext; return REF; } /* Label reference */
[ \t]+ { ; } /* Ignore whitespace */ [,] { return COMMA; } /* Comma */
[ \t]+ ; /* Ignore whitespace */
...@@ -4,28 +4,27 @@ ...@@ -4,28 +4,27 @@
void yyerror(char*); void yyerror(char*);
%} %}
%token COMMA NL
%union { %union {
int ival;
char *sval; char *sval;
} }
%token <sval> LABEL %token NL COMMA
%token <sval> ARG %token <ival> INT
%token <sval> INSTR %token <sval> COMMENT DIRECTIVE REG LABEL OFFSET INSTR REF
%token <sval> DIRECTIVE
%token <sval> COMMENT
%% %%
symb: symb:
symb symb symb symb
| COMMENT {printf("Found a comment: %s\n", $1);}
| DIRECTIVE {printf("Found a directive: %s\n", $1);}
| REG {printf("Found a registry address: %s\n", $1);}
| LABEL {printf("Found a label: %s\n", $1);} | LABEL {printf("Found a label: %s\n", $1);}
| ARG {printf("Found an argument: %s\n", $1);} | REF {printf("Found a label reference: %s\n", $1);}
| INT {printf("Found an integer: %d\n", $1);}
| INSTR {printf("Found an instruction: %s\n", $1);} | INSTR {printf("Found an instruction: %s\n", $1);}
| DIRECTIVE {printf("Found a directive: %s\n", $1);}
| COMMA {printf("Found a comma\n");} | COMMA {printf("Found a comma\n");}
| COMMENT {printf("Found a comment: %s\n", $1);}
| NL {printf("Found a newline\n");} | NL {printf("Found a newline\n");}
; ;
%% %%
...@@ -41,7 +40,7 @@ main(int argc, const char* argv[]) ...@@ -41,7 +40,7 @@ main(int argc, const char* argv[])
printf("No file specified"); printf("No file specified");
exit(-1); exit(-1);
} }
// open a file handle to a particular file: // open a file handle to a particular file:
FILE *myfile = fopen(argv[1], "r"); FILE *myfile = fopen(argv[1], "r");
// make sure it is valid: // make sure it is valid:
...@@ -51,7 +50,7 @@ main(int argc, const char* argv[]) ...@@ -51,7 +50,7 @@ main(int argc, const char* argv[])
} }
// set lex to read from it instead of defaulting to STDIN: // set lex to read from it instead of defaulting to STDIN:
yyin = myfile; yyin = myfile;
// parse through the input until there is no more: // parse through the input until there is no more:
do { do {
yyparse(); yyparse();
...@@ -62,4 +61,4 @@ void yyerror(char *s) ...@@ -62,4 +61,4 @@ void yyerror(char *s)
{ {
printf("Found error: %s\n", s); printf("Found error: %s\n", s);
exit(-1); exit(-1);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment