diff options
Diffstat (limited to 'sem1/osc/miniproject/cnasm/regn.y')
-rw-r--r-- | sem1/osc/miniproject/cnasm/regn.y | 81 |
1 files changed, 0 insertions, 81 deletions
diff --git a/sem1/osc/miniproject/cnasm/regn.y b/sem1/osc/miniproject/cnasm/regn.y deleted file mode 100644 index b72d440..0000000 --- a/sem1/osc/miniproject/cnasm/regn.y +++ /dev/null @@ -1,81 +0,0 @@ -%{ -#include "ast.h" -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include <stdbool.h> -#include <stdint.h> -#include "codegen.h" - -#define CLEAN_BOTH 2 -#define CLEAN_DST 1 - -char *strconcat(char *dst, char *src, unsigned int clean) { - size_t dstlen = strlen(dst) + 1; - size_t srclen = strlen(src) + 1; - - // Create new duplicate - char *new = malloc(( dstlen + srclen ) * sizeof(char)); - - // Copy stuff - memcpy(new, dst, dstlen); - strcat(new, src); - - // Free old one - if( clean-- ) { - free(dst); - - if( clean ) { - free(src); - } - } - return new; -} - -// Trace node - -%} - -%token IFF EELSE FFOR RP RCP RSP LP LCP LSP ID COLON CMP NO WHILE - -%union { - char *string; - struct ast_node *node; - struct cond *condition; - uint8_t cmp; -} - -%type <string> ID -%type <node> statement stm_list -%type <cmp> CMP -%type <condition> condition - -%% - -program: stm_list {gentree(stdout, NULL, $1);printf("\n");}; - -stm_list: statement { $$ = $1; } - | stm_list statement { $$ = insert_stm($2, $1); }; - -condition: ID CMP ID { $$ = insert_cond($2, $1, $3); } - | ID { $$ = insert_cond(CNEQ, $1, "0");}; - -statement: ID {$$ = insert_ident($1);} - | IFF LP condition RP LCP stm_list RCP {$$ = insert_ctrl(TIF, $3, $6, NULL);} - | IFF LP condition RP LCP stm_list RCP EELSE LCP stm_list RCP {$$ = insert_ctrl(TIF, $3, $6, $10);} - | WHILE LP condition RP LCP stm_list RCP {$$ = insert_ctrl(TWHILE, $3, $6, NULL);} - | FFOR LP ID LP condition LP ID RP LCP stm_list RCP {$$ = insert_for($3, $5, $7, $10);}; - -%% - - -int main() { - - /*for(;;) { - int t = yylex(); - printf("yylex: %d\n", t); - } */ - - yyparse(); -} - |