Compare commits
2 Commits
568113ad84
...
7f79bd7768
| Author | SHA1 | Date |
|---|---|---|
|
|
7f79bd7768 | |
|
|
e7256f0547 |
|
|
@ -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;
|
||||||
|
|
|
||||||
70
DragonLisp.y
70
DragonLisp.y
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue