From 75b7f9b97d9fc1186f7864f46c5e5d383432cfb7 Mon Sep 17 00:00:00 2001 From: Tucker Evans Date: Wed, 25 Sep 2019 19:41:36 -0400 Subject: Fix dangling else --- pc.y | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/pc.y b/pc.y index a264286..8363428 100644 --- a/pc.y +++ b/pc.y @@ -81,6 +81,10 @@ extern scope *cur_scope; %type opt_statements %type proc_statement +%type ifelse +%nonassoc THEN +%nonassoc ELSE + %type var %type type %type standard_type @@ -292,9 +296,9 @@ statement { $$ = $1; } - |IF expr THEN statement ELSE statement + |ifelse { - $$ = mktree(IF, $2, mktree(THEN, $4, $6)); + $$ = $1; } |WHILE expr DO statement { @@ -321,6 +325,16 @@ statement $$ = $1; } ; +ifelse + :IF expr THEN statement + { + $$ = mktree(IF, $2, mktree(THEN, $4, NULL)); + } + |IF expr THEN statement ELSE statement + { + $$ = mktree(IF, $2, mktree(THEN, $4, $6)); + } +; TD :TO -- cgit v1.1