Compare commits

...

2 Commits

Author SHA1 Message Date
Eatswap 7f79bd7768
feat: update token type for tokens 2022-12-12 21:40:03 +08:00
Eatswap e7256f0547
fix: token RETURN 2022-12-12 21:39:13 +08:00
2 changed files with 46 additions and 30 deletions

View File

@ -59,6 +59,7 @@ do [dD][oO]
aref [aA][rR][eE][fF] aref [aA][rR][eE][fF]
t [tT] t [tT]
nil [nN][iI][lL] nil [nN][iI][lL]
return [rR][eE][tT][uU][rR][nN]
makearray [mM][aA][kK][eE][-][aA][rR][rR][aA][yY] makearray [mM][aA][kK][eE][-][aA][rR][rR][aA][yY]
defconstant [dD][eE][fF][cC][oO][nN][sS][tT][aA][nN][tT] defconstant [dD][eE][fF][cC][oO][nN][sS][tT][aA][nN][tT]
@ -327,6 +328,11 @@ defconstant [dD][eE][fF][cC][oO][nN][sS][tT][aA][nN][tT]
return token::TOKEN_NIL; return token::TOKEN_NIL;
}; };
{return} {
std::printf("Scanned return\n");
return token::TOKEN_RETURN;
};
{makearray} { {makearray} {
std::printf("Scanned makearray\n"); std::printf("Scanned makearray\n");
return token::TOKEN_MAKE_ARRAY; return token::TOKEN_MAKE_ARRAY;

View File

@ -10,6 +10,7 @@
#include <typeinfo> #include <typeinfo>
#include "token.h" #include "token.h"
#include "AST.h"
namespace DragonLisp { namespace DragonLisp {
class DLDriver; class DLDriver;
@ -86,6 +87,7 @@ namespace DragonLisp {
AREF "aref" AREF "aref"
T "t" T "t"
NIL "nil" NIL "nil"
RETURN "return"
MAKE_ARRAY "make-array" MAKE_ARRAY "make-array"
DEFCONSTANT "defconstant" DEFCONSTANT "defconstant"
; ;
@ -96,6 +98,14 @@ namespace DragonLisp {
%token <std::string> STRING "string" %token <std::string> STRING "string"
%token <std::string> IDENTIFIER "identifier" %token <std::string> IDENTIFIER "identifier"
%type <DragonLisp::Token> var-op-tokens
%type <DragonLisp::Token> lval-op-tokens
%type <DragonLisp::Token> unary-tokens
%type <DragonLisp::Token> binary-tokens
%type <DragonLisp::Token> list-tokens
%type <std::unique_ptr<DragonLisp::ExprAST>> R-Value
%define parse.error verbose %define parse.error verbose
%start S %start S
@ -168,9 +178,9 @@ S-Expr-var-op
; ;
var-op-tokens var-op-tokens
: DEFVAR { std::printf("Parsed var-op-tokens -> DEFVAR\n"); } : DEFVAR { std::printf("Parsed var-op-tokens -> DEFVAR\n"); $$ = DragonLisp::Token::DEFVAR; }
| SETQ { std::printf("Parsed var-op-tokens -> SETQ\n"); } | SETQ { std::printf("Parsed var-op-tokens -> SETQ\n"); $$ = DragonLisp::Token::SETQ; }
| DEFCONSTANT { std::printf("Parsed var-op-tokens -> DEFCONSTANT\n"); } | DEFCONSTANT { std::printf("Parsed var-op-tokens -> DEFCONSTANT\n"); $$ = DragonLisp::Token::DEFCONSTANT; }
; ;
S-Expr-Lval-op S-Expr-Lval-op
@ -178,9 +188,9 @@ S-Expr-Lval-op
; ;
lval-op-tokens lval-op-tokens
: SETF { std::printf("Parsed lval-op-tokens -> SETF\n"); } : SETF { std::printf("Parsed lval-op-tokens -> SETF\n"); $$ = DragonLisp::Token::SETF; }
| INCF { std::printf("Parsed lval-op-tokens -> INCF\n"); } | INCF { std::printf("Parsed lval-op-tokens -> INCF\n"); $$ = DragonLisp::Token::INCF; }
| DECF { std::printf("Parsed lval-op-tokens -> DECF\n"); } | DECF { std::printf("Parsed lval-op-tokens -> DECF\n"); $$ = DragonLisp::Token::DECF; }
; ;
S-Expr-unary S-Expr-unary
@ -188,9 +198,9 @@ S-Expr-unary
; ;
unary-tokens unary-tokens
: NOT { std::printf("Parsed unary-tokens -> NOT\n"); } : NOT { std::printf("Parsed unary-tokens -> NOT\n"); $$ = DragonLisp::Token::NOT; }
| PRINT { std::printf("Parsed unary-tokens -> PRINT\n"); } | PRINT { std::printf("Parsed unary-tokens -> PRINT\n"); $$ = DragonLisp::Token::PRINT; }
| MAKE_ARRAY { std::printf("Parsed unary-tokens -> MAKE_ARRAY\n"); } | MAKE_ARRAY { std::printf("Parsed unary-tokens -> MAKE_ARRAY\n"); $$ = DragonLisp::Token::MAKE_ARRAY; }
; ;
S-Expr-binary S-Expr-binary
@ -198,13 +208,13 @@ S-Expr-binary
; ;
binary-tokens binary-tokens
: LESS { std::printf("Parsed binary-tokens -> LESS\n"); } : LESS { std::printf("Parsed binary-tokens -> LESS\n"); $$ = DragonLisp::Token::LESS; }
| LESS_EQUAL { std::printf("Parsed binary-tokens -> LESS_EQUAL\n"); } | LESS_EQUAL { std::printf("Parsed binary-tokens -> LESS_EQUAL\n"); $$ = DragonLisp::Token::LESS_EQUAL; }
| GREATER { std::printf("Parsed binary-tokens -> GREATER\n"); } | GREATER { std::printf("Parsed binary-tokens -> GREATER\n"); $$ = DragonLisp::Token::GREATER; }
| GREATER_EQUAL { std::printf("Parsed binary-tokens -> GREATER_EQUAL\n"); } | GREATER_EQUAL { std::printf("Parsed binary-tokens -> GREATER_EQUAL\n"); $$ = DragonLisp::Token::GREATER_EQUAL; }
| LOGNOR { std::printf("Parsed binary-tokens -> LOGNOR\n"); } | LOGNOR { std::printf("Parsed binary-tokens -> LOGNOR\n"); $$ = DragonLisp::Token::LOGNOR; }
| MOD { std::printf("Parsed binary-tokens -> MOD\n"); } | MOD { std::printf("Parsed binary-tokens -> MOD\n"); $$ = DragonLisp::Token::MOD; }
| REM { std::printf("Parsed binary-tokens -> REM\n"); } | REM { std::printf("Parsed binary-tokens -> REM\n"); $$ = DragonLisp::Token::MOD; /* This is the same as MOD. */ }
; ;
S-Expr-list S-Expr-list
@ -212,20 +222,20 @@ S-Expr-list
; ;
list-tokens list-tokens
: EQUAL { std::printf("Parsed list-tokens -> EQUAL\n"); } : EQUAL { std::printf("Parsed list-tokens -> EQUAL\n"); $$ = DragonLisp::Token::EQUAL; }
| NOT_EQUAL { std::printf("Parsed list-tokens -> NOT_EQUAL\n"); } | NOT_EQUAL { std::printf("Parsed list-tokens -> NOT_EQUAL\n"); $$ = DragonLisp::Token::NOT_EQUAL; }
| AND { std::printf("Parsed list-tokens -> AND\n"); } | AND { std::printf("Parsed list-tokens -> AND\n"); $$ = DragonLisp::Token::AND; }
| OR { std::printf("Parsed list-tokens -> OR\n"); } | OR { std::printf("Parsed list-tokens -> OR\n"); $$ = DragonLisp::Token::OR; }
| MAX { std::printf("Parsed list-tokens -> MAX\n"); } | MAX { std::printf("Parsed list-tokens -> MAX\n"); $$ = DragonLisp::Token::MAX; }
| MIN { std::printf("Parsed list-tokens -> MIN\n"); } | MIN { std::printf("Parsed list-tokens -> MIN\n"); $$ = DragonLisp::Token::MIN; }
| LOGAND { std::printf("Parsed list-tokens -> LOGAND\n"); } | LOGAND { std::printf("Parsed list-tokens -> LOGAND\n"); $$ = DragonLisp::Token::LOGAND; }
| LOGIOR { std::printf("Parsed list-tokens -> LOGIOR\n"); } | LOGIOR { std::printf("Parsed list-tokens -> LOGIOR\n"); $$ = DragonLisp::Token::LOGIOR; }
| LOGXOR { std::printf("Parsed list-tokens -> LOGXOR\n"); } | LOGXOR { std::printf("Parsed list-tokens -> LOGXOR\n"); $$ = DragonLisp::Token::LOGXOR; }
| LOGEQV { std::printf("Parsed list-tokens -> LOGEQV\n"); } | LOGEQV { std::printf("Parsed list-tokens -> LOGEQV\n"); $$ = DragonLisp::Token::LOGEQV; }
| PLUS { std::printf("Parsed list-tokens -> PLUS\n"); } | PLUS { std::printf("Parsed list-tokens -> PLUS\n"); $$ = DragonLisp::Token::PLUS; }
| MINUS { std::printf("Parsed list-tokens -> MINUS\n"); } | MINUS { std::printf("Parsed list-tokens -> MINUS\n"); $$ = DragonLisp::Token::MINUS; }
| MULTIPLY { std::printf("Parsed list-tokens -> MULTIPLY\n"); } | MULTIPLY { std::printf("Parsed list-tokens -> MULTIPLY\n"); $$ = DragonLisp::Token::MULTIPLY; }
| DIVIDE { std::printf("Parsed list-tokens -> DIVIDE\n"); } | DIVIDE { std::printf("Parsed list-tokens -> DIVIDE\n"); $$ = DragonLisp::Token::DIVIDE; }
; ;
S-Expr-if S-Expr-if