aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTucker Evans <tuckerevans24@gmail.com>2019-07-22 20:08:22 -0400
committerTucker Evans <tuckerevans24@gmail.com>2019-07-22 20:08:22 -0400
commit54a92f688346f0cbd865ad42d8738fee630fd3b3 (patch)
treeb0cc5257b3b417af60b72ec9e09ff1190bac3a5b
parentdb268547e272dada20d7404a25881bef50d3be8d (diff)
Add for do loop
Does not add for loop to parse tree.
-rw-r--r--mypc.c6
-rw-r--r--pc.l15
-rw-r--r--pc.y8
3 files changed, 29 insertions, 0 deletions
diff --git a/mypc.c b/mypc.c
index e8deeb1..3d1401c 100644
--- a/mypc.c
+++ b/mypc.c
@@ -65,6 +65,12 @@ union YYSTYPE* y;
fprintf(stderr, "[WHILE]");
} else if (d == DO){
fprintf(stderr, "[DO]");
+ } else if (d == FOR){
+ fprintf(stderr, "[FOR]");
+ } else if (d == TO){
+ fprintf(stderr, "[TO]");
+ } else if (d == DT){
+ fprintf(stderr, "[DOWNTO]");
} else if (d == NOT){
fprintf(stderr, "[NOT]");
} else if (d == DOTS){
diff --git a/pc.l b/pc.l
index e744c4d..1a686d3 100644
--- a/pc.l
+++ b/pc.l
@@ -104,6 +104,21 @@ id [A-Za-z][A-Za-z0-9_]*
return DO;
}
+"for" {
+ debug_print(FOR, NULL);
+ return FOR;
+}
+
+"to" {
+ debug_print(TO, NULL);
+ return TO;
+}
+
+"downto" {
+ debug_print(DT, NULL);
+ return DT;
+}
+
"not" {
debug_print(NOT, NULL);
return NOT;
diff --git a/pc.y b/pc.y
index a3a5df9..495f64a 100644
--- a/pc.y
+++ b/pc.y
@@ -56,6 +56,7 @@ extern int yylex();
%token IF ELSE THEN
%token WHILE DO
+%token FOR TO DT
%token FCALL PCALL
%token ARRAY_ACCESS
@@ -227,8 +228,15 @@ statement
{
$$ = mktree(WHILE, $2, $4);
}
+ |FOR var ASSIGNOP expr TD expr DO statement
+ {
+ /*TODO design tree structure for FOR loops*/
+ $$ = NULL;
+ }
;
+TD: TO | DT;
+
var
:ID
{