mirror of
https://github.com/iritmaximus/ttk91-compiler.git
synced 2026-10-12 19:13:40 +03:00
updated scanner to include token value when lexing
This commit is contained in:
+15
-14
@@ -1,5 +1,6 @@
|
||||
%{
|
||||
#include "token.h"
|
||||
#define YYSTYPE char *
|
||||
%}
|
||||
|
||||
%option yylineno
|
||||
@@ -7,30 +8,30 @@
|
||||
%%
|
||||
(" "|\t|\n) /* skip whitespace */
|
||||
|
||||
(@|=) { return TOKEN_ADDR_M; }
|
||||
(@|=) { yylval.character = yytext; return TOKEN_ADDR_M; }
|
||||
\( { return TOKEN_PAREN_L; }
|
||||
\) { return TOKEN_PAREN_R; }
|
||||
, { return TOKEN_COMMA; }
|
||||
;.*$ { return TOKEN_COMMENT; }
|
||||
|
||||
|
||||
(LOAD|STORE|IN|OUT) { return TOKEN_OPER_DATA; } /* TODO, currently only in uppercase */
|
||||
(ADD|SUB|MUL|DIV|MOD) { return TOKEN_OPER_AR; }
|
||||
(AND|OR|XOR|NOT|SHL|SHR|SHRA|COMP) { return TOKEN_OPER_LOGIC; }
|
||||
(JUMP|JNEG|JZER|JPOS|JNNEG|JNZER|JNPOS|JLES|JEQU|JGRE|JNLES|JNEQU|JNGRE) { return TOKEN_OPER_BRANCH; }
|
||||
(PUSH|POP|PUSHR|POPR) { return TOKEN_OPER_STACK; }
|
||||
(CALL|EXIT|SVC|NOP) { return TOKEN_OPER_SYS; }
|
||||
(HALT|TIME|DATE|READ|WRITE) { return TOKEN_SYS_NUM; }
|
||||
(EQU|DC|DS|DEF) { return TOKEN_COMP_OPER; }
|
||||
(LOAD|STORE|IN|OUT) { yylval.name = yytext; return TOKEN_OPER_DATA; } /* TODO, currently only in uppercase */
|
||||
(ADD|SUB|MUL|DIV|MOD) { yylval.name = yytext; return TOKEN_OPER_AR; }
|
||||
(AND|OR|XOR|NOT|SHL|SHR|SHRA|COMP) { yylval.name = yytext; return TOKEN_OPER_LOGIC; }
|
||||
(JUMP|JNEG|JZER|JPOS|JNNEG|JNZER|JNPOS|JLES|JEQU|JGRE|JNLES|JNEQU|JNGRE) { yylval.name = yytext; return TOKEN_OPER_BRANCH; }
|
||||
(PUSH|POP|PUSHR|POPR) { yylval.name = yytext; return TOKEN_OPER_STACK; }
|
||||
(CALL|EXIT|SVC|NOP) { yylval.name = yytext; return TOKEN_OPER_SYS; }
|
||||
(HALT|TIME|DATE|READ|WRITE) { yylval.name = yytext; return TOKEN_SYS_NUM; }
|
||||
(EQU|DC|DS|DEF) { yylval.name = yytext; return TOKEN_COMP_OPER; }
|
||||
|
||||
(SP|FP|PC) { return TOKEN_STACK_REGISTER; }
|
||||
(SP|FP|PC) { yylval.name = yytext; return TOKEN_STACK_REGISTER; /* TODO possible unnecessary token PC */ }
|
||||
|
||||
R[0-8] { return TOKEN_REGISTER; }
|
||||
[0-9]+ { return TOKEN_NUMBER; }
|
||||
[a-öA-Ö]([a-öA-Ö0-9_])* { return TOKEN_LABEL; }
|
||||
R[0-8] { yylval.name = yytext; return TOKEN_REGISTER; }
|
||||
[0-9]+ { yylval.num = atoi(yytext); return TOKEN_NUMBER; }
|
||||
[a-öA-Ö]([a-öA-Ö0-9_])* { yylval.name = yytext; return TOKEN_LABEL; }
|
||||
- { return TOKEN_SIGN; }
|
||||
|
||||
. { return TOKEN_ERROR; }
|
||||
. { yylval.name = yytext; return TOKEN_ERROR; }
|
||||
|
||||
|
||||
%%
|
||||
|
||||
Reference in New Issue
Block a user