From b880e9799026ec195bbee1af5cbf2fdf6b3b984d Mon Sep 17 00:00:00 2001 From: Augusto Gunsch Date: Thu, 31 Dec 2020 20:24:27 -0300 Subject: [PATCH] Unify style --- compiler/compiler-util.h | 2 +- parser/parser-expressions.c | 35 ++++++---- parser/parser-expressions.h | 4 ++ parser/parser-statements.c | 11 ++- parser/parser-statements.h | 4 ++ parser/parser-structure.c | 76 ++++++++++++--------- parser/parser-structure.h | 4 ++ parser/parser-tree.h | 6 +- parser/{parser-internal.c => parser-util.c} | 3 +- parser/{parser-internal.h => parser-util.h} | 3 + parser/parser.h | 4 ++ 11 files changed, 101 insertions(+), 51 deletions(-) rename parser/{parser-internal.c => parser-util.c} (97%) rename parser/{parser-internal.h => parser-util.h} (90%) diff --git a/compiler/compiler-util.h b/compiler/compiler-util.h index 176d18a..01fa4c2 100644 --- a/compiler/compiler-util.h +++ b/compiler/compiler-util.h @@ -5,7 +5,7 @@ #include "compiler.h" /* compiler-util - * Random utilities for the compiler. */ + * Random utilities used in the compiler module. */ #define mkln(id) mksimpleln(id, strcount(id)) diff --git a/parser/parser-expressions.c b/parser/parser-expressions.c index bccca79..aed06dc 100644 --- a/parser/parser-expressions.c +++ b/parser/parser-expressions.c @@ -1,8 +1,19 @@ #include #include "util.h" -#include "parser-internal.h" +#include "parser-util.h" #include "parser-expressions.h" + const char* keywordsarr[] = { "true", "false", "null", "this" }; + const char* opsarr[] = { "+", "-", "*", "/", "&", "|", "<", ">", "=" }; + mkstrlist(keywordconstants, keywordsarr); +mkstrlist(operators, opsarr); + +/* BEGIN FORWARD DECLARATIONS */ + +// Miscelaneous +bool isop(TOKEN* t); + +// Parsing methods TERM* parsetermnullified(PARSER* p); TERM* parseterm(PARSER* p); TERM* mkterm(TERMTYPE type); @@ -15,15 +26,20 @@ TERM* parsecalltermnullified(PARSER* p); TERM* parsearrayterm(PARSER* p); TERM* parsevarterm(PARSER* p); TERM* parseidentifierterm(PARSER* p); -bool isop(TOKEN* t); SUBROUTCALL* nullsubroutcall(PARSER* p, SUBROUTCALL* c); SUBROUTCALL* parsesubroutcallnullified(PARSER* p); -const char* keywordsarr[] = { "true", "false", "null", "this" }; -const char* opsarr[] = { "+", "-", "*", "/", "&", "|", "<", ">", "=" }; -mkstrlist(keywordconstants, keywordsarr); -mkstrlist(operators, opsarr); +/* END FORWARD DECLARATIONS */ +// Miscelaneous +bool isop(TOKEN* t) { + for(int i = 0; i < operators.size; i++) + if(!strcmp(t->token, operators.items[i])) + return true; + return false; +} + +// Parsing methods TERM* parsetermnullified(PARSER* p) { TOKENTYPE type = p->current->type; if(type == integer) return parseint(p); @@ -126,13 +142,6 @@ TERM* parseidentifierterm(PARSER* p) { return t; } -bool isop(TOKEN* t) { - for(int i = 0; i < operators.size; i++) - if(!strcmp(t->token, operators.items[i])) - return true; - return false; -} - TERM* parseexpressionnullified(PARSER* p) { TERM* head = parsetermnullified(p); TERM* current = head; diff --git a/parser/parser-expressions.h b/parser/parser-expressions.h index 9e606f1..47803c4 100644 --- a/parser/parser-expressions.h +++ b/parser/parser-expressions.h @@ -1,6 +1,10 @@ #ifndef PARSER_EXPRESSIONS_H #define PARSER_EXPRESSIONS_H #include "parser.h" + +/* parser-expressions + * Functions for parsing expressions. */ + TERM* parseexpressionnullified(PARSER* p); TERM* parseexpression(PARSER* p); SUBROUTCALL* parsesubroutcall(PARSER* p); diff --git a/parser/parser-statements.c b/parser/parser-statements.c index 3bf1019..5091192 100644 --- a/parser/parser-statements.c +++ b/parser/parser-statements.c @@ -1,9 +1,13 @@ #include #include "parser-expressions.h" -#include "parser-internal.h" +#include "parser-util.h" #include "parser-statements.h" +/* BEGIN FORWARD DECLARATIONS */ + +// Miscelaneous STATEMENT* mkstatement(PARSER* p, STATEMENTTYPE t); + STATEMENT* parsestatementnullified(PARSER* p); STATEMENT* parselet(PARSER* p); CONDSTATEMENT* parsecond(PARSER* p); @@ -12,6 +16,9 @@ STATEMENT* parsewhile(PARSER* p); STATEMENT* parsedo(PARSER* p); STATEMENT* parsereturn(PARSER* p); +/* END FORWARD DECLARATIONS */ + +// Miscelaneous STATEMENT* mkstatement(PARSER* p, STATEMENTTYPE t) { STATEMENT* s = (STATEMENT*)malloc(sizeof(STATEMENT)); s->type = t; @@ -19,6 +26,8 @@ STATEMENT* mkstatement(PARSER* p, STATEMENTTYPE t) { return s; } +// Parsing methods + // Though nullified, will throw errors if the parsing fails while on-going STATEMENT* parsestatementnullified(PARSER* p) { if(equals(p, "let")) return parselet(p); diff --git a/parser/parser-statements.h b/parser/parser-statements.h index af093b0..06ded24 100644 --- a/parser/parser-statements.h +++ b/parser/parser-statements.h @@ -1,5 +1,9 @@ #ifndef PARSER_STATEMENTS_H #define PARSER_STATEMENTS_H #include "parser.h" + +/* parser-statements + * Function for parsing statements. */ + STATEMENT* parsestatements(PARSER* p); #endif diff --git a/parser/parser-structure.c b/parser/parser-structure.c index 55e9bd8..9cb6e21 100644 --- a/parser/parser-structure.c +++ b/parser/parser-structure.c @@ -1,10 +1,24 @@ #include -#include "parser-internal.h" +#include "parser-util.h" #include "parser-structure.h" #include "parser-statements.h" -CLASS* parseclass(PARSER* p); +const char* classvartypesarr[] = { "static", "field" }; +const char* vartypesarr[] = { "int", "char", "boolean" }; +const char* subroutclassesarr[] = { "constructor", "function", "method" }; +mkstrlist(classvartypes, classvartypesarr); +mkstrlist(vartypes, vartypesarr); +mkstrlist(subroutclasses, subroutclassesarr); + +/* BEGIN FORWARD DECLARATIONS */ + +// Miscelaneous +bool isprimitive(TOKEN* tk); +char* parsetype(PARSER* p); int parsepossibilities(PARSER* p, STRINGARRAY* poss); + +// Parsing methods +CLASS* parseclass(PARSER* p); CLASSVARTYPE parseclassvartype(PARSER* p); CLASSVARDEC* parseclassvardec(PARSER* p); CLASSVARDEC* parseclassvardecs(PARSER* p); @@ -14,19 +28,38 @@ SUBROUTDEC* parsesubroutdecs(PARSER* p, CLASS* c); PARAMETER* parseparameter(PARSER* p); PARAMETER* parseparameters(PARSER* p); SUBROUTBODY* parsesubroutbody(PARSER* p); -bool isprimitive(TOKEN* tk); -char* parsetype(PARSER* p); void parsevardeccommon(PARSER* p, VARDEC* v); VARDEC* parsevardec(PARSER* p); VARDEC* parsevardecs(PARSER* p); -const char* classvartypesarr[] = { "static", "field" }; -const char* vartypesarr[] = { "int", "char", "boolean" }; -const char* subroutclassesarr[] = { "constructor", "function", "method" }; -mkstrlist(classvartypes, classvartypesarr); -mkstrlist(vartypes, vartypesarr); -mkstrlist(subroutclasses, subroutclassesarr); +/* END FORWARD DECLARATIONS */ + +// Miscelaneous +bool isprimitive(TOKEN* tk) { + if(tk->type == keyword) + if(existsinarray(&vartypes, tk->token)) + return true; + return false; +} + +char* parsetype(PARSER* p) { + if(p->current->type != identifier && p->current->type != keyword) + unexpected(p); + + char* result = p->current->token; + next(p); + return result; +} + +int parsepossibilities(PARSER* p, STRINGARRAY* poss) { + for(int i = 0; i < poss->size; i++) + if(equals(p, poss->items[i])) + return i; + return -1; +} + +// Parsing methods CLASS* parseclass(PARSER* p) { checkcontent(p, "class"); @@ -50,13 +83,6 @@ CLASS* parseclass(PARSER* p) { return class; } -int parsepossibilities(PARSER* p, STRINGARRAY* poss) { - for(int i = 0; i < poss->size; i++) - if(equals(p, poss->items[i])) - return i; - return -1; -} - CLASSVARTYPE parseclassvartype(PARSER* p) { return parsepossibilities(p, &classvartypes); } @@ -176,22 +202,6 @@ SUBROUTBODY* parsesubroutbody(PARSER* p) { return subroutbody; } -bool isprimitive(TOKEN* tk) { - if(tk->type == keyword) - if(existsinarray(&vartypes, tk->token)) - return true; - return false; -} - -char* parsetype(PARSER* p) { - if(p->current->type != identifier && p->current->type != keyword) - unexpected(p); - - char* result = p->current->token; - next(p); - return result; -} - void parsevardeccommon(PARSER* p, VARDEC* v) { v->typeclass = p->current->type; v->primitive = isprimitive(p->current); diff --git a/parser/parser-structure.h b/parser/parser-structure.h index 0b66485..feb2506 100644 --- a/parser/parser-structure.h +++ b/parser/parser-structure.h @@ -1,5 +1,9 @@ #ifndef PARSER_STRUCTURE_H #define PARSER_STRUCTURE_H #include "parser.h" + +/* parser-structure + * Function for parsing a class. */ + CLASS* parseclass(PARSER* p); #endif diff --git a/parser/parser-tree.h b/parser/parser-tree.h index dba2358..d423f68 100644 --- a/parser/parser-tree.h +++ b/parser/parser-tree.h @@ -4,7 +4,10 @@ #include "tokenizer.h" #include "util.h" -// Forward declarations +/* parser-tree + * Type definitions for the parsing tree. */ + +/* BEGIN FORWARD DECLARATIONS */ struct classvardec; struct parameter; struct subroutbody; @@ -16,6 +19,7 @@ struct condstatement; struct subroutcall; struct term; struct expressionlist; +/* END FORWARD DECLARATIONS */ // Misc typedef struct { diff --git a/parser/parser-internal.c b/parser/parser-util.c similarity index 97% rename from parser/parser-internal.c rename to parser/parser-util.c index cf55eec..37d528e 100644 --- a/parser/parser-internal.c +++ b/parser/parser-util.c @@ -1,8 +1,7 @@ #include -#include "parser-internal.h" +#include "parser-util.h" #include "util.h" - const char* tokentypesarr[] = { "keyword", "identifier", "symbol", "integerConstant", "stringConstant" }; mkstrlist(tokentypes, tokentypesarr); diff --git a/parser/parser-internal.h b/parser/parser-util.h similarity index 90% rename from parser/parser-internal.h rename to parser/parser-util.h index 85c720f..9fe2885 100644 --- a/parser/parser-internal.h +++ b/parser/parser-util.h @@ -3,6 +3,9 @@ #include #include "parser.h" +/* parser-util + * Random utilities used in the parser module. */ + #define next(parser) parser->current = p->current->next #define anchorparser(parser) p->checkpoint = p->current #define rewindparser(parser) p->current = p->checkpoint diff --git a/parser/parser.h b/parser/parser.h index bbd341a..df54c7f 100644 --- a/parser/parser.h +++ b/parser/parser.h @@ -3,6 +3,10 @@ #include "tokenizer.h" #include "parser-tree.h" +/* parser + * This is the file that should be included in other modules + * that want to parse a file. */ + typedef struct { TOKEN* tokens; TOKEN* current;