From e6a270a7e00abd3bcc1b587594e21ed75e341f43 Mon Sep 17 00:00:00 2001 From: Dale Weiler Date: Mon, 9 Apr 2012 10:14:26 -0400 Subject: [PATCH] Some parsing --- cpp.c | 2 +- gmqcc | Bin 17547 -> 19062 bytes lex.c | 1 + main.c | 11 +++---- parse.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 5 files changed, 100 insertions(+), 8 deletions(-) diff --git a/cpp.c b/cpp.c index e2f8021..62a9819 100644 --- a/cpp.c +++ b/cpp.c @@ -6,5 +6,5 @@ * which is what we parse for the preprocessor here. */ int cpp(struct lex_file *file) { - /* TODO ... */ + /* no return */ } diff --git a/gmqcc b/gmqcc index 257c415afc2dd5fd5fef3f972261d33851f2d63c..9bc7f27d9ed45849c15d18a76d331f73c6eaa88e 100755 GIT binary patch delta 7341 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 >= 0) if (token == LEX_IDENT) printf("%s ", file->lastok); + fputc('\n', stdout); lex_reset(file); return 1; } diff --git a/main.c b/main.c index 248f94f..5134e98 100644 --- a/main.c +++ b/main.c @@ -61,12 +61,11 @@ int main(int argc, char **argv) { if (!fp) { fclose(fp); return error(ERROR_COMPILER, "Source file: %s not found\n", ifile); + } else { + struct lex_file *lex = lex_open(fp); + lex_debug(lex); + parse (lex); + lex_close(lex); } - - struct lex_file *lex = lex_open(fp); - lex_debug(lex); - parse (lex); - lex_close(lex); - return 0; } diff --git a/parse.c b/parse.c index 129bcb1..9398319 100644 --- a/parse.c +++ b/parse.c @@ -23,6 +23,19 @@ #include #include "gmqcc.h" + +static const char *const parse_punct[] = { + "&&", "||", "<=", ">=", "==", "!=", ";", ",", "!", "*", + "/" , "(" , "-" , "+" , "=" , "[" , "]", "{", "}", "...", + "." , "<" , ">" , "#" , "&" , "|" , "$", "@", ":", NULL + /* + * $,@,: are extensions: + * $ is a shorter `self`, so instead of self.frags, $.frags + * @ is a constructor + * : is compiler builtin functions + */ +}; + int parse(struct lex_file *file) { int token = 0; while ((token = lex_token(file)) != ERROR_LEX && \ @@ -42,10 +55,89 @@ int parse(struct lex_file *file) { /* TODO: Preprocessor */ case '#': - token = cpp(file); + token = lex_token(file); + token = lex_token(file); + token = lex_token(file); + token = lex_token(file); + token = lex_token(file); + token = lex_token(file); + break; + + /* PUNCTUATION PARSING BEGINS */ + case '&': /* & */ + token = lex_token(file); + if (token == '&') { /* && */ + token = lex_token(file); + printf("--> LOGICAL AND\n"); + goto end; + } + printf("--> BITWISE AND\n"); + break; + case '|': /* | */ + token = lex_token(file); + if (token == '|') { /* || */ + token = lex_token(file); + printf("--> LOGICAL OR\n"); + goto end; + } + printf("--> BITWISE OR\n"); + break; + case '!': + token = lex_token(file); + if (token == '=') { /* != */ + token = lex_token(file); + printf("--> LOGICAL NOT EQUAL\n"); + goto end; + } + printf("--> LOGICAL NOT\n"); + break; + case '<': /* < */ + token = lex_token(file); + if (token == '=') { /* <= */ + token = lex_token(file); + printf("--> LESS THAN OR EQUALL\n"); + goto end; + } + printf("--> LESS THAN\n"); + break; + case '>': /* > */ + token = lex_token(file); + if (token == '=') { /* >= */ + token = lex_token(file); + printf("--> GREATER THAN OR EQUAL\n"); + goto end; + } + printf("--> GREATER THAN\n"); + break; + case '=': + token = lex_token(file); + if (token == '=') { /* == */ + token = lex_token(file); + printf("--> COMPARISION \n"); + goto end; + } + printf("--> ASSIGNMENT\n"); + break; + case ';': + token = lex_token(file); + printf("--> FINISHED STATMENT\n"); + break; + case '-': + token = lex_token(file); + printf("--> SUBTRACTION EXPRESSION\n"); + break; + case '+': + token = lex_token(file); + printf("--> ASSIGNMENT EXPRRESSION\n"); + break; } + end:; } lex_reset(file); + // "&&", "||", "<=", ">=", "==", "!=", ";", ",", "!", "*", + //"/" , "(" , "-" , "+" , "=" , "[" , "]", "{", "}", "...", + //"." , "<" , ">" , "#" , "&" , "|" , "$", "@", ":", NULL + return 1; } -- 2.39.2