From a22b206e64af19ff1c40d083ed67708e90553500 Mon Sep 17 00:00:00 2001 From: ThrostGunnulf Date: Fri, 23 May 2014 20:38:42 +0100 Subject: [PATCH 01/39] New project requirements. --- Enunciado-Projeto-2.0.2-2013-2014.pdf | Bin 211232 -> 0 bytes Enunciado-Projeto-3.0.0-2013-2014.pdf | Bin 0 -> 219078 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Enunciado-Projeto-2.0.2-2013-2014.pdf create mode 100644 Enunciado-Projeto-3.0.0-2013-2014.pdf diff --git a/Enunciado-Projeto-2.0.2-2013-2014.pdf b/Enunciado-Projeto-2.0.2-2013-2014.pdf deleted file mode 100644 index 71b1d90c6dc404e1e38f5cd7ba4fee5c79001dc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211232 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

sMCA^hQ6(>E@ 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 IbWOwzOFe=ug9|_y~my9hrzU0IbE@R34SwdM0 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 diff --git a/Enunciado-Projeto-3.0.0-2013-2014.pdf b/Enunciado-Projeto-3.0.0-2013-2014.pdf new file mode 100644 index 0000000000000000000000000000000000000000..50107130305988d023561fcd1d8cdc10748b3628 GIT binary patch literal 219078 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�JNp((Et-qe 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⋙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�()u8+a`}Wv+UCu!StQkT~J&MK@Eb#?)F{j-nTX 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 literal 0 HcmV?d00001 From 4dbc6a8c0be80f7fc1dd4035e0d794fc9a9bab1a Mon Sep 17 00:00:00 2001 From: ThrostGunnulf Date: Fri, 23 May 2014 20:44:54 +0100 Subject: [PATCH 02/39] New Lex and Yacc files names as defined in the new project requirements. The compiling script was updated to meet these new names. --- compile.bash | 10 +++++----- ijparser.l => ijcompiler.l | 0 ijparser.y => ijcompiler.y | 0 3 files changed, 5 insertions(+), 5 deletions(-) rename ijparser.l => ijcompiler.l (100%) rename ijparser.y => ijcompiler.y (100%) diff --git a/compile.bash b/compile.bash index 2fb0170..43573b7 100644 --- a/compile.bash +++ b/compile.bash @@ -1,7 +1,7 @@ -flex ijparser.l && -bison --defines=y.tab.h ijparser.y && -gcc -o ijparser *.c -ll -ly -g +flex ijcompiler.l && +bison --defines=y.tab.h ijcompiler.y && +gcc -o ijcompiler *.c -ll -ly -g -rm ijparser.zip -zip -r ijparser.zip ijparser.l ijparser.y astNodes.c astNodes.h show.c show.h symbols.c symbols.h semantic.c semantic.h exitClean.h +rm ijcompiler.zip +zip -r ijcompiler.zip ijcompiler.l ijcompiler.y astNodes.c astNodes.h show.c show.h symbols.c symbols.h semantic.c semantic.h exitClean.h diff --git a/ijparser.l b/ijcompiler.l similarity index 100% rename from ijparser.l rename to ijcompiler.l diff --git a/ijparser.y b/ijcompiler.y similarity index 100% rename from ijparser.y rename to ijcompiler.y From b27b20091da8166d35b3d055233108d6d27e9580 Mon Sep 17 00:00:00 2001 From: ThrostGunnulf Date: Sat, 24 May 2014 22:01:13 +0100 Subject: [PATCH 03/39] Started implementing code generation. Implemented: Global variables Method declarations Local variables --- codeGen.c | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++ codeGen.h | 6 +++ ijcompiler.y | 3 ++ test.ijava | 37 ++++------------- 4 files changed, 127 insertions(+), 29 deletions(-) create mode 100644 codeGen.c create mode 100644 codeGen.h diff --git a/codeGen.c b/codeGen.c new file mode 100644 index 0000000..242e053 --- /dev/null +++ b/codeGen.c @@ -0,0 +1,110 @@ +#include +#include +#include + +#include "astNodes.h" +#include "symbols.h" + +#define MAX_LLVM_TYPE_SIZE 5 + +extern Class* myProgram; +extern ClassTable* symbolsTable; + +void genGlobalVar(VarDecl*); +void genMethod(MethodDecl*); +void genLocalVar(VarDecl*); +void genStmts(Stmt*, int); + +void getTypeLLVM(char*, Type); + +void generateCode() +{ + DeclList* aux = myProgram->declList; + for(; aux != NULL; aux = aux->next) + { + if(aux->type == VARDECL) + genGlobalVar(aux->varDecl); + else if(aux->type == METHODDECL) + genMethod(aux->methodDecl); + } +} + +void genGlobalVar(VarDecl* varDecl) +{ + char initVal[5]; + char llvmType[MAX_LLVM_TYPE_SIZE]; + const char llvmOut[] = "@%s = global %s %s\n"; + + getTypeLLVM(llvmType, varDecl->type); + + if(varDecl->type == INT_T || varDecl->type == BOOL_T) + sprintf(initVal, "0"); + else + sprintf(initVal, "null"); + + IDList *aux = varDecl->idList; + for(; aux != NULL; aux = aux->next) + { + printf(llvmOut, aux->id, llvmType, initVal); + } + + printf("\n"); +} + +void genMethod(MethodDecl* methodDecl) +{ + char llvmType[MAX_LLVM_TYPE_SIZE]; + getTypeLLVM(llvmType, methodDecl->type); + + printf("define %s @%s(", llvmType, methodDecl->id); + + ParamList* aux = methodDecl->paramList; + if(aux != NULL) + { + getTypeLLVM(llvmType, aux->type); + printf("%s %%%s", llvmType, aux->id); + aux = aux->next; + } + for(; aux != NULL; aux = aux->next) + { + getTypeLLVM(llvmType, aux->type); + printf(", %s %%%s", llvmType, aux->id); + } + + printf(")\n{\n"); + + VarDeclList* aux2 = methodDecl->varDeclList; + for(; aux2 != NULL; aux2 = aux2->next) + genLocalVar(aux2->varDecl); + + StmtList* aux3 = methodDecl->stmtList; + for(; aux3 != NULL; aux3 = aux3->next) + genStmts(aux3->stmt, 1); + + printf("}\n\n"); +} + +void genLocalVar(VarDecl* varDecl) +{ + char llvmType[MAX_LLVM_TYPE_SIZE]; + const char llvmOut[] = "\t%%%s = alloca %s\n"; + + getTypeLLVM(llvmType, varDecl->type); + + IDList *aux = varDecl->idList; + for(; aux != NULL; aux = aux->next) + printf(llvmOut, aux->id, llvmType); + + printf("\n"); +} + +void genStmts(Stmt* stmt, int depth) +{ + +} + +char* llvmTypes[6] = {"void", "i32", "i1", "i32*", "i1*", "i8*"}; +void getTypeLLVM(char* llvmType, Type type) +{ + sprintf(llvmType, "%s", llvmTypes[type]); +} diff --git a/codeGen.h b/codeGen.h new file mode 100644 index 0000000..815d274 --- /dev/null +++ b/codeGen.h @@ -0,0 +1,6 @@ +#ifndef CODEGEN_H +#define CODEGEN_H + +void generateCode(); + +#endif diff --git a/ijcompiler.y b/ijcompiler.y index c09c88d..7de83dc 100644 --- a/ijcompiler.y +++ b/ijcompiler.y @@ -7,6 +7,7 @@ #include "symbols.h" #include "semantic.h" #include "exitClean.h" +#include "codeGen.h" void checkFlags(int, char **, int*, int*); @@ -166,6 +167,8 @@ int main(int argc, char *argv[]) if(printSymbols) printSymbolTables(symbolsTable); + generateCode(); + //freeProgram(myProgram, symbolsTable); //TO IMPLEMENT return 0; } diff --git a/test.ijava b/test.ijava index 7b7648f..fa8456c 100644 --- a/test.ijava +++ b/test.ijava @@ -1,37 +1,16 @@ class gcd { - static int c; - static int b; + static int a, b, c; + static boolean d, e; + static int[] f, g; + static boolean[] h, i, j; - public static int a(int a, boolean b, int[] c, boolean[] d) {return 1;} public static void main(String[] args) { - int a1, a2, a, main; - boolean b2, b3, b, b4; - int[] c, c3; - boolean[] d; - - c = new int [false]; + int a, b, c; + boolean d, e; + int[] f, g; + boolean[] h, i, j; } } -/* -class gcd -{ - static int a, c; - static int b; - - public static void main(String[] args) - { - int a, a, a; - boolean b2, b3, b; - int[] c; - boolean[] d, main; - } - - public static int a1(int a, int[] afg, boolean c, boolean[] d) - { - //int a; - } -} -*/ From a6a12473ae52328e80a0f63a22aed07ee3ebf006 Mon Sep 17 00:00:00 2001 From: ThrostGunnulf Date: Sun, 25 May 2014 20:45:05 +0100 Subject: [PATCH 04/39] Started implementing Statement generation. Print statement not yet implemented. --- codeGen.c | 156 ++++++++++++++++++++++++++++++++++++++++++++++++--- compile.bash | 2 +- semantic.c | 3 +- test.ijava | 41 +++++++++++++- 4 files changed, 191 insertions(+), 11 deletions(-) diff --git a/codeGen.c b/codeGen.c index 242e053..edcc1fb 100644 --- a/codeGen.c +++ b/codeGen.c @@ -5,17 +5,23 @@ #include "astNodes.h" #include "symbols.h" -#define MAX_LLVM_TYPE_SIZE 5 +#define MAX_LLVM_TYPE_SIZE 15 extern Class* myProgram; extern ClassTable* symbolsTable; +extern MethodTable* currentLocalTable; +Type curFunctionType; +int varNumber, ifNumber, whileNumber, indexNumber; void genGlobalVar(VarDecl*); void genMethod(MethodDecl*); void genLocalVar(VarDecl*); -void genStmts(Stmt*, int); +void genStmtList(StmtList*); +void genStmt(Stmt*); +int genExpr(Expr* expr); void getTypeLLVM(char*, Type); +void getRetTypeLLVM(char*, Type); void generateCode() { @@ -34,6 +40,8 @@ void genGlobalVar(VarDecl* varDecl) char initVal[5]; char llvmType[MAX_LLVM_TYPE_SIZE]; const char llvmOut[] = "@%s = global %s %s\n"; + const char llvmOutArr[] = "@.%s = global i32 0\n"; + const char llvmOutInitLenght[] = "\tstore i32 0, i32* @.%s\n"; getTypeLLVM(llvmType, varDecl->type); @@ -45,6 +53,8 @@ void genGlobalVar(VarDecl* varDecl) IDList *aux = varDecl->idList; for(; aux != NULL; aux = aux->next) { + if(varDecl->type != INT_T && varDecl->type != BOOL_T) + printf(llvmOutArr, aux->id); printf(llvmOut, aux->id, llvmType, initVal); } @@ -53,8 +63,12 @@ void genGlobalVar(VarDecl* varDecl) void genMethod(MethodDecl* methodDecl) { + curFunctionType = methodDecl->type; + varNumber = ifNumber = whileNumber = indexNumber = 0; + currentLocalTable = getLocalTable(methodDecl->id); + char llvmType[MAX_LLVM_TYPE_SIZE]; - getTypeLLVM(llvmType, methodDecl->type); + getRetTypeLLVM(llvmType, methodDecl->type); printf("define %s @%s(", llvmType, methodDecl->id); @@ -62,12 +76,16 @@ void genMethod(MethodDecl* methodDecl) if(aux != NULL) { getTypeLLVM(llvmType, aux->type); + if(aux->type == INTARRAY || aux->type == BOOLARRAY || aux->type == STRINGARRAY) + printf("i32 %%.%s, ", aux->id); printf("%s %%%s", llvmType, aux->id); aux = aux->next; } for(; aux != NULL; aux = aux->next) { getTypeLLVM(llvmType, aux->type); + if(aux->type == INTARRAY || aux->type == BOOLARRAY || aux->type == STRINGARRAY) + printf(", i32 %%.%s", aux->id); printf(", %s %%%s", llvmType, aux->id); } @@ -77,9 +95,7 @@ void genMethod(MethodDecl* methodDecl) for(; aux2 != NULL; aux2 = aux2->next) genLocalVar(aux2->varDecl); - StmtList* aux3 = methodDecl->stmtList; - for(; aux3 != NULL; aux3 = aux3->next) - genStmts(aux3->stmt, 1); + genStmtList(methodDecl->stmtList); printf("}\n\n"); } @@ -88,23 +104,147 @@ void genLocalVar(VarDecl* varDecl) { char llvmType[MAX_LLVM_TYPE_SIZE]; const char llvmOut[] = "\t%%%s = alloca %s\n"; + const char llvmOutArr[] = "\t%%.%s = alloca i32\n"; + const char llvmOutInitLenght[] = "\tstore i32 0, i32* %%.%s\n"; getTypeLLVM(llvmType, varDecl->type); IDList *aux = varDecl->idList; for(; aux != NULL; aux = aux->next) + { + if(varDecl->type != INT_T && varDecl->type != BOOL_T) + { + printf(llvmOutArr, aux->id); + printf(llvmOutInitLenght, aux->id); + } printf(llvmOut, aux->id, llvmType); + } printf("\n"); } -void genStmts(Stmt* stmt, int depth) +void genStmtList(StmtList* list) +{ + StmtList* aux3 = list; + for(; aux3 != NULL; aux3 = aux3->next) + genStmt(aux3->stmt); +} + +void genStmt(Stmt* stmt) +{ + if(stmt->type == CSTAT) + genStmtList(stmt->stmtList); + else if(stmt->type == IFELSE) + { + int compVarNumber = genExpr(stmt->expr1); + printf("\tbr i1 %%%d, label %%ifthen%d, label %%ifelse%d\n\n", compVarNumber, ifNumber, ifNumber); + + printf("ifthen%d:\n", ifNumber); + genStmt(stmt->stmt1); + printf("\tbr label %%ifend%d\n\n", ifNumber); + + printf("ifelse%d:\n", ifNumber); + genStmt(stmt->stmt2); + printf("\tbr label %%ifend%d\n\n", ifNumber); + + printf("ifend%d:\n", ifNumber); + + ifNumber++; + } + else if(stmt->type == RETURN_T) + { + if(stmt->expr1 != NULL) + { + char llvmType[MAX_LLVM_TYPE_SIZE]; + getTypeLLVM(llvmType, curFunctionType); + int exprVarNumber = genExpr(stmt->expr1); + + if(curFunctionType == INT_T || curFunctionType == BOOL_T) + printf("\tret %s %%%d\n", llvmType, exprVarNumber); + else + { + printf("\tret i32 %%.%d, %s %%%d\n", exprVarNumber, llvmType, exprVarNumber); + } + } + else + printf("\t ret void\n"); + } + else if(stmt->type == WHILE_T) + { + printf("whilestart%d:\n", whileNumber); + int exprVarNumber = genExpr(stmt->expr1); + printf("\tbr i1 %%%d, label %%whiledo%d, label %%whileend%d\n\n", exprVarNumber, whileNumber, whileNumber); + + printf("whiledo%d:\n", whileNumber); + genStmt(stmt->stmt1); + + printf("\nwhileend%d:\n", whileNumber); + + whileNumber++; + } + else if(stmt->type == PRINT_T); + else if(stmt->type == STORE) + { + int isLocal = 1; + char varDeclSymbol[5]; + char llvmType[MAX_LLVM_TYPE_SIZE]; + int exprVarNumber = genExpr(stmt->expr1); + + Type aux = -1; + Type varType = getSymbolFromLocal(stmt->id); + if(varType == aux) + { + isLocal = 0; + varType = getSymbolFromGlobal(stmt->id); + } + + sprintf(varDeclSymbol, isLocal ? "%%" : "@"); + + getTypeLLVM(llvmType, varType); + + printf("\tstore %s %%%d, %s* %s%s\n", llvmType, exprVarNumber, llvmType, varDeclSymbol, stmt->id); + } + else if(stmt->type == STOREARRAY) + { + int isLocal = 1; + char varDeclSymbol[5]; + char llvmType[MAX_LLVM_TYPE_SIZE]; + char llvmType2[MAX_LLVM_TYPE_SIZE]; + int indexVarNumber = genExpr(stmt->expr1); + int exprVarNumber = genExpr(stmt->expr2); + + Type arrayType = getSymbolFromLocal(stmt->id); + if(arrayType == -1) + { + isLocal = 0; + arrayType = getSymbolFromGlobal(stmt->id); + } + + sprintf(varDeclSymbol, isLocal ? "%%" : "@"); + + getTypeLLVM(llvmType, arrayType); + + printf("\t%%%d = getelementptr %s %s%s, i32 %%%d\n", indexNumber++, llvmType, varDeclSymbol, stmt->id, indexVarNumber); + + strcpy(llvmType2, llvmType); + llvmType2[strlen(llvmType2)-1] = '\0'; + printf("\tstore %s %%%d, %s %s%s\n", llvmType2, exprVarNumber, llvmType, varDeclSymbol, stmt->id); + } +} + +int genExpr(Expr* expr) { } -char* llvmTypes[6] = {"void", "i32", "i1", "i32*", "i1*", "i8*"}; +const char* llvmTypes[6] = {"void", "i32", "i1", "i32*", "i1*", "i8**"}; void getTypeLLVM(char* llvmType, Type type) { sprintf(llvmType, "%s", llvmTypes[type]); } + +const char* llvmRetTypes[6] = {"void", "i32", "i1", "{i32, i32*}", "{i32, i1*}", "i8**"}; +void getRetTypeLLVM(char* llvmType, Type type) +{ + sprintf(llvmType, "%s", llvmRetTypes[type]); +} diff --git a/compile.bash b/compile.bash index 43573b7..d0e153e 100644 --- a/compile.bash +++ b/compile.bash @@ -3,5 +3,5 @@ bison --defines=y.tab.h ijcompiler.y && gcc -o ijcompiler *.c -ll -ly -g rm ijcompiler.zip -zip -r ijcompiler.zip ijcompiler.l ijcompiler.y astNodes.c astNodes.h show.c show.h symbols.c symbols.h semantic.c semantic.h exitClean.h +zip -r ijcompiler.zip ijcompiler.l ijcompiler.y astNodes.c astNodes.h show.c show.h symbols.c symbols.h semantic.c semantic.h exitClean.h codeGen.c codeGen.h diff --git a/semantic.c b/semantic.c index 95e5be8..8a2168f 100644 --- a/semantic.c +++ b/semantic.c @@ -232,7 +232,8 @@ Type checkExpr(Expr* expr) t2 = VOID_T; if(auxParams != NULL) { - t2 = auxParams->type; + if(auxParams->isParam) + t2 = auxParams->type; auxParams = auxParams->next; if(auxParams && !auxParams->isParam) auxParams = NULL; diff --git a/test.ijava b/test.ijava index fa8456c..adf41b4 100644 --- a/test.ijava +++ b/test.ijava @@ -7,10 +7,49 @@ class gcd public static void main(String[] args) { - int a, b, c; + int b, c; boolean d, e; int[] f, g; boolean[] h, i, j; + + f = new int[3]; + a = f.length; + f = new int[4]; + + f[0] = 1; + f[1] = 0; + h[3] = true; + j[2] = false; + + if(true) + c = 4; + else + c = 3; + + while(true) + { + a = a + 1; + } + + return; + } + + public static int[] test1(int[] a, boolean[]b) + { + return test2(); + } + + public static int[] test2() + { + int[] a; + a = new int[5]; + + return a; + } + + public static boolean[] test3() + { + return new boolean[7]; } } From 3e809cb7cdfb1d5229e6a6b9562318ad659dc157 Mon Sep 17 00:00:00 2001 From: joaosimoes Date: Wed, 28 May 2014 03:57:53 +0100 Subject: [PATCH 05/39] Implementation Expressions (Not finished) --- codeGen.c | 143 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 142 insertions(+), 1 deletion(-) diff --git a/codeGen.c b/codeGen.c index edcc1fb..1fb8913 100644 --- a/codeGen.c +++ b/codeGen.c @@ -18,7 +18,8 @@ void genMethod(MethodDecl*); void genLocalVar(VarDecl*); void genStmtList(StmtList*); void genStmt(Stmt*); -int genExpr(Expr* expr); +int buildExpression(Expr*,int,int,char*); +int genExpr(Expr*); void getTypeLLVM(char*, Type); void getRetTypeLLVM(char*, Type); @@ -232,9 +233,149 @@ void genStmt(Stmt* stmt) } } +int buildExpression(Expr* expr, int leftExpr, int rightExpr, char* operation) +{ + int returnValue = varNumber++; + + if(expr->expr1->type == INTLIT_T && expr->expr2->type == INTLIT_T) + { + printf("%%%d = %s i32 %d %d", returnValue, operation, leftExprId, rightExprId); + } + else if(expr->expr1->type == INTLIT_T) + { + printf("%%%d = %s i32 %d %%%d", returnValue, operation, leftExprId, rightExprId); + } + else + { + printf("%%%d = %s i32 %%%d %%%d", returnValue, operation, leftExprId, rightExprId); + } + + return returnValue; +} + int genExpr(Expr* expr) { + int returnValue; + + int leftExprId, rightExprId; + + if(expr->type == BINOP) + { + leftExprId = genExpr(expr->expr1); + rightExprId = genExpr(expr->expr2); + if(expr->op == PLUS) + { + returnValue = buildExpression(expr, leftExprId, rightExprId, "add"); + } + else if(expr->op == MINUS) + { + returnValue = buildExpression(expr, leftExprId, rightExprId, "sub"); + } + else if(expr->op == MUL) + { + returnValue = buildExpression(expr, leftExprId, rightExprId, "mul"); + } + else if(expr->op == DIV) + { + returnValue = buildExpression(expr, leftExprId, rightExprId, "sdiv"); + } + else if(expr->op == REM) + { + returnValue = buildExpression(expr, leftExprId, rightExprId, "srem"); + } + else if(expr->op == LESSER) + { + returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp slt"); + } + else if(expr->op == GREATER) + { + returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp sgt"); + } + else if(expr->opr == LEQ) + { + returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp sle"); + } + else if(expr->opr == GEQ) + { + returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp sge"); + } + else if(expr->op == DIF) + { + returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp ne"); + } + else if(expr->op == EQ) + { + returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp eq"); + } + else if(exp->op == AND_T) + { + leftExprId = genExpr(expr->expr1); + rightExprId = genExpr(expr->expr2); + + printf("%%%d = icmp ne i32 %%%d, 0", varNumber, ); + printf("br i1 %%%d, label %%%d, label"); + } + else if(expr->op == OR_T) + { + + } + + return returnValue; + } + else if(expr->type == UNOP) + { + int exprId; + + if(expr->op == PLUS) //Not necessary + { + + } + else if(expr->op == MINUS) + { + exprId = genExpr(expr->expr1); + returnValue = varNumber++; + printf("%%%d = sub i32 0, %%%d", returnValue, tempVar); + } + else if(expr->op == NOT) + { + + } + } + else if(expr->type == ID_T) + { + returnValue = varNumber++; + printf("%%%d = load i32* %%%s", returnValue, expr->idOrLit); + } + else if(expr->type == INTLIT_T) + { + returnValue = (int) strtol(expr->idOrLit, NULL, 0); + } + else if(expr->type == BOOLLIT_T) + { + if(strcmp(expr->idOrLit, "true")) { + return 1; + } + else { + return 0; + } + } + else if(expr->type == CALL) + { + + } + else if(expr->type == PARSEINT_T) { + + } + else if(expr->type == INDEX) { + + } + else if(expr->type == NEWINTARR) { + + } + else if(expr->type == NEWBOOLARR) { + + } } const char* llvmTypes[6] = {"void", "i32", "i1", "i32*", "i1*", "i8**"}; From 2b08e96915ab3ed454ee52116e6ec45e4d36a544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Wed, 28 May 2014 21:27:01 +0100 Subject: [PATCH 06/39] Solved minor mistakes and commented a section that was not finished. --- codeGen.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/codeGen.c b/codeGen.c index 1fb8913..69bd928 100644 --- a/codeGen.c +++ b/codeGen.c @@ -236,6 +236,7 @@ void genStmt(Stmt* stmt) int buildExpression(Expr* expr, int leftExpr, int rightExpr, char* operation) { int returnValue = varNumber++; + int leftExprId, rightExprId; if(expr->expr1->type == INTLIT_T && expr->expr2->type == INTLIT_T) { @@ -256,7 +257,6 @@ int buildExpression(Expr* expr, int leftExpr, int rightExpr, char* operation) int genExpr(Expr* expr) { int returnValue; - int leftExprId, rightExprId; if(expr->type == BINOP) @@ -292,11 +292,11 @@ int genExpr(Expr* expr) { returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp sgt"); } - else if(expr->opr == LEQ) + else if(expr->op == LEQ) { returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp sle"); } - else if(expr->opr == GEQ) + else if(expr->op == GEQ) { returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp sge"); } @@ -308,13 +308,13 @@ int genExpr(Expr* expr) { returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp eq"); } - else if(exp->op == AND_T) + else if(expr->op == AND_T) { - leftExprId = genExpr(expr->expr1); + /*leftExprId = genExpr(expr->expr1); rightExprId = genExpr(expr->expr2); printf("%%%d = icmp ne i32 %%%d, 0", varNumber, ); - printf("br i1 %%%d, label %%%d, label"); + printf("br i1 %%%d, label %%%d, label");*/ } else if(expr->op == OR_T) { @@ -335,7 +335,7 @@ int genExpr(Expr* expr) { exprId = genExpr(expr->expr1); returnValue = varNumber++; - printf("%%%d = sub i32 0, %%%d", returnValue, tempVar); + printf("%%%d = sub i32 0, %%%d", returnValue, exprId); } else if(expr->op == NOT) { From 86f4f9db684de29fbf6f1c4ddc0baae5671d4628 Mon Sep 17 00:00:00 2001 From: ThrostGunnulf Date: Wed, 28 May 2014 21:28:37 +0100 Subject: [PATCH 07/39] Delete ijparser.tab.h --- ijparser.tab.h | 132 ------------------------------------------------- 1 file changed, 132 deletions(-) delete mode 100644 ijparser.tab.h diff --git a/ijparser.tab.h b/ijparser.tab.h deleted file mode 100644 index 7d3488f..0000000 --- a/ijparser.tab.h +++ /dev/null @@ -1,132 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.3. */ - -/* Skeleton interface for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - INT = 258, - BOOL = 259, - NEW = 260, - IF = 261, - ELSE = 262, - WHILE = 263, - PRINT = 264, - PARSEINT = 265, - CLASS = 266, - PUBLIC = 267, - STATIC = 268, - VOID = 269, - STRING = 270, - DOTLENGTH = 271, - RETURN = 272, - AND = 273, - OR = 274, - RELCOMPAR = 275, - BOOLLIT = 276, - ID = 277, - INTLIT = 278, - RESERVED = 279, - EQUALITY = 280, - ADDITIVE = 281, - MULTIPLIC = 282, - UNARY = 283, - EXPR1REDUCE = 284, - IFX = 285 - }; -#endif -/* Tokens. */ -#define INT 258 -#define BOOL 259 -#define NEW 260 -#define IF 261 -#define ELSE 262 -#define WHILE 263 -#define PRINT 264 -#define PARSEINT 265 -#define CLASS 266 -#define PUBLIC 267 -#define STATIC 268 -#define VOID 269 -#define STRING 270 -#define DOTLENGTH 271 -#define RETURN 272 -#define AND 273 -#define OR 274 -#define RELCOMPAR 275 -#define BOOLLIT 276 -#define ID 277 -#define INTLIT 278 -#define RESERVED 279 -#define EQUALITY 280 -#define ADDITIVE 281 -#define MULTIPLIC 282 -#define UNARY 283 -#define EXPR1REDUCE 284 -#define IFX 285 - - - - -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE -#line 13 "ijparser.y" -{ - char *token; - Type type; - - struct _class *class; - DeclList *decllist; - VarDecl *vardecl; - MethodDecl *methoddecl; - ParamList *paramlist; - VarDeclList *vardecllist; - IDList *idlist; - StmtList *stmtlist; - Expr *expr; - ArgsList *argslist; -} -/* Line 1529 of yacc.c. */ -#line 125 "ijparser.tab.h" - YYSTYPE; -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - -extern YYSTYPE yylval; - From 9058ed93eeb9c89fd47f4b5d527185d4ef2d913f Mon Sep 17 00:00:00 2001 From: ThrostGunnulf Date: Wed, 28 May 2014 21:28:43 +0100 Subject: [PATCH 08/39] Delete ijparser.tab.c --- ijparser.tab.c | 2015 ------------------------------------------------ 1 file changed, 2015 deletions(-) delete mode 100644 ijparser.tab.c diff --git a/ijparser.tab.c b/ijparser.tab.c deleted file mode 100644 index f567daa..0000000 --- a/ijparser.tab.c +++ /dev/null @@ -1,2015 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.3. */ - -/* Skeleton implementation for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* C LALR(1) parser skeleton written by Richard Stallman, by - simplifying the original so-called "semantic" parser. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output. */ -#define YYBISON 1 - -/* Bison version. */ -#define YYBISON_VERSION "2.3" - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 0 - -/* Using locations. */ -#define YYLSP_NEEDED 0 - - - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - INT = 258, - BOOL = 259, - NEW = 260, - IF = 261, - ELSE = 262, - WHILE = 263, - PRINT = 264, - PARSEINT = 265, - CLASS = 266, - PUBLIC = 267, - STATIC = 268, - VOID = 269, - STRING = 270, - DOTLENGTH = 271, - RETURN = 272, - AND = 273, - OR = 274, - RELCOMPAR = 275, - BOOLLIT = 276, - ID = 277, - INTLIT = 278, - RESERVED = 279, - EQUALITY = 280, - ADDITIVE = 281, - MULTIPLIC = 282, - UNARY = 283, - EXPR1REDUCE = 284, - IFX = 285 - }; -#endif -/* Tokens. */ -#define INT 258 -#define BOOL 259 -#define NEW 260 -#define IF 261 -#define ELSE 262 -#define WHILE 263 -#define PRINT 264 -#define PARSEINT 265 -#define CLASS 266 -#define PUBLIC 267 -#define STATIC 268 -#define VOID 269 -#define STRING 270 -#define DOTLENGTH 271 -#define RETURN 272 -#define AND 273 -#define OR 274 -#define RELCOMPAR 275 -#define BOOLLIT 276 -#define ID 277 -#define INTLIT 278 -#define RESERVED 279 -#define EQUALITY 280 -#define ADDITIVE 281 -#define MULTIPLIC 282 -#define UNARY 283 -#define EXPR1REDUCE 284 -#define IFX 285 - - - - -/* Copy the first part of user declarations. */ -#line 1 "ijparser.y" - -#include -#include "astNodes.h" - -void yyerror(char *s); - -extern int prevLineNo; -extern int prevColNo; -extern char *yytext; - - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE 0 -#endif - -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE -#line 13 "ijparser.y" -{ - char *token; - Type type; - - struct _class *class; - DeclList *decllist; - VarDecl *vardecl; - MethodDecl *methoddecl; - ParamList *paramlist; - VarDeclList *vardecllist; - IDList *idlist; - StmtList *stmtlist; - Expr *expr; - ArgsList *argslist; -} -/* Line 193 of yacc.c. */ -#line 183 "ijparser.tab.c" - YYSTYPE; -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - - - -/* Copy the second part of user declarations. */ - - -/* Line 216 of yacc.c. */ -#line 196 "ijparser.tab.c" - -#ifdef short -# undef short -#endif - -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; -#endif - -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; -#elif (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -typedef signed char yytype_int8; -#else -typedef short int yytype_int8; -#endif - -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; -#else -typedef unsigned short int yytype_uint16; -#endif - -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; -#else -typedef short int yytype_int16; -#endif - -#ifndef YYSIZE_T -# ifdef __SIZE_TYPE__ -# define YYSIZE_T __SIZE_TYPE__ -# elif defined size_t -# define YYSIZE_T size_t -# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# else -# define YYSIZE_T unsigned int -# endif -#endif - -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) - -#ifndef YY_ -# if defined YYENABLE_NLS && YYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_(msgid) dgettext ("bison-runtime", msgid) -# endif -# endif -# ifndef YY_ -# define YY_(msgid) msgid -# endif -#endif - -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# define YYUSE(e) ((void) (e)) -#else -# define YYUSE(e) /* empty */ -#endif - -/* Identity function, used to suppress warnings about constant conditions. */ -#ifndef lint -# define YYID(n) (n) -#else -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static int -YYID (int i) -#else -static int -YYID (i) - int i; -#endif -{ - return i; -} -#endif - -#if ! defined yyoverflow || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# elif defined __BUILTIN_VA_ARG_INCR -# include /* INFRINGES ON USER NAME SPACE */ -# elif defined _AIX -# define YYSTACK_ALLOC __alloca -# elif defined _MSC_VER -# include /* INFRINGES ON USER NAME SPACE */ -# define alloca _alloca -# else -# define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -# include /* INFRINGES ON USER NAME SPACE */ -# ifndef _STDLIB_H -# define _STDLIB_H 1 -# endif -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) -# ifndef YYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ -# endif -# else -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# ifndef YYSTACK_ALLOC_MAXIMUM -# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM -# endif -# if (defined __cplusplus && ! defined _STDLIB_H \ - && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) -# include /* INFRINGES ON USER NAME SPACE */ -# ifndef _STDLIB_H -# define _STDLIB_H 1 -# endif -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef YYFREE -# define YYFREE free -# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# endif -#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ - - -#if (! defined yyoverflow \ - && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - yytype_int16 yyss; - YYSTYPE yyvs; - }; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) - -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (YYID (0)) -# endif -# endif - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (YYID (0)) - -#endif - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 4 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 300 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 41 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 18 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 58 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 137 - -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 285 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const yytype_uint8 yytranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 40, 2, 2, 2, 2, 2, 2, - 34, 35, 2, 2, 37, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 38, - 2, 39, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 30, 2, 36, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 32, 2, 33, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 31 -}; - -#if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const yytype_uint8 yyprhs[] = -{ - 0, 0, 3, 9, 14, 17, 20, 22, 24, 27, - 39, 41, 43, 47, 52, 53, 58, 59, 62, 63, - 68, 72, 73, 77, 81, 83, 85, 89, 97, 103, - 109, 115, 123, 128, 132, 135, 137, 142, 144, 148, - 152, 156, 160, 164, 168, 170, 172, 174, 178, 181, - 184, 187, 195, 200, 204, 210, 216, 219, 221 -}; - -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const yytype_int8 yyrhs[] = -{ - 42, 0, -1, 11, 22, 32, 43, 33, -1, 11, - 22, 32, 33, -1, 43, 44, -1, 43, 45, -1, - 44, -1, 45, -1, 13, 50, -1, 12, 13, 46, - 22, 34, 47, 35, 32, 50, 49, 33, -1, 52, - -1, 14, -1, 52, 22, 48, -1, 15, 30, 36, - 22, -1, -1, 48, 37, 52, 22, -1, -1, 49, - 53, -1, -1, 52, 22, 51, 38, -1, 51, 37, - 22, -1, -1, 3, 30, 36, -1, 4, 30, 36, - -1, 3, -1, 4, -1, 32, 49, 33, -1, 6, - 34, 54, 35, 53, 7, 53, -1, 6, 34, 54, - 35, 53, -1, 8, 34, 54, 35, 53, -1, 9, - 34, 54, 35, 38, -1, 22, 30, 54, 36, 39, - 54, 38, -1, 22, 39, 54, 38, -1, 17, 54, - 38, -1, 17, 38, -1, 55, -1, 55, 30, 54, - 36, -1, 56, -1, 54, 18, 54, -1, 54, 19, - 54, -1, 54, 20, 54, -1, 54, 25, 54, -1, - 54, 26, 54, -1, 54, 27, 54, -1, 22, -1, - 23, -1, 21, -1, 34, 54, 35, -1, 54, 16, - -1, 40, 54, -1, 26, 54, -1, 10, 34, 22, - 30, 54, 36, 35, -1, 22, 34, 57, 35, -1, - 22, 34, 35, -1, 5, 3, 30, 54, 36, -1, - 5, 4, 30, 54, 36, -1, 54, 58, -1, 54, - -1, 37, 57, -1 -}; - -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const yytype_uint8 yyrline[] = -{ - 0, 60, 60, 61, 63, 64, 65, 66, 68, 70, - 72, 73, 75, 76, 77, 79, 80, 82, 83, 85, - 87, 88, 90, 91, 92, 93, 95, 96, 97, 98, - 99, 100, 101, 102, 103, 105, 106, 107, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 126, 127, 129, 130, 132 -}; -#endif - -#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE -/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "$end", "error", "$undefined", "INT", "BOOL", "NEW", "IF", "ELSE", - "WHILE", "PRINT", "PARSEINT", "CLASS", "PUBLIC", "STATIC", "VOID", - "STRING", "DOTLENGTH", "RETURN", "AND", "OR", "RELCOMPAR", "BOOLLIT", - "ID", "INTLIT", "RESERVED", "EQUALITY", "ADDITIVE", "MULTIPLIC", "UNARY", - "EXPR1REDUCE", "'['", "IFX", "'{'", "'}'", "'('", "')'", "']'", "','", - "';'", "'='", "'!'", "$accept", "start", "decls", "fielddecl", - "methoddecl", "methodtype", "formalparams", "formalparamslist", - "stmtlist", "vardecl", "vardecllist", "type", "statement", "expr", - "expr1", "expr2", "args", "argslist", 0 -}; -#endif - -# ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ -static const yytype_uint16 yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 91, 285, 123, 125, 40, 41, 93, 44, 59, 61, - 33 -}; -# endif - -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = -{ - 0, 41, 42, 42, 43, 43, 43, 43, 44, 45, - 46, 46, 47, 47, 47, 48, 48, 49, 49, 50, - 51, 51, 52, 52, 52, 52, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 54, 54, 54, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 56, 56, 57, 57, 58 -}; - -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = -{ - 0, 2, 5, 4, 2, 2, 1, 1, 2, 11, - 1, 1, 3, 4, 0, 4, 0, 2, 0, 4, - 3, 0, 3, 3, 1, 1, 3, 7, 5, 5, - 5, 7, 4, 3, 2, 1, 4, 1, 3, 3, - 3, 3, 3, 3, 1, 1, 1, 3, 2, 2, - 2, 7, 4, 3, 5, 5, 2, 1, 2 -}; - -/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state - STATE-NUM when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const yytype_uint8 yydefact[] = -{ - 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, - 6, 7, 0, 24, 25, 8, 0, 2, 4, 5, - 11, 0, 10, 0, 0, 21, 0, 22, 23, 0, - 14, 0, 19, 0, 0, 0, 20, 0, 0, 16, - 0, 0, 12, 13, 18, 0, 0, 0, 0, 0, - 0, 0, 0, 18, 9, 17, 15, 0, 0, 0, - 0, 0, 46, 44, 45, 0, 0, 34, 0, 0, - 35, 37, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 50, 0, 49, 48, 0, 0, 0, 0, - 0, 0, 33, 0, 0, 0, 26, 0, 0, 0, - 0, 0, 0, 53, 57, 0, 47, 38, 39, 40, - 41, 42, 43, 0, 0, 32, 28, 29, 30, 0, - 0, 0, 0, 56, 52, 36, 0, 0, 54, 55, - 0, 58, 0, 27, 0, 31, 51 -}; - -/* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_int8 yydefgoto[] = -{ - -1, 2, 9, 10, 11, 21, 34, 42, 46, 15, - 29, 16, 55, 104, 70, 71, 105, 123 -}; - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -95 -static const yytype_int16 yypact[] = -{ - -6, -2, 16, -8, -95, -3, 18, 50, -95, 13, - -95, -95, 55, 11, 21, -95, 33, -95, -95, -95, - -95, 39, -95, 35, 43, -95, 57, -95, -95, 36, - 8, 73, -95, 68, 74, 81, -95, 71, 78, -95, - 89, 50, 75, -95, -95, 50, 72, 92, 96, 97, - 103, 22, 27, -95, -95, -95, -95, 62, 62, 62, - 83, 104, -95, 105, -95, 62, 62, -95, 62, 102, - 114, -95, 62, 62, 84, 217, 229, 241, 115, 117, - 111, 42, 135, 253, 135, -95, 62, 62, 62, 62, - 62, 62, -95, 62, 157, 116, -95, 91, 91, 120, - 62, 62, 122, -95, 144, 118, -95, 99, 265, 2, - 273, -14, 135, 169, 126, -95, 152, -95, -95, 181, - 193, 62, 62, -95, -95, -95, 62, 91, -95, -95, - 205, -95, 130, -95, 131, -95, -95 -}; - -/* YYPGOTO[NTERM-NUM]. */ -static const yytype_int16 yypgoto[] = -{ - -95, -95, -95, 158, 163, -95, -95, -95, 108, 133, - -95, -11, -94, -51, -95, -95, 56, -95 -}; - -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If zero, do what YYDEFACT says. - If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -1 -static const yytype_uint8 yytable[] = -{ - 69, 22, 85, 116, 117, 1, 75, 76, 77, 6, - 7, 13, 14, 91, 82, 83, 4, 84, 85, 35, - 3, 94, 95, 33, 5, 6, 7, 60, 90, 91, - 8, 12, 61, 133, 47, 107, 108, 109, 110, 111, - 112, 23, 113, 62, 63, 64, 17, 60, 65, 119, - 120, 24, 61, 13, 14, 25, 66, 72, 13, 14, - 67, 26, 68, 62, 63, 64, 73, 60, 65, 20, - 130, 27, 61, 31, 32, 132, 66, 103, 48, 28, - 49, 50, 68, 62, 63, 64, 78, 79, 65, 51, - 48, 30, 49, 50, 52, 36, 66, 48, 37, 49, - 50, 51, 68, 39, 53, 54, 52, 40, 51, 38, - 41, 43, 45, 52, 56, 85, 53, 96, 85, 88, - 86, 87, 88, 53, 89, 90, 91, 89, 90, 91, - 57, 58, 85, 102, 86, 87, 88, 59, 80, 81, - 92, 89, 90, 91, 93, 100, 85, 101, 86, 87, - 88, 85, 121, 124, 115, 89, 90, 91, 118, 127, - 85, 74, 86, 87, 88, 126, 136, 18, 135, 89, - 90, 91, 19, 85, 44, 86, 87, 88, 131, 0, - 0, 122, 89, 90, 91, 85, 0, 86, 87, 88, - 0, 0, 0, 114, 89, 90, 91, 85, 0, 86, - 87, 88, 0, 0, 0, 125, 89, 90, 91, 85, - 0, 86, 87, 88, 0, 0, 0, 128, 89, 90, - 91, 85, 0, 86, 87, 88, 0, 0, 0, 129, - 89, 90, 91, 85, 0, 86, 87, 88, 0, 0, - 0, 134, 89, 90, 91, 85, 0, 86, 87, 88, - 0, 0, 97, 0, 89, 90, 91, 85, 0, 86, - 87, 88, 0, 0, 98, 0, 89, 90, 91, 85, - 0, 86, 87, 88, 0, 0, 99, 0, 89, 90, - 91, 85, 0, 86, 0, 88, 0, 0, 106, 85, - 89, 90, 91, 88, 0, 0, 0, 0, 0, 90, - 91 -}; - -static const yytype_int8 yycheck[] = -{ - 51, 12, 16, 97, 98, 11, 57, 58, 59, 12, - 13, 3, 4, 27, 65, 66, 0, 68, 16, 30, - 22, 72, 73, 15, 32, 12, 13, 5, 26, 27, - 33, 13, 10, 127, 45, 86, 87, 88, 89, 90, - 91, 30, 93, 21, 22, 23, 33, 5, 26, 100, - 101, 30, 10, 3, 4, 22, 34, 30, 3, 4, - 38, 22, 40, 21, 22, 23, 39, 5, 26, 14, - 121, 36, 10, 37, 38, 126, 34, 35, 6, 36, - 8, 9, 40, 21, 22, 23, 3, 4, 26, 17, - 6, 34, 8, 9, 22, 22, 34, 6, 30, 8, - 9, 17, 40, 22, 32, 33, 22, 36, 17, 35, - 32, 22, 37, 22, 22, 16, 32, 33, 16, 20, - 18, 19, 20, 32, 25, 26, 27, 25, 26, 27, - 34, 34, 16, 22, 18, 19, 20, 34, 34, 34, - 38, 25, 26, 27, 30, 30, 16, 30, 18, 19, - 20, 16, 30, 35, 38, 25, 26, 27, 38, 7, - 16, 53, 18, 19, 20, 39, 35, 9, 38, 25, - 26, 27, 9, 16, 41, 18, 19, 20, 122, -1, - -1, 37, 25, 26, 27, 16, -1, 18, 19, 20, - -1, -1, -1, 36, 25, 26, 27, 16, -1, 18, - 19, 20, -1, -1, -1, 36, 25, 26, 27, 16, - -1, 18, 19, 20, -1, -1, -1, 36, 25, 26, - 27, 16, -1, 18, 19, 20, -1, -1, -1, 36, - 25, 26, 27, 16, -1, 18, 19, 20, -1, -1, - -1, 36, 25, 26, 27, 16, -1, 18, 19, 20, - -1, -1, 35, -1, 25, 26, 27, 16, -1, 18, - 19, 20, -1, -1, 35, -1, 25, 26, 27, 16, - -1, 18, 19, 20, -1, -1, 35, -1, 25, 26, - 27, 16, -1, 18, -1, 20, -1, -1, 35, 16, - 25, 26, 27, 20, -1, -1, -1, -1, -1, 26, - 27 -}; - -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const yytype_uint8 yystos[] = -{ - 0, 11, 42, 22, 0, 32, 12, 13, 33, 43, - 44, 45, 13, 3, 4, 50, 52, 33, 44, 45, - 14, 46, 52, 30, 30, 22, 22, 36, 36, 51, - 34, 37, 38, 15, 47, 52, 22, 30, 35, 22, - 36, 32, 48, 22, 50, 37, 49, 52, 6, 8, - 9, 17, 22, 32, 33, 53, 22, 34, 34, 34, - 5, 10, 21, 22, 23, 26, 34, 38, 40, 54, - 55, 56, 30, 39, 49, 54, 54, 54, 3, 4, - 34, 34, 54, 54, 54, 16, 18, 19, 20, 25, - 26, 27, 38, 30, 54, 54, 33, 35, 35, 35, - 30, 30, 22, 35, 54, 57, 35, 54, 54, 54, - 54, 54, 54, 54, 36, 38, 53, 53, 38, 54, - 54, 30, 37, 58, 35, 36, 39, 7, 36, 36, - 54, 57, 54, 53, 36, 38, 35 -}; - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ - -#define YYFAIL goto yyerrlab - -#define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - yytoken = YYTRANSLATE (yychar); \ - YYPOPSTACK (1); \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (YYID (0)) - - -#define YYTERROR 1 -#define YYERRCODE 256 - - -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (YYID (N)) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ - while (YYID (0)) -#endif - - -/* YY_LOCATION_PRINT -- Print the location on the stream. - This macro was not mandated originally: define only if we know - we won't break user code: when these are the locations we know. */ - -#ifndef YY_LOCATION_PRINT -# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL -# define YY_LOCATION_PRINT(File, Loc) \ - fprintf (File, "%d.%d-%d.%d", \ - (Loc).first_line, (Loc).first_column, \ - (Loc).last_line, (Loc).last_column) -# else -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -# endif -#endif - - -/* YYLEX -- calling `yylex' with the right arguments. */ - -#ifdef YYLEX_PARAM -# define YYLEX yylex (YYLEX_PARAM) -#else -# define YYLEX yylex () -#endif - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (YYID (0)) - -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Type, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (YYID (0)) - - -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) -#else -static void -yy_symbol_value_print (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; -#endif -{ - if (!yyvaluep) - return; -# ifdef YYPRINT - if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# else - YYUSE (yyoutput); -# endif - switch (yytype) - { - default: - break; - } -} - - -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) -#else -static void -yy_symbol_print (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; -#endif -{ - if (yytype < YYNTOKENS) - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - - yy_symbol_value_print (yyoutput, yytype, yyvaluep); - YYFPRINTF (yyoutput, ")"); -} - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) -#else -static void -yy_stack_print (bottom, top) - yytype_int16 *bottom; - yytype_int16 *top; -#endif -{ - YYFPRINTF (stderr, "Stack now"); - for (; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (YYID (0)) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_reduce_print (YYSTYPE *yyvsp, int yyrule) -#else -static void -yy_reduce_print (yyvsp, yyrule) - YYSTYPE *yyvsp; - int yyrule; -#endif -{ - int yynrhs = yyr2[yyrule]; - int yyi; - unsigned long int yylno = yyrline[yyrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - yyrule - 1, yylno); - /* The symbols being reduced. */ - for (yyi = 0; yyi < yynrhs; yyi++) - { - fprintf (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], - &(yyvsp[(yyi + 1) - (yynrhs)]) - ); - fprintf (stderr, "\n"); - } -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyvsp, Rule); \ -} while (YYID (0)) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - - -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static YYSIZE_T -yystrlen (const char *yystr) -#else -static YYSIZE_T -yystrlen (yystr) - const char *yystr; -#endif -{ - YYSIZE_T yylen; - for (yylen = 0; yystr[yylen]; yylen++) - continue; - return yylen; -} -# endif -# endif - -# ifndef yystpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static char * -yystpcpy (char *yydest, const char *yysrc) -#else -static char * -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -#endif -{ - char *yyd = yydest; - const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif - -# ifndef yytnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for yyerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from yytname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYSIZE_T -yytnamerr (char *yyres, const char *yystr) -{ - if (*yystr == '"') - { - YYSIZE_T yyn = 0; - char const *yyp = yystr; - - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } - do_not_strip_quotes: ; - } - - if (! yyres) - return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; -} -# endif - -/* Copy into YYRESULT an error message about the unexpected token - YYCHAR while in state YYSTATE. Return the number of bytes copied, - including the terminating null byte. If YYRESULT is null, do not - copy anything; just return the number of bytes that would be - copied. As a special case, return 0 if an ordinary "syntax error" - message will do. Return YYSIZE_MAXIMUM if overflow occurs during - size calculation. */ -static YYSIZE_T -yysyntax_error (char *yyresult, int yystate, int yychar) -{ - int yyn = yypact[yystate]; - - if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) - return 0; - else - { - int yytype = YYTRANSLATE (yychar); - YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); - YYSIZE_T yysize = yysize0; - YYSIZE_T yysize1; - int yysize_overflow = 0; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - int yyx; - -# if 0 - /* This is so xgettext sees the translatable formats that are - constructed on the fly. */ - YY_("syntax error, unexpected %s"); - YY_("syntax error, unexpected %s, expecting %s"); - YY_("syntax error, unexpected %s, expecting %s or %s"); - YY_("syntax error, unexpected %s, expecting %s or %s or %s"); - YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); -# endif - char *yyfmt; - char const *yyf; - static char const yyunexpected[] = "syntax error, unexpected %s"; - static char const yyexpecting[] = ", expecting %s"; - static char const yyor[] = " or %s"; - char yyformat[sizeof yyunexpected - + sizeof yyexpecting - 1 - + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) - * (sizeof yyor - 1))]; - char const *yyprefix = yyexpecting; - - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yycount = 1; - - yyarg[0] = yytname[yytype]; - yyfmt = yystpcpy (yyformat, yyunexpected); - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - yyformat[sizeof yyunexpected - 1] = '\0'; - break; - } - yyarg[yycount++] = yytname[yyx]; - yysize1 = yysize + yytnamerr (0, yytname[yyx]); - yysize_overflow |= (yysize1 < yysize); - yysize = yysize1; - yyfmt = yystpcpy (yyfmt, yyprefix); - yyprefix = yyor; - } - - yyf = YY_(yyformat); - yysize1 = yysize + yystrlen (yyf); - yysize_overflow |= (yysize1 < yysize); - yysize = yysize1; - - if (yysize_overflow) - return YYSIZE_MAXIMUM; - - if (yyresult) - { - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - char *yyp = yyresult; - int yyi = 0; - while ((*yyp = *yyf) != '\0') - { - if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyf += 2; - } - else - { - yyp++; - yyf++; - } - } - } - return yysize; - } -} -#endif /* YYERROR_VERBOSE */ - - -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) -#else -static void -yydestruct (yymsg, yytype, yyvaluep) - const char *yymsg; - int yytype; - YYSTYPE *yyvaluep; -#endif -{ - YYUSE (yyvaluep); - - if (!yymsg) - yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - - switch (yytype) - { - - default: - break; - } -} - - -/* Prevent warnings from -Wmissing-prototypes. */ - -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); -#else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - - - -/* The look-ahead symbol. */ -int yychar; - -/* The semantic value of the look-ahead symbol. */ -YYSTYPE yylval; - -/* Number of syntax errors so far. */ -int yynerrs; - - - -/*----------. -| yyparse. | -`----------*/ - -#ifdef YYPARSE_PARAM -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -yyparse (void *YYPARSE_PARAM) -#else -int -yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -#endif -#else /* ! YYPARSE_PARAM */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -yyparse (void) -#else -int -yyparse () - -#endif -#endif -{ - - int yystate; - int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Look-ahead token as an internal (translated) token number. */ - int yytoken = 0; -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; -#endif - - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss = yyssa; - yytype_int16 *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp; - - - -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) - - YYSIZE_T yystacksize = YYINITDEPTH; - - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - - - /* The number of symbols on the RHS of the reduced rule. - Keep to zero when no symbol should be popped. */ - int yylen = 0; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - - yyssp = yyss; - yyvsp = yyvs; - - goto yysetstate; - -/*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | -`------------------------------------------------------------*/ - yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. So pushing a state here evens the stacks. */ - yyssp++; - - yysetstate: - *yyssp = yystate; - - if (yyss + yystacksize - 1 <= yyssp) - { - /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; - -#ifdef yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; - - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - - &yystacksize); - - yyss = yyss1; - yyvs = yyvs1; - } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; - yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - yytype_int16 *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif -#endif /* no yyoverflow */ - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); - - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; - } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - - goto yybackup; - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - - /* Do appropriate processing given the current state. Read a - look-ahead token if we need one and don't already have one. */ - - /* First try to decide what to do without reference to look-ahead token. */ - yyn = yypact[yystate]; - if (yyn == YYPACT_NINF) - goto yydefault; - - /* Not known => get a look-ahead token if don't already have one. */ - - /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token: ")); - yychar = YYLEX; - } - - if (yychar <= YYEOF) - { - yychar = yytoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) - goto yydefault; - yyn = yytable[yyn]; - if (yyn <= 0) - { - if (yyn == 0 || yyn == YYTABLE_NINF) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - - if (yyn == YYFINAL) - YYACCEPT; - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - /* Shift the look-ahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; - - yystate = yyn; - *++yyvsp = yylval; - - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- Do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - - - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 2: -#line 60 "ijparser.y" - {;} - break; - - case 3: -#line 61 "ijparser.y" - {;} - break; - - case 4: -#line 63 "ijparser.y" - {;} - break; - - case 5: -#line 64 "ijparser.y" - {;} - break; - - case 6: -#line 65 "ijparser.y" - {;} - break; - - case 7: -#line 66 "ijparser.y" - {;} - break; - - case 8: -#line 68 "ijparser.y" - {;} - break; - - case 9: -#line 70 "ijparser.y" - {;} - break; - - case 10: -#line 72 "ijparser.y" - {;} - break; - - case 11: -#line 73 "ijparser.y" - {;} - break; - - case 13: -#line 76 "ijparser.y" - {;} - break; - - case 15: -#line 79 "ijparser.y" - {;} - break; - - case 17: -#line 82 "ijparser.y" - {;} - break; - - case 19: -#line 85 "ijparser.y" - {;} - break; - - case 20: -#line 87 "ijparser.y" - {;} - break; - - case 22: -#line 90 "ijparser.y" - {;} - break; - - case 23: -#line 91 "ijparser.y" - {;} - break; - - case 24: -#line 92 "ijparser.y" - {;} - break; - - case 25: -#line 93 "ijparser.y" - {;} - break; - - case 26: -#line 95 "ijparser.y" - {;} - break; - - case 27: -#line 96 "ijparser.y" - {;} - break; - - case 28: -#line 97 "ijparser.y" - {;} - break; - - case 29: -#line 98 "ijparser.y" - {;} - break; - - case 30: -#line 99 "ijparser.y" - {;} - break; - - case 31: -#line 100 "ijparser.y" - {;} - break; - - case 32: -#line 101 "ijparser.y" - {;} - break; - - case 33: -#line 102 "ijparser.y" - {;} - break; - - case 34: -#line 103 "ijparser.y" - {;} - break; - - case 35: -#line 105 "ijparser.y" - {;} - break; - - case 36: -#line 106 "ijparser.y" - {;} - break; - - case 37: -#line 107 "ijparser.y" - {;} - break; - - case 38: -#line 109 "ijparser.y" - {;} - break; - - case 39: -#line 110 "ijparser.y" - {;} - break; - - case 40: -#line 111 "ijparser.y" - {;} - break; - - case 41: -#line 112 "ijparser.y" - {;} - break; - - case 42: -#line 113 "ijparser.y" - {;} - break; - - case 43: -#line 114 "ijparser.y" - {;} - break; - - case 44: -#line 115 "ijparser.y" - {;} - break; - - case 45: -#line 116 "ijparser.y" - {;} - break; - - case 46: -#line 117 "ijparser.y" - {;} - break; - - case 47: -#line 118 "ijparser.y" - {;} - break; - - case 48: -#line 119 "ijparser.y" - {;} - break; - - case 49: -#line 120 "ijparser.y" - {;} - break; - - case 50: -#line 121 "ijparser.y" - {;} - break; - - case 51: -#line 122 "ijparser.y" - {;} - break; - - case 52: -#line 123 "ijparser.y" - {;} - break; - - case 53: -#line 124 "ijparser.y" - {;} - break; - - case 54: -#line 126 "ijparser.y" - {;} - break; - - case 55: -#line 127 "ijparser.y" - {;} - break; - - case 56: -#line 129 "ijparser.y" - {;} - break; - - case 57: -#line 130 "ijparser.y" - {;} - break; - - case 58: -#line 132 "ijparser.y" - {;} - break; - - -/* Line 1267 of yacc.c. */ -#line 1792 "ijparser.tab.c" - default: break; - } - YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); - - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - - *++yyvsp = yyval; - - - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; - - goto yynewstate; - - -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ -yyerrlab: - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; -#if ! YYERROR_VERBOSE - yyerror (YY_("syntax error")); -#else - { - YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); - if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) - { - YYSIZE_T yyalloc = 2 * yysize; - if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) - yyalloc = YYSTACK_ALLOC_MAXIMUM; - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yyalloc); - if (yymsg) - yymsg_alloc = yyalloc; - else - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - } - } - - if (0 < yysize && yysize <= yymsg_alloc) - { - (void) yysyntax_error (yymsg, yystate, yychar); - yyerror (yymsg); - } - else - { - yyerror (YY_("syntax error")); - if (yysize != 0) - goto yyexhaustedlab; - } - } -#endif - } - - - - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse look-ahead token after an - error, discard it. */ - - if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } - else - { - yydestruct ("Error: discarding", - yytoken, &yylval); - yychar = YYEMPTY; - } - } - - /* Else will try to reuse look-ahead token after shifting the error - token. */ - goto yyerrlab1; - - -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; - - /* Do not reclaim the symbols of the rule which action triggered - this YYERROR. */ - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - yystate = *yyssp; - goto yyerrlab1; - - -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ - - for (;;) - { - yyn = yypact[yystate]; - if (yyn != YYPACT_NINF) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - - yydestruct ("Error: popping", - yystos[yystate], yyvsp); - YYPOPSTACK (1); - yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); - } - - if (yyn == YYFINAL) - YYACCEPT; - - *++yyvsp = yylval; - - - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - -#ifndef yyoverflow -/*-------------------------------------------------. -| yyexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ -yyexhaustedlab: - yyerror (YY_("memory exhausted")); - yyresult = 2; - /* Fall through. */ -#endif - -yyreturn: - if (yychar != YYEOF && yychar != YYEMPTY) - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval); - /* Do not reclaim the symbols of the rule which action triggered - this YYABORT or YYACCEPT. */ - YYPOPSTACK (yylen); - YY_STACK_PRINT (yyss, yyssp); - while (yyssp != yyss) - { - yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); - YYPOPSTACK (1); - } -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif -#if YYERROR_VERBOSE - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); -#endif - /* Make sure YYID is used. */ - return YYID (yyresult); -} - - -#line 134 "ijparser.y" - - -int main() -{ - yyparse(); - return 0; -} - -void yyerror(char *s) {printf("Line %d, col %d: %s: %s\n", prevLineNo, prevColNo, s, yytext);} - From 5fcc821293cac6ecf29e3ca27b0f9ef6eb6b1a25 Mon Sep 17 00:00:00 2001 From: ThrostGunnulf Date: Wed, 28 May 2014 21:28:52 +0100 Subject: [PATCH 09/39] Delete ijparser.zip --- ijparser.zip | Bin 2589 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 ijparser.zip diff --git a/ijparser.zip b/ijparser.zip deleted file mode 100644 index 4cb70769f44ddec2f6e96be3e8ac371b33255388..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2589 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 TdCV+7M>8C)qNCFT{PXn>{{)Yv From 4c590868d0ed64acaeb4e5140d6b7ec00f9a2a8f Mon Sep 17 00:00:00 2001 From: ThrostGunnulf Date: Wed, 28 May 2014 21:29:24 +0100 Subject: [PATCH 10/39] Delete lex.yy.c --- lex.yy.c | 2116 ------------------------------------------------------ 1 file changed, 2116 deletions(-) delete mode 100644 lex.yy.c diff --git a/lex.yy.c b/lex.yy.c deleted file mode 100644 index 9b0d77f..0000000 --- a/lex.yy.c +++ /dev/null @@ -1,2116 +0,0 @@ - -#line 3 "lex.yy.c" - -#define YY_INT_ALIGNED short int - -/* A lexical scanner generated by flex */ - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 35 -#if YY_FLEX_SUBMINOR_VERSION > 0 -#define FLEX_BETA -#endif - -/* First, we deal with platform-specific or compiler-specific issues. */ - -/* begin standard C headers. */ -#include -#include -#include -#include - -/* end standard C headers. */ - -/* flex integer type definitions */ - -#ifndef FLEXINT_H -#define FLEXINT_H - -/* C99 systems have . Non-C99 systems may or may not. */ - -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - -/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. - */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS 1 -#endif - -#include -typedef int8_t flex_int8_t; -typedef uint8_t flex_uint8_t; -typedef int16_t flex_int16_t; -typedef uint16_t flex_uint16_t; -typedef int32_t flex_int32_t; -typedef uint32_t flex_uint32_t; -typedef uint64_t flex_uint64_t; -#else -typedef signed char flex_int8_t; -typedef short int flex_int16_t; -typedef int flex_int32_t; -typedef unsigned char flex_uint8_t; -typedef unsigned short int flex_uint16_t; -typedef unsigned int flex_uint32_t; -#endif /* ! C99 */ - -/* Limits of integral types. */ -#ifndef INT8_MIN -#define INT8_MIN (-128) -#endif -#ifndef INT16_MIN -#define INT16_MIN (-32767-1) -#endif -#ifndef INT32_MIN -#define INT32_MIN (-2147483647-1) -#endif -#ifndef INT8_MAX -#define INT8_MAX (127) -#endif -#ifndef INT16_MAX -#define INT16_MAX (32767) -#endif -#ifndef INT32_MAX -#define INT32_MAX (2147483647) -#endif -#ifndef UINT8_MAX -#define UINT8_MAX (255U) -#endif -#ifndef UINT16_MAX -#define UINT16_MAX (65535U) -#endif -#ifndef UINT32_MAX -#define UINT32_MAX (4294967295U) -#endif - -#endif /* ! FLEXINT_H */ - -#ifdef __cplusplus - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -/* C99 requires __STDC__ to be defined as 1. */ -#if defined (__STDC__) - -#define YY_USE_CONST - -#endif /* defined (__STDC__) */ -#endif /* ! __cplusplus */ - -#ifdef YY_USE_CONST -#define yyconst const -#else -#define yyconst -#endif - -/* Returned upon end-of-file. */ -#define YY_NULL 0 - -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. - */ -#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) - -/* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ -#define BEGIN (yy_start) = 1 + 2 * - -/* Translate the current start state into a value that can be later handed - * to BEGIN to return to the state. The YYSTATE alias is for lex - * compatibility. - */ -#define YY_START (((yy_start) - 1) / 2) -#define YYSTATE YY_START - -/* Action number for EOF rule of a given start state. */ -#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) - -/* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE yyrestart(yyin ) - -#define YY_END_OF_BUFFER_CHAR 0 - -/* Size of default input buffer. */ -#ifndef YY_BUF_SIZE -#define YY_BUF_SIZE 16384 -#endif - -/* The state buf must be large enough to hold one state per character in the main buffer. - */ -#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) - -#ifndef YY_TYPEDEF_YY_BUFFER_STATE -#define YY_TYPEDEF_YY_BUFFER_STATE -typedef struct yy_buffer_state *YY_BUFFER_STATE; -#endif - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t yy_size_t; -#endif - -extern yy_size_t yyleng; - -extern FILE *yyin, *yyout; - -#define EOB_ACT_CONTINUE_SCAN 0 -#define EOB_ACT_END_OF_FILE 1 -#define EOB_ACT_LAST_MATCH 2 - - #define YY_LESS_LINENO(n) - -/* Return all but the first "n" matched characters back to the input stream. */ -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - *yy_cp = (yy_hold_char); \ - YY_RESTORE_YY_MORE_OFFSET \ - (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up yytext again */ \ - } \ - while ( 0 ) - -#define unput(c) yyunput( c, (yytext_ptr) ) - -#ifndef YY_STRUCT_YY_BUFFER_STATE -#define YY_STRUCT_YY_BUFFER_STATE -struct yy_buffer_state - { - FILE *yy_input_file; - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - yy_size_t yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - yy_size_t yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - int yy_bs_lineno; /**< The line count. */ - int yy_bs_column; /**< The column count. */ - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; - -#define YY_BUFFER_NEW 0 -#define YY_BUFFER_NORMAL 1 - /* When an EOF's been seen but there's still some text to process - * then we mark the buffer as YY_EOF_PENDING, to indicate that we - * shouldn't try reading from the input source any more. We might - * still have a bunch of tokens to match, though, because of - * possible backing-up. - * - * When we actually see the EOF, we change the status to "new" - * (via yyrestart()), so that the user can continue scanning by - * just pointing yyin at a new input file. - */ -#define YY_BUFFER_EOF_PENDING 2 - - }; -#endif /* !YY_STRUCT_YY_BUFFER_STATE */ - -/* Stack of input buffers. */ -static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ -static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ -static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ - -/* We provide macros for accessing buffer states in case in the - * future we want to put the buffer states in a more general - * "scanner state". - * - * Returns the top of the stack, or NULL. - */ -#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ - ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ - : NULL) - -/* Same as previous macro, but useful when we know that the buffer stack is not - * NULL or when we need an lvalue. For internal use only. - */ -#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] - -/* yy_hold_char holds the character lost when yytext is formed. */ -static char yy_hold_char; -static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ -yy_size_t yyleng; - -/* Points to current character in buffer. */ -static char *yy_c_buf_p = (char *) 0; -static int yy_init = 0; /* whether we need to initialize */ -static int yy_start = 0; /* start state number */ - -/* Flag which is used to allow yywrap()'s to do buffer switches - * instead of setting up a fresh yyin. A bit of a hack ... - */ -static int yy_did_buffer_switch_on_eof; - -void yyrestart (FILE *input_file ); -void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); -YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); -void yy_delete_buffer (YY_BUFFER_STATE b ); -void yy_flush_buffer (YY_BUFFER_STATE b ); -void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); -void yypop_buffer_state (void ); - -static void yyensure_buffer_stack (void ); -static void yy_load_buffer_state (void ); -static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); - -#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) - -YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); -YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ); - -void *yyalloc (yy_size_t ); -void *yyrealloc (void *,yy_size_t ); -void yyfree (void * ); - -#define yy_new_buffer yy_create_buffer - -#define yy_set_interactive(is_interactive) \ - { \ - if ( ! YY_CURRENT_BUFFER ){ \ - yyensure_buffer_stack (); \ - YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer(yyin,YY_BUF_SIZE ); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ - } - -#define yy_set_bol(at_bol) \ - { \ - if ( ! YY_CURRENT_BUFFER ){\ - yyensure_buffer_stack (); \ - YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer(yyin,YY_BUF_SIZE ); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ - } - -#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) - -/* Begin user sect3 */ - -typedef unsigned char YY_CHAR; - -FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; - -typedef int yy_state_type; - -extern int yylineno; - -int yylineno = 1; - -extern char *yytext; -#define yytext_ptr yytext - -static yy_state_type yy_get_previous_state (void ); -static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); -static int yy_get_next_buffer (void ); -static void yy_fatal_error (yyconst char msg[] ); - -/* Done after the current pattern has been matched and before the - * corresponding action - sets up yytext. - */ -#define YY_DO_BEFORE_ACTION \ - (yytext_ptr) = yy_bp; \ - yyleng = (yy_size_t) (yy_cp - yy_bp); \ - (yy_hold_char) = *yy_cp; \ - *yy_cp = '\0'; \ - (yy_c_buf_p) = yy_cp; - -#define YY_NUM_RULES 35 -#define YY_END_OF_BUFFER 36 -/* This struct is not used in this scanner, - but its presence is necessary. */ -struct yy_trans_info - { - flex_int32_t yy_verify; - flex_int32_t yy_nxt; - }; -static yyconst flex_int16_t yy_accept[291] = - { 0, - 0, 0, 0, 0, 36, 34, 6, 7, 24, 32, - 30, 34, 24, 29, 29, 34, 30, 33, 33, 27, - 24, 27, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 34, 2, 3, 2, 28, 32, 25, 8, 0, 4, - 5, 33, 0, 27, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 8, 32, 32, - 32, 32, 32, 32, 32, 32, 12, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 26, 1, 0, 5, - - 33, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 8, 32, 32, 32, 9, 32, 32, 11, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 13, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 31, 20, 32, 32, - 0, 32, 32, 32, 32, 32, 32, 17, 32, 32, - - 32, 32, 8, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 8, 32, 32, - 14, 0, 32, 21, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 18, 23, 19, - 32, 32, 32, 32, 22, 32, 0, 32, 10, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, - 32, 32, 32, 32, 32, 32, 0, 0, 32, 32, - 32, 0, 0, 32, 0, 0, 32, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 0, 0, 15, 0 - } ; - -static yyconst flex_int32_t yy_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 5, 1, 1, 6, 7, 8, 1, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 1, 19, 20, - 21, 22, 1, 1, 23, 23, 23, 23, 23, 23, - 6, 6, 24, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 25, 6, 6, 6, 6, 6, 6, 6, - 26, 1, 27, 1, 6, 1, 28, 29, 30, 31, - - 32, 33, 34, 35, 36, 6, 37, 38, 39, 40, - 41, 42, 6, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1 - } ; - -static yyconst flex_int32_t yy_meta[55] = - { 0, - 1, 1, 2, 1, 1, 3, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, - 1, 1, 4, 3, 3, 1, 1, 4, 4, 4, - 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 1, 1, 1 - } ; - -static yyconst flex_int16_t yy_base[295] = - { 0, - 0, 0, 52, 53, 356, 357, 357, 357, 334, 0, - 357, 346, 357, 341, 338, 313, 46, 41, 43, 329, - 328, 327, 307, 20, 37, 26, 44, 36, 35, 50, - 305, 54, 304, 64, 52, 312, 54, 62, 302, 307, - 288, 357, 357, 324, 357, 0, 357, 357, 307, 357, - 0, 89, 0, 357, 293, 294, 292, 291, 290, 292, - 300, 286, 64, 302, 301, 288, 294, 280, 281, 278, - 278, 284, 281, 279, 276, 273, 0, 275, 67, 276, - 270, 266, 275, 282, 77, 282, 265, 268, 73, 266, - 271, 266, 78, 87, 81, 269, 357, 357, 264, 0, - - 0, 271, 266, 256, 255, 267, 260, 269, 264, 263, - 264, 250, 248, 78, 263, 261, 257, 249, 255, 242, - 257, 256, 0, 242, 33, 237, 249, 246, 243, 0, - 240, 240, 229, 230, 236, 227, 229, 226, 234, 237, - 223, 237, 222, 224, 224, 231, 231, 233, 222, 225, - 224, 217, 224, 212, 211, 221, 215, 216, 206, 204, - 212, 201, 208, 0, 205, 212, 205, 197, 209, 197, - 211, 195, 190, 208, 207, 202, 197, 189, 186, 194, - 199, 185, 197, 191, 177, 180, 0, 0, 178, 190, - 176, 188, 185, 179, 189, 171, 187, 0, 174, 175, - - 180, 180, 172, 170, 163, 167, 173, 173, 170, 158, - 172, 171, 160, 169, 153, 162, 153, 151, 158, 157, - 0, 157, 148, 0, 175, 159, 148, 141, 141, 141, - 134, 151, 152, 153, 148, 147, 133, 0, 0, 0, - 144, 135, 143, 136, 357, 158, 131, 126, 0, 138, - 129, 136, 137, 134, 123, 124, 123, 130, 119, 114, - 114, 117, 125, 125, 119, 109, 125, 107, 107, 117, - 98, 105, 130, 104, 91, 92, 101, 99, 87, 105, - 92, 87, 86, 80, 79, 357, 82, 63, 357, 357, - 137, 139, 143, 79 - - } ; - -static yyconst flex_int16_t yy_def[295] = - { 0, - 290, 1, 291, 291, 290, 290, 290, 290, 290, 292, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 290, 290, 290, 290, 290, 292, 290, 290, 290, 290, - 293, 290, 294, 290, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 290, 290, 290, 293, - - 294, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 290, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 290, 292, 292, 292, 292, 292, 292, 292, 292, 292, - - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 290, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 290, 292, 290, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 290, 290, - 292, 292, 292, 292, 292, 292, 290, 290, 292, 292, - 292, 290, 290, 292, 290, 290, 292, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 0, - 290, 290, 290, 290 - - } ; - -static yyconst flex_int16_t yy_nxt[412] = - { 0, - 6, 7, 8, 7, 9, 10, 11, 12, 13, 13, - 11, 14, 13, 15, 16, 17, 18, 19, 13, 20, - 21, 22, 10, 23, 24, 13, 13, 25, 26, 27, - 28, 29, 30, 31, 10, 32, 10, 33, 10, 34, - 10, 35, 36, 37, 38, 10, 39, 40, 10, 10, - 10, 13, 41, 13, 43, 43, 50, 52, 52, 52, - 52, 51, 44, 44, 56, 58, 60, 67, 61, 57, - 169, 63, 69, 170, 70, 62, 68, 72, 64, 84, - 59, 65, 101, 71, 66, 73, 77, 74, 88, 53, - 75, 81, 78, 79, 85, 82, 93, 86, 89, 90, - - 138, 91, 289, 92, 94, 52, 52, 110, 111, 83, - 126, 127, 133, 143, 145, 139, 147, 134, 148, 288, - 144, 160, 161, 287, 286, 285, 284, 283, 282, 281, - 280, 123, 146, 279, 278, 277, 123, 42, 42, 42, - 42, 46, 46, 100, 276, 100, 100, 275, 274, 123, - 123, 273, 272, 123, 271, 123, 123, 270, 269, 268, - 267, 123, 266, 265, 123, 264, 263, 262, 261, 123, - 123, 260, 259, 258, 257, 256, 255, 254, 123, 123, - 253, 252, 251, 123, 123, 123, 250, 249, 248, 247, - 246, 245, 244, 243, 123, 242, 123, 241, 240, 239, - - 238, 237, 236, 235, 123, 234, 233, 123, 232, 231, - 230, 123, 229, 228, 227, 123, 226, 225, 224, 223, - 222, 221, 220, 219, 218, 217, 216, 123, 215, 214, - 123, 213, 212, 211, 210, 209, 208, 207, 206, 205, - 204, 123, 203, 187, 202, 201, 200, 199, 123, 198, - 123, 123, 197, 196, 195, 194, 193, 192, 191, 190, - 189, 188, 187, 186, 185, 123, 184, 183, 182, 181, - 180, 179, 178, 177, 176, 175, 174, 123, 173, 123, - 172, 171, 123, 168, 167, 166, 165, 123, 164, 163, - 162, 159, 123, 158, 123, 123, 157, 156, 155, 154, - - 153, 152, 151, 150, 149, 142, 141, 140, 137, 136, - 135, 132, 131, 130, 129, 128, 125, 124, 123, 122, - 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, - 109, 108, 107, 106, 105, 104, 103, 102, 99, 98, - 97, 96, 95, 87, 80, 76, 55, 54, 45, 54, - 49, 48, 48, 47, 45, 290, 5, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290 - } ; - -static yyconst flex_int16_t yy_chk[412] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 4, 17, 18, 18, 19, - 19, 17, 3, 4, 24, 25, 26, 28, 26, 24, - 125, 27, 29, 125, 29, 26, 28, 30, 27, 35, - 25, 27, 294, 29, 27, 30, 32, 30, 37, 18, - 30, 34, 32, 32, 35, 34, 38, 35, 37, 37, - - 89, 37, 288, 37, 38, 52, 52, 63, 63, 34, - 79, 79, 85, 93, 94, 89, 95, 85, 95, 287, - 93, 114, 114, 285, 284, 283, 282, 281, 280, 279, - 278, 277, 94, 276, 275, 274, 94, 291, 291, 291, - 291, 292, 292, 293, 273, 293, 293, 272, 271, 270, - 269, 268, 267, 266, 265, 264, 263, 262, 261, 260, - 259, 258, 257, 256, 255, 254, 253, 252, 251, 250, - 248, 247, 246, 244, 243, 242, 241, 237, 236, 235, - 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, - 223, 222, 220, 219, 218, 217, 216, 215, 214, 213, - - 212, 211, 210, 209, 208, 207, 206, 205, 204, 203, - 202, 201, 200, 199, 197, 196, 195, 194, 193, 192, - 191, 190, 189, 186, 185, 184, 183, 182, 181, 180, - 179, 178, 177, 176, 175, 174, 173, 172, 171, 170, - 169, 168, 167, 166, 165, 163, 162, 161, 160, 159, - 158, 157, 156, 155, 154, 153, 152, 151, 150, 149, - 148, 147, 146, 145, 144, 143, 142, 141, 140, 139, - 138, 137, 136, 135, 134, 133, 132, 131, 129, 128, - 127, 126, 124, 122, 121, 120, 119, 118, 117, 116, - 115, 113, 112, 111, 110, 109, 108, 107, 106, 105, - - 104, 103, 102, 99, 96, 92, 91, 90, 88, 87, - 86, 84, 83, 82, 81, 80, 78, 76, 75, 74, - 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, - 62, 61, 60, 59, 58, 57, 56, 55, 49, 44, - 41, 40, 39, 36, 33, 31, 23, 22, 21, 20, - 16, 15, 14, 12, 9, 5, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290 - } ; - -static yy_state_type yy_last_accepting_state; -static char *yy_last_accepting_cpos; - -extern int yy_flex_debug; -int yy_flex_debug = 0; - -/* The intent behind this definition is that it'll catch - * any uses of REJECT which flex missed. - */ -#define REJECT reject_used_but_not_detected -#define yymore() yymore_used_but_not_detected -#define YY_MORE_ADJ 0 -#define YY_RESTORE_YY_MORE_OFFSET -char *yytext; -#line 1 "ijscanner.l" -#line 2 "ijscanner.l" -#define INITCOL 1 -#define INITLINE 1 - -#include -#include "ijparser.tab.h" - -void colCount(int l); - -//extern YYSTYPE yylval; - -int colNo = INITCOL; -int prevColNo = INITCOL; -int lineNo = INITLINE; -int prevLineNo = INITLINE; -int lineScom = 0, colScom = 0; - -#line 656 "lex.yy.c" - -#define INITIAL 0 -#define COMMENT 1 - -#ifndef YY_NO_UNISTD_H -/* Special case for "unistd.h", since it is non-ANSI. We include it way - * down here because we want the user's section 1 to have been scanned first. - * The user has a chance to override it with an option. - */ -#include -#endif - -#ifndef YY_EXTRA_TYPE -#define YY_EXTRA_TYPE void * -#endif - -static int yy_init_globals (void ); - -/* Accessor methods to globals. - These are made visible to non-reentrant scanners for convenience. */ - -int yylex_destroy (void ); - -int yyget_debug (void ); - -void yyset_debug (int debug_flag ); - -YY_EXTRA_TYPE yyget_extra (void ); - -void yyset_extra (YY_EXTRA_TYPE user_defined ); - -FILE *yyget_in (void ); - -void yyset_in (FILE * in_str ); - -FILE *yyget_out (void ); - -void yyset_out (FILE * out_str ); - -yy_size_t yyget_leng (void ); - -char *yyget_text (void ); - -int yyget_lineno (void ); - -void yyset_lineno (int line_number ); - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int yywrap (void ); -#else -extern int yywrap (void ); -#endif -#endif - - static void yyunput (int c,char *buf_ptr ); - -#ifndef yytext_ptr -static void yy_flex_strncpy (char *,yyconst char *,int ); -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * ); -#endif - -#ifndef YY_NO_INPUT - -#ifdef __cplusplus -static int yyinput (void ); -#else -static int input (void ); -#endif - -#endif - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#define YY_READ_BUF_SIZE 8192 -#endif - -/* Copy whatever the last rule matched to the standard output. */ -#ifndef ECHO -/* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ -#define ECHO fwrite( yytext, yyleng, 1, yyout ) -#endif - -/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, - * is returned in "result". - */ -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ - { \ - int c = '*'; \ - yy_size_t n; \ - for ( n = 0; n < max_size && \ - (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ) \ - buf[n++] = (char) c; \ - if ( c == EOF && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else \ - { \ - errno=0; \ - while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ - { \ - if( errno != EINTR) \ - { \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - break; \ - } \ - errno=0; \ - clearerr(yyin); \ - } \ - }\ -\ - -#endif - -/* No semi-colon after return; correct usage is to write "yyterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ -#ifndef yyterminate -#define yyterminate() return YY_NULL -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Report a fatal error. */ -#ifndef YY_FATAL_ERROR -#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) -#endif - -/* end tables serialization structures and prototypes */ - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL_IS_OURS 1 - -extern int yylex (void); - -#define YY_DECL int yylex (void) -#endif /* !YY_DECL */ - -/* Code executed at the beginning of each rule, after yytext and yyleng - * have been set up. - */ -#ifndef YY_USER_ACTION -#define YY_USER_ACTION -#endif - -/* Code executed at the end of each rule. */ -#ifndef YY_BREAK -#define YY_BREAK break; -#endif - -#define YY_RULE_SETUP \ - YY_USER_ACTION - -/** The main scanner function which does all the work. - */ -YY_DECL -{ - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; - -#line 28 "ijscanner.l" - -#line 841 "lex.yy.c" - - if ( !(yy_init) ) - { - (yy_init) = 1; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - if ( ! (yy_start) ) - (yy_start) = 1; /* first start state */ - - if ( ! yyin ) - yyin = stdin; - - if ( ! yyout ) - yyout = stdout; - - if ( ! YY_CURRENT_BUFFER ) { - yyensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer(yyin,YY_BUF_SIZE ); - } - - yy_load_buffer_state( ); - } - - while ( 1 ) /* loops until end-of-file is reached */ - { - yy_cp = (yy_c_buf_p); - - /* Support of yytext. */ - *yy_cp = (yy_hold_char); - - /* yy_bp points to the position in yy_ch_buf of the start of - * the current run. - */ - yy_bp = yy_cp; - - yy_current_state = (yy_start); -yy_match: - do - { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 291 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - ++yy_cp; - } - while ( yy_base[yy_current_state] != 357 ); - -yy_find_action: - yy_act = yy_accept[yy_current_state]; - if ( yy_act == 0 ) - { /* have to back up */ - yy_cp = (yy_last_accepting_cpos); - yy_current_state = (yy_last_accepting_state); - yy_act = yy_accept[yy_current_state]; - } - - YY_DO_BEFORE_ACTION; - -do_action: /* This label is used only to access EOF actions. */ - - switch ( yy_act ) - { /* beginning of action switch */ - case 0: /* must back up */ - /* undo the effects of YY_DO_BEFORE_ACTION */ - *yy_cp = (yy_hold_char); - yy_cp = (yy_last_accepting_cpos); - yy_current_state = (yy_last_accepting_state); - goto yy_find_action; - -case YY_STATE_EOF(COMMENT): -#line 29 "ijscanner.l" -{BEGIN 0; printf("Line %d, col %d: unterminated comment\n", lineScom, colScom);} - YY_BREAK -case 1: -YY_RULE_SETUP -#line 30 "ijscanner.l" -{BEGIN 0; colCount(yyleng);} - YY_BREAK -case 2: -YY_RULE_SETUP -#line 31 "ijscanner.l" -{colCount(yyleng);} - YY_BREAK -case 3: -/* rule 3 can match eol */ -YY_RULE_SETUP -#line 32 "ijscanner.l" -{prevLineNo = lineNo++; prevColNo = colNo; colNo = INITCOL;} - YY_BREAK -case 4: -YY_RULE_SETUP -#line 33 "ijscanner.l" -{BEGIN COMMENT; lineScom = yylineno; colScom = colNo; colCount(yyleng);} - YY_BREAK -case 5: -YY_RULE_SETUP -#line 34 "ijscanner.l" -{prevColNo = colNo; colNo = INITCOL;} - YY_BREAK -case 6: -YY_RULE_SETUP -#line 36 "ijscanner.l" -{colCount(yyleng);} - YY_BREAK -case 7: -/* rule 7 can match eol */ -YY_RULE_SETUP -#line 37 "ijscanner.l" -{prevLineNo = lineNo++; prevColNo = colNo; colNo = INITCOL;} - YY_BREAK -case 8: -YY_RULE_SETUP -#line 38 "ijscanner.l" -{return RESERVED; yylval.token = strdup(yytext); colCount(yyleng);} - YY_BREAK -case 9: -YY_RULE_SETUP -#line 40 "ijscanner.l" -{colCount(yyleng); return INT;} - YY_BREAK -case 10: -YY_RULE_SETUP -#line 41 "ijscanner.l" -{colCount(yyleng); return BOOL;} - YY_BREAK -case 11: -YY_RULE_SETUP -#line 42 "ijscanner.l" -{colCount(yyleng); return NEW;} - YY_BREAK -case 12: -YY_RULE_SETUP -#line 43 "ijscanner.l" -{colCount(yyleng); return IF;} - YY_BREAK -case 13: -YY_RULE_SETUP -#line 44 "ijscanner.l" -{colCount(yyleng); return ELSE;} - YY_BREAK -case 14: -YY_RULE_SETUP -#line 45 "ijscanner.l" -{colCount(yyleng); return WHILE;} - YY_BREAK -case 15: -YY_RULE_SETUP -#line 46 "ijscanner.l" -{colCount(yyleng); return PRINT;} - YY_BREAK -case 16: -YY_RULE_SETUP -#line 47 "ijscanner.l" -{colCount(yyleng); return PARSEINT;} - YY_BREAK -case 17: -YY_RULE_SETUP -#line 48 "ijscanner.l" -{colCount(yyleng); return CLASS;} - YY_BREAK -case 18: -YY_RULE_SETUP -#line 49 "ijscanner.l" -{colCount(yyleng); return PUBLIC;} - YY_BREAK -case 19: -YY_RULE_SETUP -#line 50 "ijscanner.l" -{colCount(yyleng); return STATIC;} - YY_BREAK -case 20: -YY_RULE_SETUP -#line 51 "ijscanner.l" -{colCount(yyleng); return VOID;} - YY_BREAK -case 21: -YY_RULE_SETUP -#line 52 "ijscanner.l" -{colCount(yyleng); return STRING;} - YY_BREAK -case 22: -YY_RULE_SETUP -#line 53 "ijscanner.l" -{colCount(yyleng); return DOTLENGTH;} - YY_BREAK -case 23: -YY_RULE_SETUP -#line 54 "ijscanner.l" -{colCount(yyleng); return RETURN;} - YY_BREAK -case 24: -YY_RULE_SETUP -#line 55 "ijscanner.l" -{colCount(yyleng); return yytext[0];} - YY_BREAK -case 25: -YY_RULE_SETUP -#line 56 "ijscanner.l" -{colCount(yyleng); return AND;} - YY_BREAK -case 26: -YY_RULE_SETUP -#line 57 "ijscanner.l" -{colCount(yyleng); return OR;} - YY_BREAK -case 27: -YY_RULE_SETUP -#line 58 "ijscanner.l" -{colCount(yyleng); yylval.token = strdup(yytext); return RELCOMPAR;} - YY_BREAK -case 28: -YY_RULE_SETUP -#line 59 "ijscanner.l" -{colCount(yyleng); yylval.token = strdup(yytext); return EQUALITY;} - YY_BREAK -case 29: -YY_RULE_SETUP -#line 60 "ijscanner.l" -{colCount(yyleng); yylval.token = strdup(yytext); return ADDITIVE;} - YY_BREAK -case 30: -YY_RULE_SETUP -#line 61 "ijscanner.l" -{colCount(yyleng); yylval.token = strdup(yytext); return MULTIPLIC;} - YY_BREAK -case 31: -YY_RULE_SETUP -#line 62 "ijscanner.l" -{colCount(yyleng); yylval.token = strdup(yytext); return BOOLLIT;} - YY_BREAK -case 32: -YY_RULE_SETUP -#line 63 "ijscanner.l" -{colCount(yyleng); yylval.token = strdup(yytext); return ID;} - YY_BREAK -case 33: -YY_RULE_SETUP -#line 64 "ijscanner.l" -{colCount(yyleng); yylval.token = strdup(yytext); return INTLIT;} - YY_BREAK -case 34: -YY_RULE_SETUP -#line 66 "ijscanner.l" -{printf("Line %d, col %d: illegal character ('%s')\n", lineNo, colNo, yytext); colNo++;} - YY_BREAK -case 35: -YY_RULE_SETUP -#line 68 "ijscanner.l" -ECHO; - YY_BREAK -#line 1105 "lex.yy.c" -case YY_STATE_EOF(INITIAL): - yyterminate(); - - case YY_END_OF_BUFFER: - { - /* Amount of text matched not including the EOB char. */ - int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; - - /* Undo the effects of YY_DO_BEFORE_ACTION. */ - *yy_cp = (yy_hold_char); - YY_RESTORE_YY_MORE_OFFSET - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) - { - /* We're scanning a new file or input source. It's - * possible that this happened because the user - * just pointed yyin at a new source and called - * yylex(). If so, then we have to assure - * consistency between YY_CURRENT_BUFFER and our - * globals. Here is the right place to do so, because - * this is the first action (other than possibly a - * back-up) that will match for the new input source. - */ - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; - } - - /* Note that here we test for yy_c_buf_p "<=" to the position - * of the first EOB in the buffer, since yy_c_buf_p will - * already have been incremented past the NUL character - * (since all states make transitions on EOB to the - * end-of-buffer state). Contrast this with the test - * in input(). - */ - if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) - { /* This was really a NUL. */ - yy_state_type yy_next_state; - - (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( ); - - /* Okay, we're now positioned to make the NUL - * transition. We couldn't have - * yy_get_previous_state() go ahead and do it - * for us because it doesn't know how to deal - * with the possibility of jamming (and we don't - * want to build jamming into it because then it - * will run more slowly). - */ - - yy_next_state = yy_try_NUL_trans( yy_current_state ); - - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - - if ( yy_next_state ) - { - /* Consume the NUL. */ - yy_cp = ++(yy_c_buf_p); - yy_current_state = yy_next_state; - goto yy_match; - } - - else - { - yy_cp = (yy_c_buf_p); - goto yy_find_action; - } - } - - else switch ( yy_get_next_buffer( ) ) - { - case EOB_ACT_END_OF_FILE: - { - (yy_did_buffer_switch_on_eof) = 0; - - if ( yywrap( ) ) - { - /* Note: because we've taken care in - * yy_get_next_buffer() to have set up - * yytext, we can now set up - * yy_c_buf_p so that if some total - * hoser (like flex itself) wants to - * call the scanner after we return the - * YY_NULL, it'll still work - another - * YY_NULL will get returned. - */ - (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; - - yy_act = YY_STATE_EOF(YY_START); - goto do_action; - } - - else - { - if ( ! (yy_did_buffer_switch_on_eof) ) - YY_NEW_FILE; - } - break; - } - - case EOB_ACT_CONTINUE_SCAN: - (yy_c_buf_p) = - (yytext_ptr) + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( ); - - yy_cp = (yy_c_buf_p); - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - goto yy_match; - - case EOB_ACT_LAST_MATCH: - (yy_c_buf_p) = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; - - yy_current_state = yy_get_previous_state( ); - - yy_cp = (yy_c_buf_p); - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - goto yy_find_action; - } - break; - } - - default: - YY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ -} /* end of yylex */ - -/* yy_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: - * EOB_ACT_LAST_MATCH - - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position - * EOB_ACT_END_OF_FILE - end of file - */ -static int yy_get_next_buffer (void) -{ - register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - register char *source = (yytext_ptr); - register int number_to_move, i; - int ret_val; - - if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) - YY_FATAL_ERROR( - "fatal flex scanner internal error--end of buffer missed" ); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) - { /* Don't try to fill the buffer, so this is an EOF. */ - if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) - { - /* We matched a single character, the EOB, so - * treat this as a final EOF. - */ - return EOB_ACT_END_OF_FILE; - } - - else - { - /* We matched some text prior to the EOB, first - * process it. - */ - return EOB_ACT_LAST_MATCH; - } - } - - /* Try to read more data. */ - - /* First move last chars to start of buffer. */ - number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; - - for ( i = 0; i < number_to_move; ++i ) - *(dest++) = *(source++); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; - - else - { - yy_size_t num_to_read = - YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ - - /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER; - - int yy_c_buf_p_offset = - (int) ((yy_c_buf_p) - b->yy_ch_buf); - - if ( b->yy_is_our_buffer ) - { - yy_size_t new_size = b->yy_buf_size * 2; - - if ( new_size <= 0 ) - b->yy_buf_size += b->yy_buf_size / 8; - else - b->yy_buf_size *= 2; - - b->yy_ch_buf = (char *) - /* Include room in for 2 EOB chars. */ - yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); - } - else - /* Can't grow it, we don't own it. */ - b->yy_ch_buf = 0; - - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( - "fatal error - scanner input buffer overflow" ); - - (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; - - num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - - number_to_move - 1; - - } - - if ( num_to_read > YY_READ_BUF_SIZE ) - num_to_read = YY_READ_BUF_SIZE; - - /* Read in more data. */ - YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - (yy_n_chars), num_to_read ); - - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - if ( (yy_n_chars) == 0 ) - { - if ( number_to_move == YY_MORE_ADJ ) - { - ret_val = EOB_ACT_END_OF_FILE; - yyrestart(yyin ); - } - - else - { - ret_val = EOB_ACT_LAST_MATCH; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = - YY_BUFFER_EOF_PENDING; - } - } - - else - ret_val = EOB_ACT_CONTINUE_SCAN; - - if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { - /* Extend the array by 50%, plus the number we really need. */ - yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); - if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); - } - - (yy_n_chars) += number_to_move; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; - - (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; - - return ret_val; -} - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - - static yy_state_type yy_get_previous_state (void) -{ - register yy_state_type yy_current_state; - register char *yy_cp; - - yy_current_state = (yy_start); - - for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) - { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 291 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - } - - return yy_current_state; -} - -/* yy_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis - * next_state = yy_try_NUL_trans( current_state ); - */ - static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) -{ - register int yy_is_jam; - register char *yy_cp = (yy_c_buf_p); - - register YY_CHAR yy_c = 1; - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 291 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 290); - - return yy_is_jam ? 0 : yy_current_state; -} - - static void yyunput (int c, register char * yy_bp ) -{ - register char *yy_cp; - - yy_cp = (yy_c_buf_p); - - /* undo effects of setting up yytext */ - *yy_cp = (yy_hold_char); - - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) - { /* need to shift things up to make room */ - /* +2 for EOB chars. */ - register yy_size_t number_to_move = (yy_n_chars) + 2; - register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ - YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; - register char *source = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; - - while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - *--dest = *--source; - - yy_cp += (int) (dest - source); - yy_bp += (int) (dest - source); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; - - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) - YY_FATAL_ERROR( "flex scanner push-back overflow" ); - } - - *--yy_cp = (char) c; - - (yytext_ptr) = yy_bp; - (yy_hold_char) = *yy_cp; - (yy_c_buf_p) = yy_cp; -} - -#ifndef YY_NO_INPUT -#ifdef __cplusplus - static int yyinput (void) -#else - static int input (void) -#endif - -{ - int c; - - *(yy_c_buf_p) = (yy_hold_char); - - if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) - { - /* yy_c_buf_p now points to the character we want to return. - * If this occurs *before* the EOB characters, then it's a - * valid NUL; if not, then we've hit the end of the buffer. - */ - if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) - /* This was really a NUL. */ - *(yy_c_buf_p) = '\0'; - - else - { /* need more input */ - yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); - ++(yy_c_buf_p); - - switch ( yy_get_next_buffer( ) ) - { - case EOB_ACT_LAST_MATCH: - /* This happens because yy_g_n_b() - * sees that we've accumulated a - * token and flags that we need to - * try matching the token before - * proceeding. But for input(), - * there's no matching to consider. - * So convert the EOB_ACT_LAST_MATCH - * to EOB_ACT_END_OF_FILE. - */ - - /* Reset buffer status. */ - yyrestart(yyin ); - - /*FALLTHROUGH*/ - - case EOB_ACT_END_OF_FILE: - { - if ( yywrap( ) ) - return 0; - - if ( ! (yy_did_buffer_switch_on_eof) ) - YY_NEW_FILE; -#ifdef __cplusplus - return yyinput(); -#else - return input(); -#endif - } - - case EOB_ACT_CONTINUE_SCAN: - (yy_c_buf_p) = (yytext_ptr) + offset; - break; - } - } - } - - c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ - *(yy_c_buf_p) = '\0'; /* preserve yytext */ - (yy_hold_char) = *++(yy_c_buf_p); - - return c; -} -#endif /* ifndef YY_NO_INPUT */ - -/** Immediately switch to a different input stream. - * @param input_file A readable stream. - * - * @note This function does not reset the start condition to @c INITIAL . - */ - void yyrestart (FILE * input_file ) -{ - - if ( ! YY_CURRENT_BUFFER ){ - yyensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer(yyin,YY_BUF_SIZE ); - } - - yy_init_buffer(YY_CURRENT_BUFFER,input_file ); - yy_load_buffer_state( ); -} - -/** Switch to a different input buffer. - * @param new_buffer The new input buffer. - * - */ - void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) -{ - - /* TODO. We should be able to replace this entire function body - * with - * yypop_buffer_state(); - * yypush_buffer_state(new_buffer); - */ - yyensure_buffer_stack (); - if ( YY_CURRENT_BUFFER == new_buffer ) - return; - - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(yy_c_buf_p) = (yy_hold_char); - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - YY_CURRENT_BUFFER_LVALUE = new_buffer; - yy_load_buffer_state( ); - - /* We don't actually know whether we did this switch during - * EOF (yywrap()) processing, but the only time this flag - * is looked at is after yywrap() is called, so it's safe - * to go ahead and always set it. - */ - (yy_did_buffer_switch_on_eof) = 1; -} - -static void yy_load_buffer_state (void) -{ - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; - yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; - (yy_hold_char) = *(yy_c_buf_p); -} - -/** Allocate and initialize an input buffer state. - * @param file A readable stream. - * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. - * - * @return the allocated buffer state. - */ - YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) -{ - YY_BUFFER_STATE b; - - b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_buf_size = size; - - /* yy_ch_buf has to be 2 characters longer than the size given because - * we need to put in 2 end-of-buffer characters. - */ - b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ); - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_is_our_buffer = 1; - - yy_init_buffer(b,file ); - - return b; -} - -/** Destroy the buffer. - * @param b a buffer created with yy_create_buffer() - * - */ - void yy_delete_buffer (YY_BUFFER_STATE b ) -{ - - if ( ! b ) - return; - - if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ - YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; - - if ( b->yy_is_our_buffer ) - yyfree((void *) b->yy_ch_buf ); - - yyfree((void *) b ); -} - -#ifndef __cplusplus -extern int isatty (int ); -#endif /* __cplusplus */ - -/* Initializes or reinitializes a buffer. - * This function is sometimes called more than once on the same buffer, - * such as during a yyrestart() or at EOF. - */ - static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) - -{ - int oerrno = errno; - - yy_flush_buffer(b ); - - b->yy_input_file = file; - b->yy_fill_buffer = 1; - - /* If b is the current buffer, then yy_init_buffer was _probably_ - * called from yyrestart() or through yy_get_next_buffer. - * In that case, we don't want to reset the lineno or column. - */ - if (b != YY_CURRENT_BUFFER){ - b->yy_bs_lineno = 1; - b->yy_bs_column = 0; - } - - b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; - - errno = oerrno; -} - -/** Discard all buffered characters. On the next scan, YY_INPUT will be called. - * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. - * - */ - void yy_flush_buffer (YY_BUFFER_STATE b ) -{ - if ( ! b ) - return; - - b->yy_n_chars = 0; - - /* We always need two end-of-buffer characters. The first causes - * a transition to the end-of-buffer state. The second causes - * a jam in that state. - */ - b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; - b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; - - b->yy_buf_pos = &b->yy_ch_buf[0]; - - b->yy_at_bol = 1; - b->yy_buffer_status = YY_BUFFER_NEW; - - if ( b == YY_CURRENT_BUFFER ) - yy_load_buffer_state( ); -} - -/** Pushes the new state onto the stack. The new state becomes - * the current state. This function will allocate the stack - * if necessary. - * @param new_buffer The new state. - * - */ -void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) -{ - if (new_buffer == NULL) - return; - - yyensure_buffer_stack(); - - /* This block is copied from yy_switch_to_buffer. */ - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(yy_c_buf_p) = (yy_hold_char); - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - /* Only push if top exists. Otherwise, replace top. */ - if (YY_CURRENT_BUFFER) - (yy_buffer_stack_top)++; - YY_CURRENT_BUFFER_LVALUE = new_buffer; - - /* copied from yy_switch_to_buffer. */ - yy_load_buffer_state( ); - (yy_did_buffer_switch_on_eof) = 1; -} - -/** Removes and deletes the top of the stack, if present. - * The next element becomes the new top. - * - */ -void yypop_buffer_state (void) -{ - if (!YY_CURRENT_BUFFER) - return; - - yy_delete_buffer(YY_CURRENT_BUFFER ); - YY_CURRENT_BUFFER_LVALUE = NULL; - if ((yy_buffer_stack_top) > 0) - --(yy_buffer_stack_top); - - if (YY_CURRENT_BUFFER) { - yy_load_buffer_state( ); - (yy_did_buffer_switch_on_eof) = 1; - } -} - -/* Allocates the stack if it does not exist. - * Guarantees space for at least one push. - */ -static void yyensure_buffer_stack (void) -{ - yy_size_t num_to_alloc; - - if (!(yy_buffer_stack)) { - - /* First allocation is just for 2 elements, since we don't know if this - * scanner will even need a stack. We use 2 instead of 1 to avoid an - * immediate realloc on the next call. - */ - num_to_alloc = 1; - (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc - (num_to_alloc * sizeof(struct yy_buffer_state*) - ); - if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); - - memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); - - (yy_buffer_stack_max) = num_to_alloc; - (yy_buffer_stack_top) = 0; - return; - } - - if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ - - /* Increase the buffer to prepare for a possible push. */ - int grow_size = 8 /* arbitrary grow size */; - - num_to_alloc = (yy_buffer_stack_max) + grow_size; - (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc - ((yy_buffer_stack), - num_to_alloc * sizeof(struct yy_buffer_state*) - ); - if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); - - /* zero only the new slots.*/ - memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); - (yy_buffer_stack_max) = num_to_alloc; - } -} - -/** Setup the input buffer state to scan directly from a user-specified character buffer. - * @param base the character buffer - * @param size the size in bytes of the character buffer - * - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) -{ - YY_BUFFER_STATE b; - - if ( size < 2 || - base[size-2] != YY_END_OF_BUFFER_CHAR || - base[size-1] != YY_END_OF_BUFFER_CHAR ) - /* They forgot to leave room for the EOB's. */ - return 0; - - b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); - - b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ - b->yy_buf_pos = b->yy_ch_buf = base; - b->yy_is_our_buffer = 0; - b->yy_input_file = 0; - b->yy_n_chars = b->yy_buf_size; - b->yy_is_interactive = 0; - b->yy_at_bol = 1; - b->yy_fill_buffer = 0; - b->yy_buffer_status = YY_BUFFER_NEW; - - yy_switch_to_buffer(b ); - - return b; -} - -/** Setup the input buffer state to scan a string. The next call to yylex() will - * scan from a @e copy of @a str. - * @param yystr a NUL-terminated string to scan - * - * @return the newly allocated buffer state object. - * @note If you want to scan bytes that may contain NUL values, then use - * yy_scan_bytes() instead. - */ -YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) -{ - - return yy_scan_bytes(yystr,strlen(yystr) ); -} - -/** Setup the input buffer state to scan the given bytes. The next call to yylex() will - * scan from a @e copy of @a bytes. - * @param bytes the byte buffer to scan - * @param len the number of bytes in the buffer pointed to by @a bytes. - * - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) -{ - YY_BUFFER_STATE b; - char *buf; - yy_size_t n, i; - - /* Get memory for full buffer, including space for trailing EOB's. */ - n = _yybytes_len + 2; - buf = (char *) yyalloc(n ); - if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); - - for ( i = 0; i < _yybytes_len; ++i ) - buf[i] = yybytes[i]; - - buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; - - b = yy_scan_buffer(buf,n ); - if ( ! b ) - YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); - - /* It's okay to grow etc. this buffer, and we should throw it - * away when we're done. - */ - b->yy_is_our_buffer = 1; - - return b; -} - -#ifndef YY_EXIT_FAILURE -#define YY_EXIT_FAILURE 2 -#endif - -static void yy_fatal_error (yyconst char* msg ) -{ - (void) fprintf( stderr, "%s\n", msg ); - exit( YY_EXIT_FAILURE ); -} - -/* Redefine yyless() so it works in section 3 code. */ - -#undef yyless -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - yytext[yyleng] = (yy_hold_char); \ - (yy_c_buf_p) = yytext + yyless_macro_arg; \ - (yy_hold_char) = *(yy_c_buf_p); \ - *(yy_c_buf_p) = '\0'; \ - yyleng = yyless_macro_arg; \ - } \ - while ( 0 ) - -/* Accessor methods (get/set functions) to struct members. */ - -/** Get the current line number. - * - */ -int yyget_lineno (void) -{ - - return yylineno; -} - -/** Get the input stream. - * - */ -FILE *yyget_in (void) -{ - return yyin; -} - -/** Get the output stream. - * - */ -FILE *yyget_out (void) -{ - return yyout; -} - -/** Get the length of the current token. - * - */ -yy_size_t yyget_leng (void) -{ - return yyleng; -} - -/** Get the current token. - * - */ - -char *yyget_text (void) -{ - return yytext; -} - -/** Set the current line number. - * @param line_number - * - */ -void yyset_lineno (int line_number ) -{ - - yylineno = line_number; -} - -/** Set the input stream. This does not discard the current - * input buffer. - * @param in_str A readable stream. - * - * @see yy_switch_to_buffer - */ -void yyset_in (FILE * in_str ) -{ - yyin = in_str ; -} - -void yyset_out (FILE * out_str ) -{ - yyout = out_str ; -} - -int yyget_debug (void) -{ - return yy_flex_debug; -} - -void yyset_debug (int bdebug ) -{ - yy_flex_debug = bdebug ; -} - -static int yy_init_globals (void) -{ - /* Initialization is the same as for the non-reentrant scanner. - * This function is called from yylex_destroy(), so don't allocate here. - */ - - (yy_buffer_stack) = 0; - (yy_buffer_stack_top) = 0; - (yy_buffer_stack_max) = 0; - (yy_c_buf_p) = (char *) 0; - (yy_init) = 0; - (yy_start) = 0; - -/* Defined in main.c */ -#ifdef YY_STDINIT - yyin = stdin; - yyout = stdout; -#else - yyin = (FILE *) 0; - yyout = (FILE *) 0; -#endif - - /* For future reference: Set errno on error, since we are called by - * yylex_init() - */ - return 0; -} - -/* yylex_destroy is for both reentrant and non-reentrant scanners. */ -int yylex_destroy (void) -{ - - /* Pop the buffer stack, destroying each element. */ - while(YY_CURRENT_BUFFER){ - yy_delete_buffer(YY_CURRENT_BUFFER ); - YY_CURRENT_BUFFER_LVALUE = NULL; - yypop_buffer_state(); - } - - /* Destroy the stack itself. */ - yyfree((yy_buffer_stack) ); - (yy_buffer_stack) = NULL; - - /* Reset the globals. This is important in a non-reentrant scanner so the next time - * yylex() is called, initialization will occur. */ - yy_init_globals( ); - - return 0; -} - -/* - * Internal utility routines. - */ - -#ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) -{ - register int i; - for ( i = 0; i < n; ++i ) - s1[i] = s2[i]; -} -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * s ) -{ - register int n; - for ( n = 0; s[n]; ++n ) - ; - - return n; -} -#endif - -void *yyalloc (yy_size_t size ) -{ - return (void *) malloc( size ); -} - -void *yyrealloc (void * ptr, yy_size_t size ) -{ - /* The cast to (char *) in the following accommodates both - * implementations that use char* generic pointers, and those - * that use void* generic pointers. It works with the latter - * because both ANSI C and C++ allow castless assignment from - * any pointer type to void*, and deal with argument conversions - * as though doing an assignment. - */ - return (void *) realloc( (char *) ptr, size ); -} - -void yyfree (void * ptr ) -{ - free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ -} - -#define YYTABLES_NAME "yytables" - -#line 68 "ijscanner.l" - - - -void colCount(int l) -{ - prevLineNo = lineNo; - prevColNo = colNo; - colNo += l; -} - -int yywrap() -{ - return 1; -} - From cc0b4e83c313ac67da8c4b02dd1af06ad84916da Mon Sep 17 00:00:00 2001 From: joaosimoes Date: Thu, 29 May 2014 02:06:55 +0100 Subject: [PATCH 11/39] Update expressions There is a bug in genStatment function --- codeGen.c | 24 +++++++++++++++++------- test.ijava | 21 ++++++++++++++++----- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/codeGen.c b/codeGen.c index 69bd928..1d9a1f4 100644 --- a/codeGen.c +++ b/codeGen.c @@ -177,7 +177,7 @@ void genStmt(Stmt* stmt) printf("\tbr i1 %%%d, label %%whiledo%d, label %%whileend%d\n\n", exprVarNumber, whileNumber, whileNumber); printf("whiledo%d:\n", whileNumber); - genStmt(stmt->stmt1); + genStmt(stmt->stmt1); //FIX BUG: Stmt->stmt1 is NULL printf("\nwhileend%d:\n", whileNumber); @@ -203,7 +203,12 @@ void genStmt(Stmt* stmt) getTypeLLVM(llvmType, varType); - printf("\tstore %s %%%d, %s* %s%s\n", llvmType, exprVarNumber, llvmType, varDeclSymbol, stmt->id); + if(stmt->expr1->type == INTLIT_T) { //Do the same to BOOL + printf("\tstore %s %d, %s* %s%s\n", llvmType, exprVarNumber, llvmType, varDeclSymbol, stmt->id); + } + else { + printf("\tstore %s %%%d, %s* %s%s\n", llvmType, exprVarNumber, llvmType, varDeclSymbol, stmt->id); + } } else if(stmt->type == STOREARRAY) { @@ -236,19 +241,22 @@ void genStmt(Stmt* stmt) int buildExpression(Expr* expr, int leftExpr, int rightExpr, char* operation) { int returnValue = varNumber++; - int leftExprId, rightExprId; if(expr->expr1->type == INTLIT_T && expr->expr2->type == INTLIT_T) { - printf("%%%d = %s i32 %d %d", returnValue, operation, leftExprId, rightExprId); + printf("\t%%%d = %s i32 %d %d\n", returnValue, operation, leftExpr, rightExpr); } else if(expr->expr1->type == INTLIT_T) { - printf("%%%d = %s i32 %d %%%d", returnValue, operation, leftExprId, rightExprId); + printf("\t%%%d = %s i32 %d %%%d\n", returnValue, operation, leftExpr, rightExpr); + } + else if(expr->expr2->type == INTLIT_T) + { + printf("\t%%%d = %s i32 %%%d %d\n", returnValue, operation, leftExpr, rightExpr); } else { - printf("%%%d = %s i32 %%%d %%%d", returnValue, operation, leftExprId, rightExprId); + printf("\t%%%d = %s i32 %%%d %%%d\n", returnValue, operation, leftExpr, rightExpr); } return returnValue; @@ -345,7 +353,7 @@ int genExpr(Expr* expr) else if(expr->type == ID_T) { returnValue = varNumber++; - printf("%%%d = load i32* %%%s", returnValue, expr->idOrLit); + printf("\t%%%d = load i32* %%%s\n", returnValue, expr->idOrLit); } else if(expr->type == INTLIT_T) { @@ -376,6 +384,8 @@ int genExpr(Expr* expr) else if(expr->type == NEWBOOLARR) { } + + return returnValue; } const char* llvmTypes[6] = {"void", "i32", "i1", "i32*", "i1*", "i8**"}; diff --git a/test.ijava b/test.ijava index adf41b4..55eb1b6 100644 --- a/test.ijava +++ b/test.ijava @@ -1,13 +1,13 @@ class gcd { - static int a, b, c; + /*static int a, b, c; static boolean d, e; static int[] f, g; - static boolean[] h, i, j; + static boolean[] h, i, j;*/ public static void main(String[] args) { - int b, c; + /*int b, c; boolean d, e; int[] f, g; boolean[] h, i, j; @@ -30,11 +30,22 @@ class gcd { a = a + 1; } + */ + + int a, b, c; + + a = 1; + b = 2; + + while(a < b) { + } + + return; } - public static int[] test1(int[] a, boolean[]b) + /*public static int[] test1(int[] a, boolean[]b) { return test2(); } @@ -50,6 +61,6 @@ class gcd public static boolean[] test3() { return new boolean[7]; - } + }*/ } From 5b27484b08bea3425f181578f1eebd8ffca38c28 Mon Sep 17 00:00:00 2001 From: joaosimoes Date: Fri, 30 May 2014 03:02:50 +0100 Subject: [PATCH 12/39] Update of expressions implementation. And and Or isn't already done --- codeGen.c | 59 +++++++++++++++++++++++++++++++++++++++--------------- test.ijava | 11 ++++------ 2 files changed, 47 insertions(+), 23 deletions(-) diff --git a/codeGen.c b/codeGen.c index 1d9a1f4..6524849 100644 --- a/codeGen.c +++ b/codeGen.c @@ -11,7 +11,7 @@ extern Class* myProgram; extern ClassTable* symbolsTable; extern MethodTable* currentLocalTable; Type curFunctionType; -int varNumber, ifNumber, whileNumber, indexNumber; +int varNumber, ifNumber, whileNumber, indexNumber, andNumber, orNumber; void genGlobalVar(VarDecl*); void genMethod(MethodDecl*); @@ -65,7 +65,7 @@ void genGlobalVar(VarDecl* varDecl) void genMethod(MethodDecl* methodDecl) { curFunctionType = methodDecl->type; - varNumber = ifNumber = whileNumber = indexNumber = 0; + varNumber = ifNumber = whileNumber = indexNumber = andNumber = orNumber = 0; currentLocalTable = getLocalTable(methodDecl->id); char llvmType[MAX_LLVM_TYPE_SIZE]; @@ -141,11 +141,13 @@ void genStmt(Stmt* stmt) printf("\tbr i1 %%%d, label %%ifthen%d, label %%ifelse%d\n\n", compVarNumber, ifNumber, ifNumber); printf("ifthen%d:\n", ifNumber); - genStmt(stmt->stmt1); + if(stmt->stmt1 != NULL) + genStmt(stmt->stmt1); printf("\tbr label %%ifend%d\n\n", ifNumber); printf("ifelse%d:\n", ifNumber); - genStmt(stmt->stmt2); + if(stmt->stmt2 != NULL) + genStmt(stmt->stmt2); printf("\tbr label %%ifend%d\n\n", ifNumber); printf("ifend%d:\n", ifNumber); @@ -177,7 +179,8 @@ void genStmt(Stmt* stmt) printf("\tbr i1 %%%d, label %%whiledo%d, label %%whileend%d\n\n", exprVarNumber, whileNumber, whileNumber); printf("whiledo%d:\n", whileNumber); - genStmt(stmt->stmt1); //FIX BUG: Stmt->stmt1 is NULL + if(stmt->stmt1 != NULL) + genStmt(stmt->stmt1); printf("\nwhileend%d:\n", whileNumber); @@ -203,10 +206,12 @@ void genStmt(Stmt* stmt) getTypeLLVM(llvmType, varType); - if(stmt->expr1->type == INTLIT_T) { //Do the same to BOOL + if(stmt->expr1->type == INTLIT_T || stmt->expr1->type == BOOLLIT_T) + { printf("\tstore %s %d, %s* %s%s\n", llvmType, exprVarNumber, llvmType, varDeclSymbol, stmt->id); } - else { + else + { printf("\tstore %s %%%d, %s* %s%s\n", llvmType, exprVarNumber, llvmType, varDeclSymbol, stmt->id); } } @@ -244,19 +249,19 @@ int buildExpression(Expr* expr, int leftExpr, int rightExpr, char* operation) if(expr->expr1->type == INTLIT_T && expr->expr2->type == INTLIT_T) { - printf("\t%%%d = %s i32 %d %d\n", returnValue, operation, leftExpr, rightExpr); + printf("\t%%%d = %s i32 %d, %d\n", returnValue, operation, leftExpr, rightExpr); } else if(expr->expr1->type == INTLIT_T) { - printf("\t%%%d = %s i32 %d %%%d\n", returnValue, operation, leftExpr, rightExpr); + printf("\t%%%d = %s i32 %d, %%%d\n", returnValue, operation, leftExpr, rightExpr); } else if(expr->expr2->type == INTLIT_T) { - printf("\t%%%d = %s i32 %%%d %d\n", returnValue, operation, leftExpr, rightExpr); + printf("\t%%%d = %s i32 %%%d, %d\n", returnValue, operation, leftExpr, rightExpr); } else { - printf("\t%%%d = %s i32 %%%d %%%d\n", returnValue, operation, leftExpr, rightExpr); + printf("\t%%%d = %s i32 %%%d, %%%d\n", returnValue, operation, leftExpr, rightExpr); } return returnValue; @@ -318,11 +323,24 @@ int genExpr(Expr* expr) } else if(expr->op == AND_T) { - /*leftExprId = genExpr(expr->expr1); + int tempId; + + leftExprId = genExpr(expr->expr1); + + tempId = varNumber++; + printf("%%%d = icmp ne i32 %%%d, 0", tempId, leftExprId); + + printf("\tbr i1 %%%d, label %%andTrue%d, label %%andFalse%d\n\n", tempId, andNumber, andNumber); + + printf("andTrue%d:\n", andNumber); rightExprId = genExpr(expr->expr2); + printf("\t%%%d = icmp ne i32 %%%d, 0\n", varNumber, rightExprId); + tempId = varNumber++; + printf("\tbr label %%andFalse%d\n\n", andNumber); + + printf("andFalse%d\n", andNumber); + - printf("%%%d = icmp ne i32 %%%d, 0", varNumber, ); - printf("br i1 %%%d, label %%%d, label");*/ } else if(expr->op == OR_T) { @@ -337,7 +355,9 @@ int genExpr(Expr* expr) if(expr->op == PLUS) //Not necessary { - + exprId = genExpr(expr->expr1); + returnValue = varNumber++; + printf("%%%d = add i32 0, %%%d", returnValue, exprId); } else if(expr->op == MINUS) { @@ -347,7 +367,14 @@ int genExpr(Expr* expr) } else if(expr->op == NOT) { - + int tempId; + exprId = genExpr(expr->expr1); + returnValue = varNumber++; + printf("\t%%%d = icmp ne i32 %%%d, 0\n", returnValue, exprId); + printf("\t%%%d = xor i1 %%%d, true\n", varNumber, returnValue); + returnValue = varNumber++; + printf("\t%%%d = zext i1 %%%d to i32\n", varNumber, returnValue); + returnValue = varNumber++; } } else if(expr->type == ID_T) diff --git a/test.ijava b/test.ijava index 55eb1b6..446b34a 100644 --- a/test.ijava +++ b/test.ijava @@ -32,15 +32,12 @@ class gcd } */ - int a, b, c; - - a = 1; - b = 2; - - while(a < b) { + boolean a , b , c; - } + a = true; + b = false; + c = a && b; return; } From 7eb4b06ce6677d5c5b1ca99af3d42fdf57d260ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Fri, 30 May 2014 17:16:47 +0100 Subject: [PATCH 13/39] Stuff. --- codeGen.c | 58 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 47 insertions(+), 11 deletions(-) diff --git a/codeGen.c b/codeGen.c index 6524849..a15aad8 100644 --- a/codeGen.c +++ b/codeGen.c @@ -7,25 +7,34 @@ #define MAX_LLVM_TYPE_SIZE 15 +typedef struct _ExprRet +{ + int tempVarNum; + Type type; +} ExprRet; + extern Class* myProgram; extern ClassTable* symbolsTable; extern MethodTable* currentLocalTable; Type curFunctionType; int varNumber, ifNumber, whileNumber, indexNumber, andNumber, orNumber; +void genPreamble(); void genGlobalVar(VarDecl*); void genMethod(MethodDecl*); void genLocalVar(VarDecl*); void genStmtList(StmtList*); void genStmt(Stmt*); -int buildExpression(Expr*,int,int,char*); -int genExpr(Expr*); +ExprRet buildExpression(Expr*,int,int,char*); +ExprRet genExpr(Expr*); void getTypeLLVM(char*, Type); void getRetTypeLLVM(char*, Type); void generateCode() { + genPreamble(); + DeclList* aux = myProgram->declList; for(; aux != NULL; aux = aux->next) { @@ -36,6 +45,18 @@ void generateCode() } } +void genPreamble() +{ + printf("declare i32 @printf(i8*, ...)\n"); + printf("declare i32 @atoi(i8*) nounwind readonly\n"); + printf("\n"); + printf("@str.d = private unnamed_addr constant [4 x i8] c\"%%d\\0A\\00\"\n"); + printf("@str.f = private unnamed_addr constant [7 x i8] c\"false\\0A\\00\"\n"); + printf("@str.f = private unnamed_addr constant [7 x i8] c\"true\\0A\\00\\00\"\n"); + printf("@str.bools = global [2 x i8*] [i8* getelementptr inbounds ([7 x i8]* @str.f, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8]* @str.t, i32 0, i32 0)]\n"); + printf("\n"); +} + void genGlobalVar(VarDecl* varDecl) { char initVal[5]; @@ -137,7 +158,7 @@ void genStmt(Stmt* stmt) genStmtList(stmt->stmtList); else if(stmt->type == IFELSE) { - int compVarNumber = genExpr(stmt->expr1); + int compVarNumber = genExpr(stmt->expr1).tempVarNum; printf("\tbr i1 %%%d, label %%ifthen%d, label %%ifelse%d\n\n", compVarNumber, ifNumber, ifNumber); printf("ifthen%d:\n", ifNumber); @@ -160,7 +181,7 @@ void genStmt(Stmt* stmt) { char llvmType[MAX_LLVM_TYPE_SIZE]; getTypeLLVM(llvmType, curFunctionType); - int exprVarNumber = genExpr(stmt->expr1); + int exprVarNumber = genExpr(stmt->expr1).tempVarNum; if(curFunctionType == INT_T || curFunctionType == BOOL_T) printf("\tret %s %%%d\n", llvmType, exprVarNumber); @@ -175,7 +196,7 @@ void genStmt(Stmt* stmt) else if(stmt->type == WHILE_T) { printf("whilestart%d:\n", whileNumber); - int exprVarNumber = genExpr(stmt->expr1); + int exprVarNumber = genExpr(stmt->expr1).tempVarNum; printf("\tbr i1 %%%d, label %%whiledo%d, label %%whileend%d\n\n", exprVarNumber, whileNumber, whileNumber); printf("whiledo%d:\n", whileNumber); @@ -186,13 +207,28 @@ void genStmt(Stmt* stmt) whileNumber++; } - else if(stmt->type == PRINT_T); + else if(stmt->type == PRINT_T) + { + ExprRet ret = genExpr(stmt->expr1); + if(ret.type == INT_T) + { + printf("call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8]* @.str2, i32 0, i32 0), i32 %%%d)\n", ret.tempVarNum); + } + else if(ret.type == BOOL_T) + { + printf("%%%d = zext i1 %%%d to i32\n", varNumber++, ret.tempVarNum); + printf("%%%d = getelementptr inbounds [2 x i8*]* @%s, i32 0, i32 %%%d\n", varNumber++, stmt->id, varNumber); + printf("%%%d = load i8** %%d\n", varNumber++, varNumber); + printf("call i32 (i8*, ...)* @printf(i8* %%%d)\n", varNumber); + + } + } else if(stmt->type == STORE) { int isLocal = 1; char varDeclSymbol[5]; char llvmType[MAX_LLVM_TYPE_SIZE]; - int exprVarNumber = genExpr(stmt->expr1); + int exprVarNumber = genExpr(stmt->expr1).tempVarNum; Type aux = -1; Type varType = getSymbolFromLocal(stmt->id); @@ -221,8 +257,8 @@ void genStmt(Stmt* stmt) char varDeclSymbol[5]; char llvmType[MAX_LLVM_TYPE_SIZE]; char llvmType2[MAX_LLVM_TYPE_SIZE]; - int indexVarNumber = genExpr(stmt->expr1); - int exprVarNumber = genExpr(stmt->expr2); + int indexVarNumber = genExpr(stmt->expr1).tempVarNum; + int exprVarNumber = genExpr(stmt->expr2).tempVarNum; Type arrayType = getSymbolFromLocal(stmt->id); if(arrayType == -1) @@ -243,7 +279,7 @@ void genStmt(Stmt* stmt) } } -int buildExpression(Expr* expr, int leftExpr, int rightExpr, char* operation) +ExprRet buildExpression(Expr* expr, int leftExpr, int rightExpr, char* operation) { int returnValue = varNumber++; @@ -267,7 +303,7 @@ int buildExpression(Expr* expr, int leftExpr, int rightExpr, char* operation) return returnValue; } -int genExpr(Expr* expr) +ExprRet genExpr(Expr* expr) { int returnValue; int leftExprId, rightExprId; From 9bb1c857273bcbd912c331de06db43497523862b Mon Sep 17 00:00:00 2001 From: joaosimoes Date: Fri, 30 May 2014 17:18:09 +0100 Subject: [PATCH 14/39] =?UTF-8?q?O=20Jo=C3=A3o=20Nuno=20come=20tanta=20mer?= =?UTF-8?q?da?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- codeGen.c | 42 +++++++++++++++++++++++++++++------------- ijcompiler.y | 2 +- test.ijava | 11 +++-------- 3 files changed, 33 insertions(+), 22 deletions(-) diff --git a/codeGen.c b/codeGen.c index a15aad8..04daa45 100644 --- a/codeGen.c +++ b/codeGen.c @@ -285,19 +285,19 @@ ExprRet buildExpression(Expr* expr, int leftExpr, int rightExpr, char* operation if(expr->expr1->type == INTLIT_T && expr->expr2->type == INTLIT_T) { - printf("\t%%%d = %s i32 %d, %d\n", returnValue, operation, leftExpr, rightExpr); + printf("\t%%%d = %s i32 %d, %d\n\n", returnValue, operation, leftExpr, rightExpr); } else if(expr->expr1->type == INTLIT_T) { - printf("\t%%%d = %s i32 %d, %%%d\n", returnValue, operation, leftExpr, rightExpr); + printf("\t%%%d = %s i32 %d, %%%d\n\n", returnValue, operation, leftExpr, rightExpr); } else if(expr->expr2->type == INTLIT_T) { - printf("\t%%%d = %s i32 %%%d, %d\n", returnValue, operation, leftExpr, rightExpr); + printf("\t%%%d = %s i32 %%%d, %d\n\n", returnValue, operation, leftExpr, rightExpr); } else { - printf("\t%%%d = %s i32 %%%d, %%%d\n", returnValue, operation, leftExpr, rightExpr); + printf("\t%%%d = %s i32 %%%d, %%%d\n\n", returnValue, operation, leftExpr, rightExpr); } return returnValue; @@ -375,8 +375,6 @@ ExprRet genExpr(Expr* expr) printf("\tbr label %%andFalse%d\n\n", andNumber); printf("andFalse%d\n", andNumber); - - } else if(expr->op == OR_T) { @@ -393,30 +391,40 @@ ExprRet genExpr(Expr* expr) { exprId = genExpr(expr->expr1); returnValue = varNumber++; - printf("%%%d = add i32 0, %%%d", returnValue, exprId); + printf("%%%d = add i32 0, %%%d\n\n", returnValue, exprId); } else if(expr->op == MINUS) { exprId = genExpr(expr->expr1); returnValue = varNumber++; - printf("%%%d = sub i32 0, %%%d", returnValue, exprId); + printf("%%%d = sub i32 0, %%%d\n\n", returnValue, exprId); } else if(expr->op == NOT) { int tempId; exprId = genExpr(expr->expr1); returnValue = varNumber++; - printf("\t%%%d = icmp ne i32 %%%d, 0\n", returnValue, exprId); - printf("\t%%%d = xor i1 %%%d, true\n", varNumber, returnValue); - returnValue = varNumber++; - printf("\t%%%d = zext i1 %%%d to i32\n", varNumber, returnValue); + printf("\t%%%d = icmp ne i1 %%%d, 0\n", returnValue, exprId); + printf("\t%%%d = xor i1 %%%d, true\n\n", varNumber, returnValue); returnValue = varNumber++; } } else if(expr->type == ID_T) { + Type idType = getSymbolFromGlobal(expr->idOrLit); + char llvmType[MAX_LLVM_TYPE_SIZE]; + returnValue = varNumber++; - printf("\t%%%d = load i32* %%%s\n", returnValue, expr->idOrLit); + + if(idType != -1) { + getTypeLLVM(llvmType, idType); + printf("\t%%%d = load %s* @%s\n\n", returnValue, llvmType, expr->idOrLit); + } + else { + idType = getSymbolFromLocal(expr->idOrLit); + getTypeLLVM(llvmType, idType); + printf("\t%%%d = load %s* %%%s\n\n", returnValue, llvmType, expr->idOrLit); + } } else if(expr->type == INTLIT_T) { @@ -439,7 +447,15 @@ ExprRet genExpr(Expr* expr) } else if(expr->type == INDEX) { + char* llvmType[MAX_LLVM_TYPE_SIZE]; + leftExprId = genExpr(expr->expr1); + rightExprId = genExpr(expr->expr2); + + returnValue = varNumber++; + printf("\t%%%d = getelementptr inbounds i32* %%%d, i32 0, i32 %%%d\n", returnValue, leftExprId, rightExprId); + printf("\t%%%d = load i32* %%%d\n\n", varNumber, returnValue); + returnValue = varNumber++; } else if(expr->type == NEWINTARR) { diff --git a/ijcompiler.y b/ijcompiler.y index 7de83dc..84ea975 100644 --- a/ijcompiler.y +++ b/ijcompiler.y @@ -125,7 +125,7 @@ exprindex: ID {$$=insertExpr(ID_T, NULL, NULL, NULL | PARSEINT '(' ID '[' expr ']' ')' {$$=insertExpr(PARSEINT_T, $3, $5, NULL, $3, NULL);} | ID '(' args ')' {$$=insertExpr(CALL, NULL, NULL, NULL, $1, $3);} | ID '(' ')' {$$=insertExpr(CALL, NULL, NULL, NULL, $1, NULL);}; - | exprindex '[' expr ']' {$$=insertExpr(INDEX, NULL, $1, $3, NULL, NULL);} + | exprindex '[' expr ']' {$$=insertExpr(INDEX, NULL, $1, $3, NULL, NULL);} exprnotindex: NEW INT '[' expr ']' {$$=insertExpr(NEWINTARR, NULL, $4, NULL, NULL, NULL);} | NEW BOOL '[' expr ']' {$$=insertExpr(NEWBOOLARR, NULL, $4, NULL, NULL, NULL);} diff --git a/test.ijava b/test.ijava index 446b34a..2b65238 100644 --- a/test.ijava +++ b/test.ijava @@ -1,9 +1,9 @@ class gcd { - /*static int a, b, c; + static int a, b, c; static boolean d, e; static int[] f, g; - static boolean[] h, i, j;*/ + static boolean[] h, i, j; public static void main(String[] args) { @@ -32,12 +32,7 @@ class gcd } */ - boolean a , b , c; - - a = true; - b = false; - - c = a && b; + a = f[b + g[1]]; return; } From 509931325e40d26212ec7b27d965522a519e80c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Fri, 30 May 2014 17:47:24 +0100 Subject: [PATCH 15/39] More stuff. --- codeGen.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/codeGen.c b/codeGen.c index a15aad8..be3f3a1 100644 --- a/codeGen.c +++ b/codeGen.c @@ -33,6 +33,7 @@ void getRetTypeLLVM(char*, Type); void generateCode() { + ifNumber = whileNumber = andNumber = orNumber = 0; genPreamble(); DeclList* aux = myProgram->declList; @@ -85,29 +86,24 @@ void genGlobalVar(VarDecl* varDecl) void genMethod(MethodDecl* methodDecl) { + varNumber = indexNumber = 0; curFunctionType = methodDecl->type; - varNumber = ifNumber = whileNumber = indexNumber = andNumber = orNumber = 0; currentLocalTable = getLocalTable(methodDecl->id); char llvmType[MAX_LLVM_TYPE_SIZE]; - getRetTypeLLVM(llvmType, methodDecl->type); + if(strcmp(methodDecl->id, "main") == 0) + getRetTypeLLVM(llvmType, INT_T); + else + getRetTypeLLVM(llvmType, methodDecl->type); printf("define %s @%s(", llvmType, methodDecl->id); ParamList* aux = methodDecl->paramList; - if(aux != NULL) - { - getTypeLLVM(llvmType, aux->type); - if(aux->type == INTARRAY || aux->type == BOOLARRAY || aux->type == STRINGARRAY) - printf("i32 %%.%s, ", aux->id); - printf("%s %%%s", llvmType, aux->id); - aux = aux->next; - } for(; aux != NULL; aux = aux->next) { getTypeLLVM(llvmType, aux->type); - if(aux->type == INTARRAY || aux->type == BOOLARRAY || aux->type == STRINGARRAY) - printf(", i32 %%.%s", aux->id); + if(aux->type == STRINGARRAY) + printf("i32 %%.%s", aux->id); printf(", %s %%%s", llvmType, aux->id); } @@ -119,6 +115,9 @@ void genMethod(MethodDecl* methodDecl) genStmtList(methodDecl->stmtList); + if(strcmp(methodDecl->id, "main") == 0) + printf("ret i32 0\n"); + printf("}\n\n"); } @@ -220,7 +219,6 @@ void genStmt(Stmt* stmt) printf("%%%d = getelementptr inbounds [2 x i8*]* @%s, i32 0, i32 %%%d\n", varNumber++, stmt->id, varNumber); printf("%%%d = load i8** %%d\n", varNumber++, varNumber); printf("call i32 (i8*, ...)* @printf(i8* %%%d)\n", varNumber); - } } else if(stmt->type == STORE) From 251077e3325e30a484160b36ec0561bcef57d968 Mon Sep 17 00:00:00 2001 From: joaosimoes Date: Fri, 30 May 2014 17:52:46 +0100 Subject: [PATCH 16/39] Pila --- codeGen.c | 77 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 30 deletions(-) diff --git a/codeGen.c b/codeGen.c index b9bb1d5..adeff6f 100644 --- a/codeGen.c +++ b/codeGen.c @@ -25,7 +25,7 @@ void genMethod(MethodDecl*); void genLocalVar(VarDecl*); void genStmtList(StmtList*); void genStmt(Stmt*); -ExprRet buildExpression(Expr*,int,int,char*); +ExprRet buildExpression(Expr*,ExprRet,ExprRet,char*); ExprRet genExpr(Expr*); void getTypeLLVM(char*, Type); @@ -277,34 +277,37 @@ void genStmt(Stmt* stmt) } } -ExprRet buildExpression(Expr* expr, int leftExpr, int rightExpr, char* operation) +ExprRet buildExpression(Expr* expr, ExprRet leftExpr, ExprRet rightExpr, char* operation) { - int returnValue = varNumber++; + ExprRet returnValue; + + returnValue.tempVarNum = varNumber++; if(expr->expr1->type == INTLIT_T && expr->expr2->type == INTLIT_T) { - printf("\t%%%d = %s i32 %d, %d\n\n", returnValue, operation, leftExpr, rightExpr); + printf("\t%%%d = %s i32 %d, %d\n\n", returnValue.tempVarNum, operation, leftExpr.tempVarNum, rightExpr.tempVarNum); } else if(expr->expr1->type == INTLIT_T) { - printf("\t%%%d = %s i32 %d, %%%d\n\n", returnValue, operation, leftExpr, rightExpr); + printf("\t%%%d = %s i32 %d, %%%d\n\n", returnValue.tempVarNum, operation, leftExpr.tempVarNum, rightExpr.tempVarNum); } else if(expr->expr2->type == INTLIT_T) { - printf("\t%%%d = %s i32 %%%d, %d\n\n", returnValue, operation, leftExpr, rightExpr); + printf("\t%%%d = %s i32 %%%d, %d\n\n", returnValue.tempVarNum, operation, leftExpr.tempVarNum, rightExpr.tempVarNum); } else { - printf("\t%%%d = %s i32 %%%d, %%%d\n\n", returnValue, operation, leftExpr, rightExpr); + printf("\t%%%d = %s i32 %%%d, %%%d\n\n", returnValue.tempVarNum, operation, leftExpr.tempVarNum, rightExpr.tempVarNum); } + returnValue.type = INT_T; return returnValue; } ExprRet genExpr(Expr* expr) { - int returnValue; - int leftExprId, rightExprId; + ExprRet returnValue; + ExprRet leftExprId, rightExprId; if(expr->type == BINOP) { @@ -362,13 +365,13 @@ ExprRet genExpr(Expr* expr) leftExprId = genExpr(expr->expr1); tempId = varNumber++; - printf("%%%d = icmp ne i32 %%%d, 0", tempId, leftExprId); + printf("%%%d = icmp ne i32 %%%d, 0", tempId, leftExprId.tempVarNum); printf("\tbr i1 %%%d, label %%andTrue%d, label %%andFalse%d\n\n", tempId, andNumber, andNumber); printf("andTrue%d:\n", andNumber); rightExprId = genExpr(expr->expr2); - printf("\t%%%d = icmp ne i32 %%%d, 0\n", varNumber, rightExprId); + printf("\t%%%d = icmp ne i32 %%%d, 0\n", varNumber, rightExprId.tempVarNum); tempId = varNumber++; printf("\tbr label %%andFalse%d\n\n", andNumber); @@ -383,28 +386,31 @@ ExprRet genExpr(Expr* expr) } else if(expr->type == UNOP) { - int exprId; + ExprRet exprId; if(expr->op == PLUS) //Not necessary { exprId = genExpr(expr->expr1); - returnValue = varNumber++; - printf("%%%d = add i32 0, %%%d\n\n", returnValue, exprId); + returnValue.tempVarNum = varNumber++; + printf("%%%d = add i32 0, %%%d\n\n", returnValue.tempVarNum, exprId.tempVarNum); + returnValue.type = INT_T; } else if(expr->op == MINUS) { exprId = genExpr(expr->expr1); - returnValue = varNumber++; - printf("%%%d = sub i32 0, %%%d\n\n", returnValue, exprId); + returnValue.tempVarNum = varNumber++; + printf("%%%d = sub i32 0, %%%d\n\n", returnValue.tempVarNum, exprId.tempVarNum); + returnValue.type = INT_T; } else if(expr->op == NOT) { int tempId; exprId = genExpr(expr->expr1); - returnValue = varNumber++; - printf("\t%%%d = icmp ne i1 %%%d, 0\n", returnValue, exprId); - printf("\t%%%d = xor i1 %%%d, true\n\n", varNumber, returnValue); - returnValue = varNumber++; + returnValue.tempVarNum = varNumber++; + printf("\t%%%d = icmp ne i1 %%%d, 0\n", returnValue.tempVarNum, exprId.tempVarNum); + printf("\t%%%d = xor i1 %%%d, true\n\n", varNumber, returnValue.tempVarNum); + returnValue.tempVarNum = varNumber++; + returnValue.type = BOOL_T; } } else if(expr->type == ID_T) @@ -412,30 +418,33 @@ ExprRet genExpr(Expr* expr) Type idType = getSymbolFromGlobal(expr->idOrLit); char llvmType[MAX_LLVM_TYPE_SIZE]; - returnValue = varNumber++; + returnValue.tempVarNum = varNumber++; if(idType != -1) { getTypeLLVM(llvmType, idType); - printf("\t%%%d = load %s* @%s\n\n", returnValue, llvmType, expr->idOrLit); + printf("\t%%%d = load %s* @%s\n\n", returnValue.tempVarNum, llvmType, expr->idOrLit); } else { idType = getSymbolFromLocal(expr->idOrLit); getTypeLLVM(llvmType, idType); - printf("\t%%%d = load %s* %%%s\n\n", returnValue, llvmType, expr->idOrLit); + printf("\t%%%d = load %s* %%%s\n\n", returnValue.tempVarNum, llvmType, expr->idOrLit); } + returnValue.type = idType; } else if(expr->type == INTLIT_T) { - returnValue = (int) strtol(expr->idOrLit, NULL, 0); + returnValue.tempVarNum = (int) strtol(expr->idOrLit, NULL, 0); + returnValue.type = INT_T; } else if(expr->type == BOOLLIT_T) { if(strcmp(expr->idOrLit, "true")) { - return 1; + returnValue.tempVarNum = 1; } else { - return 0; + returnValue.tempVarNum = 1; } + returnValue.type = BOOL_T; } else if(expr->type == CALL) { @@ -450,10 +459,18 @@ ExprRet genExpr(Expr* expr) leftExprId = genExpr(expr->expr1); rightExprId = genExpr(expr->expr2); - returnValue = varNumber++; - printf("\t%%%d = getelementptr inbounds i32* %%%d, i32 0, i32 %%%d\n", returnValue, leftExprId, rightExprId); - printf("\t%%%d = load i32* %%%d\n\n", varNumber, returnValue); - returnValue = varNumber++; + returnValue.tempVarNum = varNumber++; + if(leftExprId.type == INTARRAY) { + printf("\t%%%d = getelementptr inbounds i32* %%%d, i32 0, i32 %%%d\n", returnValue.tempVarNum, leftExprId.tempVarNum, rightExprId.tempVarNum); + printf("\t%%%d = load i32* %%%d\n\n", varNumber, returnValue.tempVarNum); + returnValue.type = INT_T; + } + else { + printf("\t%%%d = getelementptr inbounds i1* %%%d, i32 0, i32 %%%d\n", returnValue.tempVarNum, leftExprId.tempVarNum, rightExprId.tempVarNum); + printf("\t%%%d = load i1* %%%d\n\n", varNumber, returnValue.tempVarNum); + returnValue.type = BOOL_T; + } + returnValue.tempVarNum = varNumber++; } else if(expr->type == NEWINTARR) { From 70fc1d4f3a33e725f8bdadfe237a046170372e9b Mon Sep 17 00:00:00 2001 From: joaosimoes Date: Fri, 30 May 2014 17:53:07 +0100 Subject: [PATCH 17/39] Report commit --- report/report.tex | 58 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 report/report.tex diff --git a/report/report.tex b/report/report.tex new file mode 100644 index 0000000..789e9dc --- /dev/null +++ b/report/report.tex @@ -0,0 +1,58 @@ +% !TeX spellcheck = pt_PT +\documentclass[11pt,a4paper]{article} +\usepackage{etex} +\reserveinserts{28} + +\usepackage[utf8]{inputenc} + +\usepackage{hyperref} +\usepackage{amsthm} +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{amsfonts} +\usepackage[portuguese]{babel} +\usepackage{pictex} +\usepackage[dvips]{graphics} +\usepackage{enumerate} +\usepackage{color} +\usepackage[usenames,dvipsnames]{xcolor} + +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{amsfonts} +\usepackage[portuguese]{babel} +\usepackage{pictex} +\usepackage[dvips]{graphics} +\usepackage{enumerate} +\usepackage{color} +\usepackage{indentfirst} +\usepackage{listings} +\usepackage{tabularx} +\usepackage{multirow} +\usepackage{float} +\usepackage{makeidx} + +\usepackage{graphicx} +\setlength{\parindent}{1cm} +\title{\bf{Compiladores - Projecto}\vspace{50mm}\\iJava\vspace{80mm}} +\author{ +João Ricardo Lourenço, Nº 2011151194\\ +Joaquim Pedro Bento Gonçalves Pratas Leitão, Nº 2011150072} +\makeindex +\begin{document} + +\maketitle +\centerline{\textbf{Relatório}} +\pagebreak + +\printindex + +\renewcommand*\contentsname{Índice} +\tableofcontents + +\pagebreak + +\section{Inrodução} + + +\end{document} \ No newline at end of file From d5b8f13191834a2eb14add4d5169b3dfd3beabf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Fri, 30 May 2014 18:37:33 +0100 Subject: [PATCH 18/39] Printing booleans and integers is now working. --- codeGen.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/codeGen.c b/codeGen.c index adeff6f..49769f3 100644 --- a/codeGen.c +++ b/codeGen.c @@ -53,7 +53,7 @@ void genPreamble() printf("\n"); printf("@str.d = private unnamed_addr constant [4 x i8] c\"%%d\\0A\\00\"\n"); printf("@str.f = private unnamed_addr constant [7 x i8] c\"false\\0A\\00\"\n"); - printf("@str.f = private unnamed_addr constant [7 x i8] c\"true\\0A\\00\\00\"\n"); + printf("@str.t = private unnamed_addr constant [7 x i8] c\"true\\0A\\00\\00\"\n"); printf("@str.bools = global [2 x i8*] [i8* getelementptr inbounds ([7 x i8]* @str.f, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8]* @str.t, i32 0, i32 0)]\n"); printf("\n"); } @@ -86,7 +86,7 @@ void genGlobalVar(VarDecl* varDecl) void genMethod(MethodDecl* methodDecl) { - varNumber = indexNumber = 0; + varNumber = indexNumber = 1; curFunctionType = methodDecl->type; currentLocalTable = getLocalTable(methodDecl->id); @@ -211,15 +211,16 @@ void genStmt(Stmt* stmt) ExprRet ret = genExpr(stmt->expr1); if(ret.type == INT_T) { - printf("call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8]* @.str2, i32 0, i32 0), i32 %%%d)\n", ret.tempVarNum); + printf("\tcall i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8]* @str.d, i32 0, i32 0), i32 %%%d)\n", ret.tempVarNum); } else if(ret.type == BOOL_T) { - printf("%%%d = zext i1 %%%d to i32\n", varNumber++, ret.tempVarNum); - printf("%%%d = getelementptr inbounds [2 x i8*]* @%s, i32 0, i32 %%%d\n", varNumber++, stmt->id, varNumber); - printf("%%%d = load i8** %%d\n", varNumber++, varNumber); - printf("call i32 (i8*, ...)* @printf(i8* %%%d)\n", varNumber); + printf("\t%%%d = zext i1 %%%d to i32\n", varNumber++, ret.tempVarNum); + printf("\t%%%d = getelementptr inbounds [2 x i8*]* @str.bools, i32 0, i32 %%%d\n", varNumber++, varNumber -1); + printf("\t%%%d = load i8** %%%d\n", varNumber++, varNumber -1); + printf("\tcall i32 (i8*, ...)* @printf(i8* %%%d)\n\n", varNumber -1); } + varNumber++; } else if(stmt->type == STORE) { @@ -438,11 +439,11 @@ ExprRet genExpr(Expr* expr) } else if(expr->type == BOOLLIT_T) { - if(strcmp(expr->idOrLit, "true")) { + if(strcmp(expr->idOrLit, "true") == 0) { returnValue.tempVarNum = 1; } else { - returnValue.tempVarNum = 1; + returnValue.tempVarNum = 0; } returnValue.type = BOOL_T; } From 45da49b3c79a81de72afe4a9dc0a642c8c1597bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Fri, 30 May 2014 19:47:21 +0100 Subject: [PATCH 19/39] Parsing integers passed from the command line is now working. Literals are no longer written directly in commands, but stored in temporary variables. --- codeGen.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/codeGen.c b/codeGen.c index 49769f3..e59ae32 100644 --- a/codeGen.c +++ b/codeGen.c @@ -211,7 +211,7 @@ void genStmt(Stmt* stmt) ExprRet ret = genExpr(stmt->expr1); if(ret.type == INT_T) { - printf("\tcall i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8]* @str.d, i32 0, i32 0), i32 %%%d)\n", ret.tempVarNum); + printf("\tcall i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8]* @str.d, i32 0, i32 0), i32 %%%d)\n\n", ret.tempVarNum); } else if(ret.type == BOOL_T) { @@ -241,14 +241,7 @@ void genStmt(Stmt* stmt) getTypeLLVM(llvmType, varType); - if(stmt->expr1->type == INTLIT_T || stmt->expr1->type == BOOLLIT_T) - { - printf("\tstore %s %d, %s* %s%s\n", llvmType, exprVarNumber, llvmType, varDeclSymbol, stmt->id); - } - else - { - printf("\tstore %s %%%d, %s* %s%s\n", llvmType, exprVarNumber, llvmType, varDeclSymbol, stmt->id); - } + printf("\tstore %s %%%d, %s* %s%s\n", llvmType, exprVarNumber, llvmType, varDeclSymbol, stmt->id); } else if(stmt->type == STOREARRAY) { @@ -434,25 +427,35 @@ ExprRet genExpr(Expr* expr) } else if(expr->type == INTLIT_T) { - returnValue.tempVarNum = (int) strtol(expr->idOrLit, NULL, 0); + printf("\t%%%d = add i32 0, %d\n", varNumber++, (int) strtol(expr->idOrLit, NULL, 0)); + returnValue.tempVarNum = varNumber -1; returnValue.type = INT_T; } else if(expr->type == BOOLLIT_T) { if(strcmp(expr->idOrLit, "true") == 0) { - returnValue.tempVarNum = 1; + printf("\t%%%d = add i1 0, 1\n", varNumber); } else { - returnValue.tempVarNum = 0; - } + printf("\t%%%d = add i1 0, 0\n", varNumber); + } + returnValue.tempVarNum = varNumber++; returnValue.type = BOOL_T; } else if(expr->type == CALL) { } - else if(expr->type == PARSEINT_T) { + else if(expr->type == PARSEINT_T) + { + int indexVarNumber = genExpr(expr->expr1).tempVarNum; + printf("\t%%%d = getelementptr inbounds i8** %%%s, i32 %%%d\n", varNumber++, expr->idOrLit, indexVarNumber); + printf("\t%%%d = load i8** %%%d\n", varNumber++, varNumber -1); + printf("\t%%%d = call i32 @atoi(i8* %%%d) nounwind readonly\n\n", varNumber++, varNumber -1); + + returnValue.tempVarNum = varNumber -1; + returnValue.type = INT_T; } else if(expr->type == INDEX) { char* llvmType[MAX_LLVM_TYPE_SIZE]; From 3860cbc58a9b647099983b1fa4ae4c91d2421241 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Fri, 30 May 2014 23:32:45 +0100 Subject: [PATCH 20/39] Corrected some bugs. --- codeGen.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/codeGen.c b/codeGen.c index e59ae32..fbca1dd 100644 --- a/codeGen.c +++ b/codeGen.c @@ -409,20 +409,23 @@ ExprRet genExpr(Expr* expr) } else if(expr->type == ID_T) { - Type idType = getSymbolFromGlobal(expr->idOrLit); char llvmType[MAX_LLVM_TYPE_SIZE]; + Type idType = getSymbolFromLocal(expr->idOrLit); returnValue.tempVarNum = varNumber++; - if(idType != -1) { + if(idType != -1) + { getTypeLLVM(llvmType, idType); - printf("\t%%%d = load %s* @%s\n\n", returnValue.tempVarNum, llvmType, expr->idOrLit); + printf("\t%%%d = load %s* %%%s\n\n", returnValue.tempVarNum, llvmType, expr->idOrLit); } - else { - idType = getSymbolFromLocal(expr->idOrLit); + else + { + idType = getSymbolFromGlobal(expr->idOrLit); getTypeLLVM(llvmType, idType); - printf("\t%%%d = load %s* %%%s\n\n", returnValue.tempVarNum, llvmType, expr->idOrLit); + printf("\t%%%d = load %s* @%s\n\n", returnValue.tempVarNum, llvmType, expr->idOrLit); } + returnValue.type = idType; } else if(expr->type == INTLIT_T) From d1af16af3ad5858bf0f0a15e0b03f5875e593d1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Sat, 31 May 2014 16:00:21 +0100 Subject: [PATCH 21/39] Stuff. --- codeGen.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/codeGen.c b/codeGen.c index fbca1dd..e786689 100644 --- a/codeGen.c +++ b/codeGen.c @@ -90,6 +90,7 @@ void genMethod(MethodDecl* methodDecl) curFunctionType = methodDecl->type; currentLocalTable = getLocalTable(methodDecl->id); + //If generating main, adapt the type char llvmType[MAX_LLVM_TYPE_SIZE]; if(strcmp(methodDecl->id, "main") == 0) getRetTypeLLVM(llvmType, INT_T); @@ -102,21 +103,37 @@ void genMethod(MethodDecl* methodDecl) for(; aux != NULL; aux = aux->next) { getTypeLLVM(llvmType, aux->type); - if(aux->type == STRINGARRAY) + if(aux->type == STRINGARRAY) //If generating main, adapt the parameters printf("i32 %%.%s", aux->id); printf(", %s %%%s", llvmType, aux->id); } printf(")\n{\n"); + //Generate variable definition code VarDeclList* aux2 = methodDecl->varDeclList; for(; aux2 != NULL; aux2 = aux2->next) genLocalVar(aux2->varDecl); + //Generate statements code genStmtList(methodDecl->stmtList); + //Add a default return if(strcmp(methodDecl->id, "main") == 0) - printf("ret i32 0\n"); + printf("\tret i32 0\n"); + else + { + if(methodDecl->type == VOID_T) + printf("\tret void"); + else if(methodDecl->type == INT_T) + printf("\tret i32 0"); + else if(methodDecl->type == BOOL_T) + printf("\tret i1 0"); + else if(methodDecl->type == INTARRAY) + printf("\tret i32* null"); + else if(methodDecl->type == BOOLARRAY) + printf("\tret i1* null"); + } printf("}\n\n"); } @@ -453,7 +470,8 @@ ExprRet genExpr(Expr* expr) { int indexVarNumber = genExpr(expr->expr1).tempVarNum; - printf("\t%%%d = getelementptr inbounds i8** %%%s, i32 %%%d\n", varNumber++, expr->idOrLit, indexVarNumber); + printf("\t%%%d = add i32 %%%d, 1\n", varNumber++, indexVarNumber); + printf("\t%%%d = getelementptr inbounds i8** %%%s, i32 %%%d\n", varNumber++, expr->idOrLit, varNumber -1); printf("\t%%%d = load i8** %%%d\n", varNumber++, varNumber -1); printf("\t%%%d = call i32 @atoi(i8* %%%d) nounwind readonly\n\n", varNumber++, varNumber -1); From 2a18d278716f56f033e9c35f07afe9dfda40fb4f Mon Sep 17 00:00:00 2001 From: joaosimoes Date: Sat, 31 May 2014 16:03:20 +0100 Subject: [PATCH 22/39] Update report --- report/report.tex | 81 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 68 insertions(+), 13 deletions(-) diff --git a/report/report.tex b/report/report.tex index 789e9dc..355249f 100644 --- a/report/report.tex +++ b/report/report.tex @@ -34,25 +34,80 @@ \usepackage{graphicx} \setlength{\parindent}{1cm} -\title{\bf{Compiladores - Projecto}\vspace{50mm}\\iJava\vspace{80mm}} -\author{ -João Ricardo Lourenço, Nº 2011151194\\ -Joaquim Pedro Bento Gonçalves Pratas Leitão, Nº 2011150072} -\makeindex -\begin{document} -\maketitle -\centerline{\textbf{Relatório}} -\pagebreak -\printindex +%---------------------------------------------------------------------------------------- +% TITLE PAGE +%---------------------------------------------------------------------------------------- + +\newcommand*{\titleGM}{\begingroup % Create the command for including the title page in the document +\hbox{ % Horizontal box +\hspace*{0.2\textwidth} % Whitespace to the left of the title page +\rule{1pt}{\textheight} % Vertical line +\hspace*{0.05\textwidth} % Whitespace between the vertical line and title page text +\parbox[b]{0.75\textwidth}{ % Paragraph box which restricts text to less than the width of the page + +{\noindent\Huge\bfseries Compilador \\[0.5\baselineskip] iJava}\\[2\baselineskip] % Title +{\large \textit{Projecto da Cadeira de Compiladores}}\\[4\baselineskip] % Tagline or further description +{\Large \textsc{JOÃO OLIVEIRA - 2010129856}} \\ \\ % Author name +{\Large \textsc{JOÃO SIMOES - 2011150045}} % Author name -\renewcommand*\contentsname{Índice} -\tableofcontents +\vspace{0.5\textheight} % Whitespace between the title block and the publisher +{\noindent FCTUC - Departamento de Engenharia Informática}\\[\baselineskip] % Publisher and logo +}} +\endgroup} + +\begin{document} -\pagebreak +\titleGM \section{Inrodução} +Este projecto consistiu no desenvolvimento de um compilado para a linguagem $iJava$. Esta línguagem apresenta diversas caracteristicas específicas a serem descritas de seguida. + +Uma das características prende-se com o facto de cada programa conter uma única classe. Esta classe pode ter incluídas variáveis estáticas e métodos \emph{public static}, assim como variáveis locais. Para além disto, é mandatória a presença de um método \emph{main}, método este a ser chamado aquando da execução do programa. Este mesmo método tem como parâmetro, por defeito, um array de \emph{Strings}, contendo os parâmetos de entrada. + +É ainda possível implementar expressões aritméticas e lógicas, assim como operações de atribuição, relacionais e controlo. (\emph{if-else} e \emph{while} ) + +Relativamente aos tipos de variáveis existentes na linguagem, é possivel usar varíaveis do tipo \emph{Integer} e \emph{Boolean}. É ainda possível criar arrays unidimensionais dos tipo apresentados anteriormente. + +Por fim, o desenvolvimento do compilador deu-se em várias fases bem definidas, fases estas que apresentamos de seguida. + +\begin{description} + \item[Fase 1] Análise Lexical + \begin{itemize} + \item Identificação dos tokens aceites pela linguagem e tradução dos mesmo para a linguagem \emph{LEX}. + \end{itemize} + \item[Fase 2] Análise Sintática + \begin{itemize} + \item Tradução da gramática dada para a linguagem \emph{YACC} e resolução de conflitos e ambiguidades; + \item Estruturas de dados a serem criadas de forma a representar os nós da Árvore de Sintaxe Abstracta; + \item Definição de enumerações de forma a representar os diversos tipos de operações, expressões, \emph{statments}, entre outros; + \item Implementação das funções responsáveis pela construção da AST; + \item Deteção de erros sintáticos. + \end{itemize} + \item[Fase 3] Análise Semântica + \begin{itemize} + \item Definição das estruturas de dados a serem utilizadas para a criação da tabela de símbolos; + \item Implementação dos procedimentos responsáveis pelas inserções na tabela de símbolos; + \item Detecção de erros ao nível semântico. + \end{itemize} + \item[Fase 4] Geração de código intermédio + \begin{itemize} + \item Implemententação das funções responsáveis pela geração de código \emph{LLVM}. + \end{itemize} +\end{description} + +\newpage + +\section{Análise Léxical} + +A primeira fase da construção do compilador consistiu na definição dos tokens aceites pela linguagem, através de expressões regulares, sendo internamente construído pelo \emph{LEX} um autómato. + + + + + + \end{document} \ No newline at end of file From 656b5395fe25aeb2104e7a27f09d7b631dd5e6eb Mon Sep 17 00:00:00 2001 From: joaosimoes Date: Sat, 31 May 2014 16:11:19 +0100 Subject: [PATCH 23/39] Update "buildExpression" function --- codeGen.c | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/codeGen.c b/codeGen.c index e786689..265e5ff 100644 --- a/codeGen.c +++ b/codeGen.c @@ -291,26 +291,15 @@ void genStmt(Stmt* stmt) ExprRet buildExpression(Expr* expr, ExprRet leftExpr, ExprRet rightExpr, char* operation) { ExprRet returnValue; + char llvmType[MAX_LLVM_TYPE_SIZE]; returnValue.tempVarNum = varNumber++; - if(expr->expr1->type == INTLIT_T && expr->expr2->type == INTLIT_T) - { - printf("\t%%%d = %s i32 %d, %d\n\n", returnValue.tempVarNum, operation, leftExpr.tempVarNum, rightExpr.tempVarNum); - } - else if(expr->expr1->type == INTLIT_T) - { - printf("\t%%%d = %s i32 %d, %%%d\n\n", returnValue.tempVarNum, operation, leftExpr.tempVarNum, rightExpr.tempVarNum); - } - else if(expr->expr2->type == INTLIT_T) - { - printf("\t%%%d = %s i32 %%%d, %d\n\n", returnValue.tempVarNum, operation, leftExpr.tempVarNum, rightExpr.tempVarNum); - } - else - { - printf("\t%%%d = %s i32 %%%d, %%%d\n\n", returnValue.tempVarNum, operation, leftExpr.tempVarNum, rightExpr.tempVarNum); - } - returnValue.type = INT_T; + llvmType = getTypeLLVM(llvmType, leftExpr.type); + + printf("\t%%%d = %s %s %%%d, %%%d\n\n", returnValue.tempVarNum, operation, llvmType, leftExpr.tempVarNum, rightExpr.tempVarNum); + + returnValue.type = leftExpr.type; return returnValue; } From 7d643ca25ca097d676781441b94c256e122558dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Sat, 31 May 2014 19:30:04 +0100 Subject: [PATCH 24/39] Implemented && and || with short circuiting. Must still test short circuiting. --- codeGen.c | 119 +++++++++++++++++++++++++++++++++++++----------------- symbols.c | 12 ++++++ symbols.h | 1 + 3 files changed, 94 insertions(+), 38 deletions(-) diff --git a/codeGen.c b/codeGen.c index 265e5ff..c46f8f4 100644 --- a/codeGen.c +++ b/codeGen.c @@ -16,6 +16,7 @@ typedef struct _ExprRet extern Class* myProgram; extern ClassTable* symbolsTable; extern MethodTable* currentLocalTable; +char* argCountName; Type curFunctionType; int varNumber, ifNumber, whileNumber, indexNumber, andNumber, orNumber; @@ -104,12 +105,26 @@ void genMethod(MethodDecl* methodDecl) { getTypeLLVM(llvmType, aux->type); if(aux->type == STRINGARRAY) //If generating main, adapt the parameters - printf("i32 %%.%s", aux->id); + { + printf("i32 %%%s.len", aux->id); + argCountName = aux->id; + } printf(", %s %%%s", llvmType, aux->id); } printf(")\n{\n"); + //Save arguments to stack + MethodTable* localTable = getLocalTable(methodDecl->id); + MethodTableEntry* aux3 = localTable->entries; + for(; aux3 != NULL; aux3 = aux3->next) + if(aux3->isParam) + { + getTypeLLVM(llvmType, aux3->type); + printf("%%%s.param = alloca %s\n", aux3->id, llvmType); + printf("store %s %%%s, %s* %%%s.param\n", llvmType, aux3->id, llvmType, aux3->id); + } + //Generate variable definition code VarDeclList* aux2 = methodDecl->varDeclList; for(; aux2 != NULL; aux2 = aux2->next) @@ -211,6 +226,7 @@ void genStmt(Stmt* stmt) } else if(stmt->type == WHILE_T) { + printf("\tbr label %%whilestart%d\n\n", whileNumber); printf("whilestart%d:\n", whileNumber); int exprVarNumber = genExpr(stmt->expr1).tempVarNum; printf("\tbr i1 %%%d, label %%whiledo%d, label %%whileend%d\n\n", exprVarNumber, whileNumber, whileNumber); @@ -218,6 +234,7 @@ void genStmt(Stmt* stmt) printf("whiledo%d:\n", whileNumber); if(stmt->stmt1 != NULL) genStmt(stmt->stmt1); + printf("\tbr label %%whilestart%d\n", whileNumber); printf("\nwhileend%d:\n", whileNumber); @@ -262,7 +279,7 @@ void genStmt(Stmt* stmt) } else if(stmt->type == STOREARRAY) { - int isLocal = 1; + /*int isLocal = 1; char varDeclSymbol[5]; char llvmType[MAX_LLVM_TYPE_SIZE]; char llvmType2[MAX_LLVM_TYPE_SIZE]; @@ -284,7 +301,7 @@ void genStmt(Stmt* stmt) strcpy(llvmType2, llvmType); llvmType2[strlen(llvmType2)-1] = '\0'; - printf("\tstore %s %%%d, %s %s%s\n", llvmType2, exprVarNumber, llvmType, varDeclSymbol, stmt->id); + printf("\tstore %s %%%d, %s %s%s\n", llvmType2, exprVarNumber, llvmType, varDeclSymbol, stmt->id);*/ } } @@ -293,14 +310,13 @@ ExprRet buildExpression(Expr* expr, ExprRet leftExpr, ExprRet rightExpr, char* o ExprRet returnValue; char llvmType[MAX_LLVM_TYPE_SIZE]; - returnValue.tempVarNum = varNumber++; + getTypeLLVM(llvmType, leftExpr.type); - llvmType = getTypeLLVM(llvmType, leftExpr.type); + returnValue.tempVarNum = varNumber++; + returnValue.type = leftExpr.type; printf("\t%%%d = %s %s %%%d, %%%d\n\n", returnValue.tempVarNum, operation, llvmType, leftExpr.tempVarNum, rightExpr.tempVarNum); - returnValue.type = leftExpr.type; - return returnValue; } @@ -337,49 +353,72 @@ ExprRet genExpr(Expr* expr) else if(expr->op == LESSER) { returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp slt"); + returnValue.type = BOOL_T; } else if(expr->op == GREATER) { returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp sgt"); + returnValue.type = BOOL_T; } else if(expr->op == LEQ) { returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp sle"); + returnValue.type = BOOL_T; } else if(expr->op == GEQ) { returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp sge"); + returnValue.type = BOOL_T; } else if(expr->op == DIF) { returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp ne"); + returnValue.type = BOOL_T; } else if(expr->op == EQ) { returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp eq"); + returnValue.type = BOOL_T; } else if(expr->op == AND_T) { - int tempId; + printf("\tbr label %%andstart%d\n\n", andNumber); + printf("andstart%d:\n", andNumber); leftExprId = genExpr(expr->expr1); + printf("\t%%%d = icmp eq i1 0, %%%d\n", varNumber++, leftExprId.tempVarNum); + printf("\tbr i1 %%%d, label %%andend%d, label %%anddo%d\n", varNumber-1, andNumber, andNumber); - tempId = varNumber++; - printf("%%%d = icmp ne i32 %%%d, 0", tempId, leftExprId.tempVarNum); - - printf("\tbr i1 %%%d, label %%andTrue%d, label %%andFalse%d\n\n", tempId, andNumber, andNumber); - - printf("andTrue%d:\n", andNumber); + printf("anddo%d:\n", andNumber); rightExprId = genExpr(expr->expr2); - printf("\t%%%d = icmp ne i32 %%%d, 0\n", varNumber, rightExprId.tempVarNum); - tempId = varNumber++; - printf("\tbr label %%andFalse%d\n\n", andNumber); + printf("\tbr label %%andend%d\n\n", andNumber); + + printf("andend%d:\n", andNumber); + printf("\t%%%d = phi i1 [ false, %%andstart%d ], [ %%%d, %%anddo%d ]\n", varNumber++, andNumber, rightExprId.tempVarNum, andNumber); - printf("andFalse%d\n", andNumber); + andNumber++; + returnValue.tempVarNum = varNumber -1; + returnValue.type = BOOL_T; } else if(expr->op == OR_T) { + printf("\tbr label %%orstart%d\n\n", orNumber); + printf("orstart%d:\n", orNumber); + + leftExprId = genExpr(expr->expr1); + printf("\t%%%d = icmp eq i1 1, %%%d\n", varNumber++, leftExprId.tempVarNum); + printf("\tbr i1 %%%d, label %%orend%d, label %%ordo%d\n", varNumber-1, orNumber, orNumber); + + printf("ordo%d:\n", orNumber); + rightExprId = genExpr(expr->expr2); + printf("\tbr label %%orend%d\n\n", orNumber); + + printf("orend%d:\n", orNumber); + printf("\t%%%d = phi i1 [ true, %%orstart%d ], [ %%%d, %%ordo%d ]\n", varNumber++, orNumber, rightExprId.tempVarNum, orNumber); + orNumber++; + returnValue.tempVarNum = varNumber -1; + returnValue.type = BOOL_T; } return returnValue; @@ -392,14 +431,14 @@ ExprRet genExpr(Expr* expr) { exprId = genExpr(expr->expr1); returnValue.tempVarNum = varNumber++; - printf("%%%d = add i32 0, %%%d\n\n", returnValue.tempVarNum, exprId.tempVarNum); + printf("\t%%%d = add i32 0, %%%d\n\n", returnValue.tempVarNum, exprId.tempVarNum); returnValue.type = INT_T; } else if(expr->op == MINUS) { exprId = genExpr(expr->expr1); returnValue.tempVarNum = varNumber++; - printf("%%%d = sub i32 0, %%%d\n\n", returnValue.tempVarNum, exprId.tempVarNum); + printf("\t%%%d = sub i32 0, %%%d\n\n", returnValue.tempVarNum, exprId.tempVarNum); returnValue.type = INT_T; } else if(expr->op == NOT) @@ -412,6 +451,22 @@ ExprRet genExpr(Expr* expr) returnValue.tempVarNum = varNumber++; returnValue.type = BOOL_T; } + else if(expr->op == DOTLENGTH_T) + { + leftExprId = genExpr(expr->expr1); + + if(leftExprId.type == STRINGARRAY) + { + printf("\t%%%d = sub i32 %%%s.len, 1\n", varNumber++, argCountName); + } + else + { + //TODO: implement this! + } + + returnValue.tempVarNum = varNumber -1; + returnValue.type = INT_T; + } } else if(expr->type == ID_T) { @@ -423,7 +478,10 @@ ExprRet genExpr(Expr* expr) if(idType != -1) { getTypeLLVM(llvmType, idType); - printf("\t%%%d = load %s* %%%s\n\n", returnValue.tempVarNum, llvmType, expr->idOrLit); + if(isLocalSymbolParam(expr->idOrLit)) + printf("\t%%%d = load %s* %%%s.param\n\n", returnValue.tempVarNum, llvmType, expr->idOrLit); + else + printf("\t%%%d = load %s* %%%s\n\n", returnValue.tempVarNum, llvmType, expr->idOrLit); } else { @@ -467,24 +525,9 @@ ExprRet genExpr(Expr* expr) returnValue.tempVarNum = varNumber -1; returnValue.type = INT_T; } - else if(expr->type == INDEX) { - char* llvmType[MAX_LLVM_TYPE_SIZE]; - - leftExprId = genExpr(expr->expr1); - rightExprId = genExpr(expr->expr2); + else if(expr->type == INDEX) + { - returnValue.tempVarNum = varNumber++; - if(leftExprId.type == INTARRAY) { - printf("\t%%%d = getelementptr inbounds i32* %%%d, i32 0, i32 %%%d\n", returnValue.tempVarNum, leftExprId.tempVarNum, rightExprId.tempVarNum); - printf("\t%%%d = load i32* %%%d\n\n", varNumber, returnValue.tempVarNum); - returnValue.type = INT_T; - } - else { - printf("\t%%%d = getelementptr inbounds i1* %%%d, i32 0, i32 %%%d\n", returnValue.tempVarNum, leftExprId.tempVarNum, rightExprId.tempVarNum); - printf("\t%%%d = load i1* %%%d\n\n", varNumber, returnValue.tempVarNum); - returnValue.type = BOOL_T; - } - returnValue.tempVarNum = varNumber++; } else if(expr->type == NEWINTARR) { diff --git a/symbols.c b/symbols.c index e601fee..57eeeb4 100644 --- a/symbols.c +++ b/symbols.c @@ -244,6 +244,18 @@ MethodTable* getLocalTable(char* id) return NULL; } +int isLocalSymbolParam(char* id) +{ + MethodTableEntry* aux = currentLocalTable->entries; + for(; aux != NULL; aux = aux->next) + { + if(aux->id && (strcmp(id, aux->id) == 0) && aux->isParam) + return 1; + } + + return 0; +} + void errorAlreadyDefined(char* id) { printf("Symbol %s already defined\n", id); diff --git a/symbols.h b/symbols.h index d2a2603..34d9a7c 100644 --- a/symbols.h +++ b/symbols.h @@ -45,6 +45,7 @@ Type getSymbol(char*); Type getSymbolFromGlobal(char*); Type getSymbolFromLocal(char*); Type getSymbolFromLocalOrGlobal(char*); +int isLocalSymbolParam(char*); MethodTable* getLocalTable(char*); #endif From 30ab9ac8f2fe6738686af030324536242e72a0d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Sat, 31 May 2014 20:23:48 +0100 Subject: [PATCH 25/39] Method calling implemented. --- codeGen.c | 62 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 11 deletions(-) diff --git a/codeGen.c b/codeGen.c index c46f8f4..dc6e801 100644 --- a/codeGen.c +++ b/codeGen.c @@ -30,7 +30,6 @@ ExprRet buildExpression(Expr*,ExprRet,ExprRet,char*); ExprRet genExpr(Expr*); void getTypeLLVM(char*, Type); -void getRetTypeLLVM(char*, Type); void generateCode() { @@ -94,13 +93,25 @@ void genMethod(MethodDecl* methodDecl) //If generating main, adapt the type char llvmType[MAX_LLVM_TYPE_SIZE]; if(strcmp(methodDecl->id, "main") == 0) - getRetTypeLLVM(llvmType, INT_T); + getTypeLLVM(llvmType, INT_T); else - getRetTypeLLVM(llvmType, methodDecl->type); + getTypeLLVM(llvmType, methodDecl->type); printf("define %s @%s(", llvmType, methodDecl->id); ParamList* aux = methodDecl->paramList; + if(aux != NULL) + { + getTypeLLVM(llvmType, aux->type); + if(aux->type == STRINGARRAY) //If generating main, adapt the parameters + { + printf("i32 %%%s.len, ", aux->id); + argCountName = aux->id; + } + printf("%s %%%s", llvmType, aux->id); + + aux = aux->next; + } for(; aux != NULL; aux = aux->next) { getTypeLLVM(llvmType, aux->type); @@ -121,8 +132,8 @@ void genMethod(MethodDecl* methodDecl) if(aux3->isParam) { getTypeLLVM(llvmType, aux3->type); - printf("%%%s.param = alloca %s\n", aux3->id, llvmType); - printf("store %s %%%s, %s* %%%s.param\n", llvmType, aux3->id, llvmType, aux3->id); + printf("\t%%%s.param = alloca %s\n", aux3->id, llvmType); + printf("\tstore %s %%%s, %s* %%%s.param\n", llvmType, aux3->id, llvmType, aux3->id); } //Generate variable definition code @@ -511,7 +522,42 @@ ExprRet genExpr(Expr* expr) } else if(expr->type == CALL) { + char llvmType[MAX_LLVM_TYPE_SIZE]; + Type methodType = getMethodFromGlobal(expr->idOrLit); + getTypeLLVM(llvmType, methodType); + + //Count the amount of parameters + int nParams = 0; + ArgsList* aux = expr->argsList; + for(; aux != NULL; aux = aux->next) + nParams++; + + ExprRet* args = (ExprRet*) malloc(nParams * sizeof(ExprRet)); + + int i; + for(i=0, aux = expr->argsList; aux != NULL; aux = aux->next, i++) + args[i] = genExpr(aux->expr); + printf("\t%%%d =call %s @%s(", varNumber++, llvmType, expr->idOrLit); + aux = expr->argsList; + if(aux != NULL) + { + getTypeLLVM(llvmType, args[0].type); + printf("%s %%%d", llvmType, args[0].tempVarNum); + aux = aux->next; + } + for(i=1 ; aux != NULL; aux = aux->next, i++) + { + getTypeLLVM(llvmType, args[i].type); + printf(", %s %%%d", llvmType, args[i].tempVarNum); + } + + printf(")\n"); + + free(args); + + returnValue.tempVarNum = varNumber -1; + returnValue.type = methodType; } else if(expr->type == PARSEINT_T) { @@ -544,9 +590,3 @@ void getTypeLLVM(char* llvmType, Type type) { sprintf(llvmType, "%s", llvmTypes[type]); } - -const char* llvmRetTypes[6] = {"void", "i32", "i1", "{i32, i32*}", "{i32, i1*}", "i8**"}; -void getRetTypeLLVM(char* llvmType, Type type) -{ - sprintf(llvmType, "%s", llvmRetTypes[type]); -} From b808b74cc7bf200f015aabbbd5d3c43e2ce271cf Mon Sep 17 00:00:00 2001 From: joaosimoes Date: Sat, 31 May 2014 23:52:51 +0100 Subject: [PATCH 26/39] Report update. --- report/report.tex | 56 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/report/report.tex b/report/report.tex index 355249f..602c25a 100644 --- a/report/report.tex +++ b/report/report.tex @@ -102,9 +102,63 @@ \section{Inrodução} \section{Análise Léxical} -A primeira fase da construção do compilador consistiu na definição dos tokens aceites pela linguagem, através de expressões regulares, sendo internamente construído pelo \emph{LEX} um autómato. +A primeira fase da construção do compilador consistiu na definição dos tokens aceites pela linguagem, através de expressões regulares, sendo internamente construído pelo \emph{LEX} um autómato não-determinístico capaz de reconhecer a linguagem. +\subsection{Tokens} +Após terminada a análise sintáticta, obtivemos os seguintes \emph{tokens}: + +\begin{itemize} + \item \textbf{INT} - \emph{int} + \item \textbf{BOOL} - \emph{boolean} + \item \textbf{NEW} - \emph{new} + \item \textbf{IF} - \emph{if} + \item \textbf{ELSE} - \emph{else} + \item \textbf{WHILE} - \emph{while} + \item \textbf{PRINT} - \emph{System.out.println} + \item \textbf{PARSERINT} - \emph{Integer.parseInt} + \item \textbf{CLASS} - \emph{class} + \item \textbf{PUBLIC} - \emph{public} + \item \textbf{STATIC} - \emph{static} + \item \textbf{VOID} - \emph{void} + \item \textbf{STRING} - \emph{String} + \item \textbf{DOTLENGTH} - \emph{length} + \item \textbf{RETURN} - \emph{return} + \item \textbf{OCURV} - $($ + \item \textbf{CCURV} - $)$ + \item \textbf{OBRACE} - \{ + \item \textbf{CBRACE} - \} + \item \textbf{OSQUARE} - [ + \item \textbf{CSQUARE} - ] + \item \textbf{OP1} - \&\& , $\|$ + \item \textbf{OP2} - $< , > , == , != , <= , >=$ + \item \textbf{OP3} - $+ , -$ + \item \textbf{OP4} - $* , / , \% $ + \item \textbf{NOT} - ! + \item \textbf{ASSIGN} - \emph{printf} + \item \textbf{SEMIC} - ; + \item \textbf{COMMA} - , + \item \textbf{BOOLLIT} - \emph{true false} + \item \textbf{ID} - Corresponde a todas as sequências alfanuméricas inciadas por uma letra(maiúscula ou minúscula), que podem conter os caractéres "\$" e "$\_$". +\end{itemize} + +\subsection{Detecção de Erros Lexícais} + +A análise lexical é realizada da esquerda para a direita, caractér a caractér, até ao momento em que o autómato atinge um estado morto. Quando este mesmo estado é atingido, o analisador percorre o caminho inverso até encontrar um estado final, estando então encontrado um \emph{token} válido. Caso o analisador não atinja um estado final, então é gerado um erro léxical. Para melhor identificação do erro lexícal, é impressa a linha e a coluna onde se encontra o mesmo. Assim, necessitamos de mecanismos para obter estas informações. + +Para tal, existe uma varíavel com o nome \emph{colNo}, responsável por armazenar a coluna actual, sendo esta variável incrementada quando se verifica uma mudança de lina . Relativamente à linha, obtemos o seu valor actual através da varíavel \emph{yylineno}, já implementada pelo \emph{YACC}. + + + +\subsection{Tratamento dos Comentários} + +A linguagem iJava permite a existência de comentários de linha(iniciado por "$\|$") e comentários de bloco(colocados entre "$/* */$"). + +\section{Análise Semântica} + + + +\subsection{title} From 8d47551d4a836ff857b639e5c759cc5c004a7b8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Sun, 1 Jun 2014 00:04:32 +0100 Subject: [PATCH 27/39] Stuff. --- codeGen.c | 118 +++++++++++++++--------------------------------------- 1 file changed, 32 insertions(+), 86 deletions(-) diff --git a/codeGen.c b/codeGen.c index dc6e801..eb899bf 100644 --- a/codeGen.c +++ b/codeGen.c @@ -6,6 +6,7 @@ #include "symbols.h" #define MAX_LLVM_TYPE_SIZE 15 +#define MAX_LLVM_OP_STRING 10 typedef struct _ExprRet { @@ -30,6 +31,7 @@ ExprRet buildExpression(Expr*,ExprRet,ExprRet,char*); ExprRet genExpr(Expr*); void getTypeLLVM(char*, Type); +void getOpLLVM(char*, OpType); void generateCode() { @@ -56,30 +58,31 @@ void genPreamble() printf("@str.t = private unnamed_addr constant [7 x i8] c\"true\\0A\\00\\00\"\n"); printf("@str.bools = global [2 x i8*] [i8* getelementptr inbounds ([7 x i8]* @str.f, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8]* @str.t, i32 0, i32 0)]\n"); printf("\n"); + printf("%%IntArray = type { i32, i32* }\n"); + printf("%%BoolArray = type { i32, i1* }\n"); + printf("\n"); } void genGlobalVar(VarDecl* varDecl) { - char initVal[5]; + char initVal[20]; char llvmType[MAX_LLVM_TYPE_SIZE]; const char llvmOut[] = "@%s = global %s %s\n"; - const char llvmOutArr[] = "@.%s = global i32 0\n"; - const char llvmOutInitLenght[] = "\tstore i32 0, i32* @.%s\n"; getTypeLLVM(llvmType, varDecl->type); if(varDecl->type == INT_T || varDecl->type == BOOL_T) sprintf(initVal, "0"); + else if(varDecl->type == INTARRAY) + sprintf(initVal, "{i32 0, i32* null}", llvmType); + else if(varDecl->type == BOOLARRAY) + sprintf(initVal, "{i32 0, i1* null}", llvmType); else sprintf(initVal, "null"); IDList *aux = varDecl->idList; for(; aux != NULL; aux = aux->next) - { - if(varDecl->type != INT_T && varDecl->type != BOOL_T) - printf(llvmOutArr, aux->id); printf(llvmOut, aux->id, llvmType, initVal); - } printf("\n"); } @@ -290,29 +293,7 @@ void genStmt(Stmt* stmt) } else if(stmt->type == STOREARRAY) { - /*int isLocal = 1; - char varDeclSymbol[5]; - char llvmType[MAX_LLVM_TYPE_SIZE]; - char llvmType2[MAX_LLVM_TYPE_SIZE]; - int indexVarNumber = genExpr(stmt->expr1).tempVarNum; - int exprVarNumber = genExpr(stmt->expr2).tempVarNum; - - Type arrayType = getSymbolFromLocal(stmt->id); - if(arrayType == -1) - { - isLocal = 0; - arrayType = getSymbolFromGlobal(stmt->id); - } - - sprintf(varDeclSymbol, isLocal ? "%%" : "@"); - - getTypeLLVM(llvmType, arrayType); - - printf("\t%%%d = getelementptr %s %s%s, i32 %%%d\n", indexNumber++, llvmType, varDeclSymbol, stmt->id, indexVarNumber); - strcpy(llvmType2, llvmType); - llvmType2[strlen(llvmType2)-1] = '\0'; - printf("\tstore %s %%%d, %s %s%s\n", llvmType2, exprVarNumber, llvmType, varDeclSymbol, stmt->id);*/ } } @@ -338,60 +319,7 @@ ExprRet genExpr(Expr* expr) if(expr->type == BINOP) { - leftExprId = genExpr(expr->expr1); - rightExprId = genExpr(expr->expr2); - - if(expr->op == PLUS) - { - returnValue = buildExpression(expr, leftExprId, rightExprId, "add"); - } - else if(expr->op == MINUS) - { - returnValue = buildExpression(expr, leftExprId, rightExprId, "sub"); - } - else if(expr->op == MUL) - { - returnValue = buildExpression(expr, leftExprId, rightExprId, "mul"); - } - else if(expr->op == DIV) - { - returnValue = buildExpression(expr, leftExprId, rightExprId, "sdiv"); - } - else if(expr->op == REM) - { - returnValue = buildExpression(expr, leftExprId, rightExprId, "srem"); - } - else if(expr->op == LESSER) - { - returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp slt"); - returnValue.type = BOOL_T; - } - else if(expr->op == GREATER) - { - returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp sgt"); - returnValue.type = BOOL_T; - } - else if(expr->op == LEQ) - { - returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp sle"); - returnValue.type = BOOL_T; - } - else if(expr->op == GEQ) - { - returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp sge"); - returnValue.type = BOOL_T; - } - else if(expr->op == DIF) - { - returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp ne"); - returnValue.type = BOOL_T; - } - else if(expr->op == EQ) - { - returnValue = buildExpression(expr, leftExprId, rightExprId, "icmp eq"); - returnValue.type = BOOL_T; - } - else if(expr->op == AND_T) + if(expr->op == AND_T) { printf("\tbr label %%andstart%d\n\n", andNumber); printf("andstart%d:\n", andNumber); @@ -431,6 +359,18 @@ ExprRet genExpr(Expr* expr) returnValue.tempVarNum = varNumber -1; returnValue.type = BOOL_T; } + else + { + char llvmOp[MAX_LLVM_OP_STRING]; + getOpLLVM(llvmOp, expr->op); + + leftExprId = genExpr(expr->expr1); + rightExprId = genExpr(expr->expr2); + returnValue = buildExpression(expr, leftExprId, rightExprId, llvmOp); + + if(expr->op != PLUS && expr->op != MINUS && expr->op != MUL && expr->op != DIV && expr->op != REM) + returnValue.type = BOOL_T; + } return returnValue; } @@ -438,7 +378,7 @@ ExprRet genExpr(Expr* expr) { ExprRet exprId; - if(expr->op == PLUS) //Not necessary + if(expr->op == PLUS) { exprId = genExpr(expr->expr1); returnValue.tempVarNum = varNumber++; @@ -538,7 +478,7 @@ ExprRet genExpr(Expr* expr) for(i=0, aux = expr->argsList; aux != NULL; aux = aux->next, i++) args[i] = genExpr(aux->expr); - printf("\t%%%d =call %s @%s(", varNumber++, llvmType, expr->idOrLit); + printf("\t%%%d = call %s @%s(", varNumber++, llvmType, expr->idOrLit); aux = expr->argsList; if(aux != NULL) { @@ -585,8 +525,14 @@ ExprRet genExpr(Expr* expr) return returnValue; } -const char* llvmTypes[6] = {"void", "i32", "i1", "i32*", "i1*", "i8**"}; +const char* llvmTypes[6] = {"void", "i32", "i1", "%IntArray", "%BoolArray", "i8**"}; void getTypeLLVM(char* llvmType, Type type) { sprintf(llvmType, "%s", llvmTypes[type]); } + +const char* llvmOps[11] = {"add", "sub", "mul", "sdiv", "srem", "icmp slt", "icmp sgt", "icmp sle", "icmp sge", "icmp ne", "icmp eq"}; +void getOpLLVM(char* llvmOp, OpType opType) +{ + sprintf(llvmOp, "%s", llvmOps[opType]); +} From 1b95b63781c30bc302e0217e0b1e5033265247f7 Mon Sep 17 00:00:00 2001 From: joaosimoes Date: Sun, 1 Jun 2014 16:59:03 +0100 Subject: [PATCH 28/39] Merda --- report/report.tex | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/report/report.tex b/report/report.tex index 602c25a..a7ffb42 100644 --- a/report/report.tex +++ b/report/report.tex @@ -154,9 +154,11 @@ \subsection{Tratamento dos Comentários} A linguagem iJava permite a existência de comentários de linha(iniciado por "$\|$") e comentários de bloco(colocados entre "$/* */$"). -\section{Análise Semântica} +\newpage +\section{Análise Semântica} +Nesta secção \subsection{title} From dae8430713f284dca9877dea62cf84b8612d0bf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Sun, 1 Jun 2014 23:19:08 +0100 Subject: [PATCH 29/39] Almost there. --- codeGen.c | 178 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 119 insertions(+), 59 deletions(-) diff --git a/codeGen.c b/codeGen.c index eb899bf..2a61eaa 100644 --- a/codeGen.c +++ b/codeGen.c @@ -52,6 +52,7 @@ void genPreamble() { printf("declare i32 @printf(i8*, ...)\n"); printf("declare i32 @atoi(i8*) nounwind readonly\n"); + printf("declare noalias i8* @calloc(i32, i32) nounwind\n"); printf("\n"); printf("@str.d = private unnamed_addr constant [4 x i8] c\"%%d\\0A\\00\"\n"); printf("@str.f = private unnamed_addr constant [7 x i8] c\"false\\0A\\00\"\n"); @@ -111,7 +112,7 @@ void genMethod(MethodDecl* methodDecl) printf("i32 %%%s.len, ", aux->id); argCountName = aux->id; } - printf("%s %%%s", llvmType, aux->id); + printf("%s %%%s.param", llvmType, aux->id); aux = aux->next; } @@ -123,7 +124,7 @@ void genMethod(MethodDecl* methodDecl) printf("i32 %%%s.len", aux->id); argCountName = aux->id; } - printf(", %s %%%s", llvmType, aux->id); + printf(", %s %%%s.param", llvmType, aux->id); } printf(")\n{\n"); @@ -135,8 +136,8 @@ void genMethod(MethodDecl* methodDecl) if(aux3->isParam) { getTypeLLVM(llvmType, aux3->type); - printf("\t%%%s.param = alloca %s\n", aux3->id, llvmType); - printf("\tstore %s %%%s, %s* %%%s.param\n", llvmType, aux3->id, llvmType, aux3->id); + printf("\t%%%s = alloca %s\n", aux3->id, llvmType); + printf("\tstore %s %%%s.param, %s* %%%s\n", llvmType, aux3->id, llvmType, aux3->id); } //Generate variable definition code @@ -171,21 +172,12 @@ void genLocalVar(VarDecl* varDecl) { char llvmType[MAX_LLVM_TYPE_SIZE]; const char llvmOut[] = "\t%%%s = alloca %s\n"; - const char llvmOutArr[] = "\t%%.%s = alloca i32\n"; - const char llvmOutInitLenght[] = "\tstore i32 0, i32* %%.%s\n"; getTypeLLVM(llvmType, varDecl->type); IDList *aux = varDecl->idList; for(; aux != NULL; aux = aux->next) - { - if(varDecl->type != INT_T && varDecl->type != BOOL_T) - { - printf(llvmOutArr, aux->id); - printf(llvmOutInitLenght, aux->id); - } printf(llvmOut, aux->id, llvmType); - } printf("\n"); } @@ -203,22 +195,22 @@ void genStmt(Stmt* stmt) genStmtList(stmt->stmtList); else if(stmt->type == IFELSE) { + int thisIfElseNumber = ifNumber++; + int compVarNumber = genExpr(stmt->expr1).tempVarNum; - printf("\tbr i1 %%%d, label %%ifthen%d, label %%ifelse%d\n\n", compVarNumber, ifNumber, ifNumber); + printf("\tbr i1 %%%d, label %%ifthen%d, label %%ifelse%d\n\n", compVarNumber, thisIfElseNumber, thisIfElseNumber); - printf("ifthen%d:\n", ifNumber); + printf("ifthen%d:\n", thisIfElseNumber); if(stmt->stmt1 != NULL) genStmt(stmt->stmt1); - printf("\tbr label %%ifend%d\n\n", ifNumber); + printf("\tbr label %%ifend%d\n\n", thisIfElseNumber); - printf("ifelse%d:\n", ifNumber); + printf("ifelse%d:\n", thisIfElseNumber); if(stmt->stmt2 != NULL) genStmt(stmt->stmt2); - printf("\tbr label %%ifend%d\n\n", ifNumber); - - printf("ifend%d:\n", ifNumber); + printf("\tbr label %%ifend%d\n\n", thisIfElseNumber); - ifNumber++; + printf("ifend%d:\n", thisIfElseNumber); } else if(stmt->type == RETURN_T) { @@ -228,31 +220,28 @@ void genStmt(Stmt* stmt) getTypeLLVM(llvmType, curFunctionType); int exprVarNumber = genExpr(stmt->expr1).tempVarNum; - if(curFunctionType == INT_T || curFunctionType == BOOL_T) - printf("\tret %s %%%d\n", llvmType, exprVarNumber); - else - { - printf("\tret i32 %%.%d, %s %%%d\n", exprVarNumber, llvmType, exprVarNumber); - } + printf("\tret %s %%%d\n", llvmType, exprVarNumber); } else printf("\t ret void\n"); + + varNumber++; } else if(stmt->type == WHILE_T) { - printf("\tbr label %%whilestart%d\n\n", whileNumber); - printf("whilestart%d:\n", whileNumber); + int thisWhileNum = whileNumber++; + + printf("\tbr label %%whilestart%d\n\n", thisWhileNum); + printf("whilestart%d:\n", thisWhileNum); int exprVarNumber = genExpr(stmt->expr1).tempVarNum; - printf("\tbr i1 %%%d, label %%whiledo%d, label %%whileend%d\n\n", exprVarNumber, whileNumber, whileNumber); + printf("\tbr i1 %%%d, label %%whiledo%d, label %%whileend%d\n\n", exprVarNumber, thisWhileNum, thisWhileNum); - printf("whiledo%d:\n", whileNumber); + printf("whiledo%d:\n", thisWhileNum); if(stmt->stmt1 != NULL) genStmt(stmt->stmt1); - printf("\tbr label %%whilestart%d\n", whileNumber); - - printf("\nwhileend%d:\n", whileNumber); + printf("\tbr label %%whilestart%d\n", thisWhileNum); - whileNumber++; + printf("\nwhileend%d:\n", thisWhileNum); } else if(stmt->type == PRINT_T) { @@ -293,6 +282,36 @@ void genStmt(Stmt* stmt) } else if(stmt->type == STOREARRAY) { + int isLocal = 1; + char varDeclSymbol[5]; + char llvmType1[MAX_LLVM_TYPE_SIZE]; + char llvmType2[MAX_LLVM_TYPE_SIZE]; + int indexVarNumber = genExpr(stmt->expr1).tempVarNum; + int exprVarNumber = genExpr(stmt->expr2).tempVarNum; + + Type aux = -1; + Type varType = getSymbolFromLocal(stmt->id); + if(varType == aux) + { + isLocal = 0; + varType = getSymbolFromGlobal(stmt->id); + } + + sprintf(varDeclSymbol, isLocal ? "%%" : "@"); + getTypeLLVM(llvmType1, varType); + + Type type; + if(varType == INTARRAY) + type = INT_T; + else if (varType == BOOLARRAY) + type = BOOL_T; + getTypeLLVM(llvmType2, type); + + printf("\t%%%d = load %s* %s%s\n", varNumber++, llvmType1, varDeclSymbol, stmt->id); + + printf("\t%%%d = extractvalue %s %%%d, 1\n", varNumber++, llvmType1, varNumber -1); + printf("\t%%%d = getelementptr %s* %%%d, i32 %%%d\n", varNumber++, llvmType2, varNumber -1, indexVarNumber); + printf("\tstore %s %%%d, %s* %%%d\n", llvmType2, exprVarNumber, llvmType2, varNumber -1); } } @@ -321,41 +340,43 @@ ExprRet genExpr(Expr* expr) { if(expr->op == AND_T) { - printf("\tbr label %%andstart%d\n\n", andNumber); - printf("andstart%d:\n", andNumber); + int thisAndNumber = andNumber++; + + printf("\tbr label %%andstart%d\n\n", thisAndNumber); + printf("andstart%d:\n", thisAndNumber); leftExprId = genExpr(expr->expr1); printf("\t%%%d = icmp eq i1 0, %%%d\n", varNumber++, leftExprId.tempVarNum); - printf("\tbr i1 %%%d, label %%andend%d, label %%anddo%d\n", varNumber-1, andNumber, andNumber); + printf("\tbr i1 %%%d, label %%andend%d, label %%anddo%d\n", varNumber-1, thisAndNumber, thisAndNumber); - printf("anddo%d:\n", andNumber); + printf("anddo%d:\n", thisAndNumber); rightExprId = genExpr(expr->expr2); - printf("\tbr label %%andend%d\n\n", andNumber); + printf("\tbr label %%andend%d\n\n", thisAndNumber); - printf("andend%d:\n", andNumber); - printf("\t%%%d = phi i1 [ false, %%andstart%d ], [ %%%d, %%anddo%d ]\n", varNumber++, andNumber, rightExprId.tempVarNum, andNumber); + printf("andend%d:\n", thisAndNumber); + printf("\t%%%d = phi i1 [ false, %%andstart%d ], [ %%%d, %%anddo%d ]\n", varNumber++, thisAndNumber, rightExprId.tempVarNum, thisAndNumber); - andNumber++; returnValue.tempVarNum = varNumber -1; returnValue.type = BOOL_T; } else if(expr->op == OR_T) { - printf("\tbr label %%orstart%d\n\n", orNumber); - printf("orstart%d:\n", orNumber); + int thisOrNumber = orNumber++; + + printf("\tbr label %%orstart%d\n\n", thisOrNumber); + printf("orstart%d:\n", thisOrNumber); leftExprId = genExpr(expr->expr1); printf("\t%%%d = icmp eq i1 1, %%%d\n", varNumber++, leftExprId.tempVarNum); - printf("\tbr i1 %%%d, label %%orend%d, label %%ordo%d\n", varNumber-1, orNumber, orNumber); + printf("\tbr i1 %%%d, label %%orend%d, label %%ordo%d\n", varNumber-1, thisOrNumber, thisOrNumber); - printf("ordo%d:\n", orNumber); + printf("ordo%d:\n", thisOrNumber); rightExprId = genExpr(expr->expr2); - printf("\tbr label %%orend%d\n\n", orNumber); + printf("\tbr label %%orend%d\n\n", thisOrNumber); - printf("orend%d:\n", orNumber); - printf("\t%%%d = phi i1 [ true, %%orstart%d ], [ %%%d, %%ordo%d ]\n", varNumber++, orNumber, rightExprId.tempVarNum, orNumber); + printf("orend%d:\n", thisOrNumber); + printf("\t%%%d = phi i1 [ true, %%orstart%d ], [ %%%d, %%ordo%d ]\n", varNumber++, thisOrNumber, rightExprId.tempVarNum, thisOrNumber); - orNumber++; returnValue.tempVarNum = varNumber -1; returnValue.type = BOOL_T; } @@ -412,7 +433,10 @@ ExprRet genExpr(Expr* expr) } else { - //TODO: implement this! + char llvmType[MAX_LLVM_TYPE_SIZE]; + getTypeLLVM(llvmType, leftExprId.type); + + printf("\t%%%d = extractvalue %s %%%d, 0\n", varNumber++, llvmType, varNumber -1); } returnValue.tempVarNum = varNumber -1; @@ -429,10 +453,7 @@ ExprRet genExpr(Expr* expr) if(idType != -1) { getTypeLLVM(llvmType, idType); - if(isLocalSymbolParam(expr->idOrLit)) - printf("\t%%%d = load %s* %%%s.param\n\n", returnValue.tempVarNum, llvmType, expr->idOrLit); - else - printf("\t%%%d = load %s* %%%s\n\n", returnValue.tempVarNum, llvmType, expr->idOrLit); + printf("\t%%%d = load %s* %%%s\n\n", returnValue.tempVarNum, llvmType, expr->idOrLit); } else { @@ -504,7 +525,8 @@ ExprRet genExpr(Expr* expr) int indexVarNumber = genExpr(expr->expr1).tempVarNum; printf("\t%%%d = add i32 %%%d, 1\n", varNumber++, indexVarNumber); - printf("\t%%%d = getelementptr inbounds i8** %%%s, i32 %%%d\n", varNumber++, expr->idOrLit, varNumber -1); + printf("\t%%%d = load i8*** %%%s\n", varNumber++, expr->idOrLit); + printf("\t%%%d = getelementptr inbounds i8** %%%d, i32 %%%d\n", varNumber++, varNumber -1, varNumber -2); printf("\t%%%d = load i8** %%%d\n", varNumber++, varNumber -1); printf("\t%%%d = call i32 @atoi(i8* %%%d) nounwind readonly\n\n", varNumber++, varNumber -1); @@ -513,13 +535,51 @@ ExprRet genExpr(Expr* expr) } else if(expr->type == INDEX) { + Type type; + char llvmType1[MAX_LLVM_TYPE_SIZE]; + char llvmType2[MAX_LLVM_TYPE_SIZE]; + + leftExprId = genExpr(expr->expr1); + rightExprId = genExpr(expr->expr2); + getTypeLLVM(llvmType1, leftExprId.type); + + if(leftExprId.type == INTARRAY) + type = INT_T; + else if(leftExprId.type == BOOLARRAY) + type = BOOL_T; + getTypeLLVM(llvmType2, type); + + printf("\t%%%d = extractvalue %s %%%d, 1\n", varNumber++, llvmType1, leftExprId.tempVarNum); + printf("\t%%%d = getelementptr %s* %%%d, i32 %%%d\n", varNumber++, llvmType2, varNumber -1, rightExprId.tempVarNum); + printf("\t%%%d = load %s* %%%d\n", varNumber++, llvmType2, varNumber -1); + + returnValue.tempVarNum = varNumber -1; + returnValue.type = type; } - else if(expr->type == NEWINTARR) { + else if(expr->type == NEWINTARR) + { + leftExprId = genExpr(expr->expr1); + printf("\t%%%d = call noalias i8* @calloc(i32 %%%d, i32 4) nounwind\n\n", varNumber++, leftExprId.tempVarNum); + printf("\t%%%d = bitcast i8* %%%d to i32*\n", varNumber++, varNumber -1); + printf("\t%%%d = insertvalue %%IntArray undef, i32 %%%d, 0\n", varNumber++, leftExprId.tempVarNum); + printf("\t%%%d = insertvalue %%IntArray %%%d, i32* %%%d, 1\n", varNumber++, varNumber -1, varNumber -2); + + returnValue.tempVarNum = varNumber -1; + returnValue.type = INTARRAY; } - else if(expr->type == NEWBOOLARR) { + else if(expr->type == NEWBOOLARR) + { + leftExprId = genExpr(expr->expr1); + printf("\t%%%d = call noalias i8* @calloc(i32 %%%d, i32 1) nounwind\n\n", varNumber++, leftExprId.tempVarNum); + printf("\t%%%d = bitcast i8* %%%d to i1*\n", varNumber++, varNumber -1); + printf("\t%%%d = insertvalue %%BoolArray undef, i32 %%%d, 0\n", varNumber++, leftExprId.tempVarNum); + printf("\t%%%d = insertvalue %%BoolArray %%%d, i1* %%%d, 1\n", varNumber++, varNumber -1, varNumber -2); + + returnValue.tempVarNum = varNumber -1; + returnValue.type = BOOLARRAY; } return returnValue; From 190c34ce72829be00622ffc19213f7c575182bf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Sun, 1 Jun 2014 23:24:21 +0100 Subject: [PATCH 30/39] =?UTF-8?q?Joca=20=C3=A9s=20uma=20merda.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- codeGen.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/codeGen.c b/codeGen.c index 2a61eaa..cb55756 100644 --- a/codeGen.c +++ b/codeGen.c @@ -75,9 +75,9 @@ void genGlobalVar(VarDecl* varDecl) if(varDecl->type == INT_T || varDecl->type == BOOL_T) sprintf(initVal, "0"); else if(varDecl->type == INTARRAY) - sprintf(initVal, "{i32 0, i32* null}", llvmType); + sprintf(initVal, "{i32 0, i32* null}"); else if(varDecl->type == BOOLARRAY) - sprintf(initVal, "{i32 0, i1* null}", llvmType); + sprintf(initVal, "{i32 0, i1* null}"); else sprintf(initVal, "null"); From 3a277e3f10e90bd3b7cd0824826e3cffd08576d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Sun, 1 Jun 2014 23:50:29 +0100 Subject: [PATCH 31/39] =?UTF-8?q?Joca=20=C3=A9s=20um=20fofo.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- codeGen.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/codeGen.c b/codeGen.c index cb55756..b75e803 100644 --- a/codeGen.c +++ b/codeGen.c @@ -59,8 +59,8 @@ void genPreamble() printf("@str.t = private unnamed_addr constant [7 x i8] c\"true\\0A\\00\\00\"\n"); printf("@str.bools = global [2 x i8*] [i8* getelementptr inbounds ([7 x i8]* @str.f, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8]* @str.t, i32 0, i32 0)]\n"); printf("\n"); - printf("%%IntArray = type { i32, i32* }\n"); - printf("%%BoolArray = type { i32, i1* }\n"); + printf("%%Int.Array = type { i32, i32* }\n"); + printf("%%Bool.Array = type { i32, i1* }\n"); printf("\n"); } @@ -154,15 +154,15 @@ void genMethod(MethodDecl* methodDecl) else { if(methodDecl->type == VOID_T) - printf("\tret void"); + printf("\tret void\n"); else if(methodDecl->type == INT_T) - printf("\tret i32 0"); + printf("\tret i32 0\n"); else if(methodDecl->type == BOOL_T) - printf("\tret i1 0"); + printf("\tret i1 0\n"); else if(methodDecl->type == INTARRAY) - printf("\tret i32* null"); + printf("\tret %%Int.Array {i32 0, i32* null}\n"); else if(methodDecl->type == BOOLARRAY) - printf("\tret i1* null"); + printf("\tret %%Bool.Array {i32 0, i1* null}\n"); } printf("}\n\n"); @@ -563,8 +563,8 @@ ExprRet genExpr(Expr* expr) printf("\t%%%d = call noalias i8* @calloc(i32 %%%d, i32 4) nounwind\n\n", varNumber++, leftExprId.tempVarNum); printf("\t%%%d = bitcast i8* %%%d to i32*\n", varNumber++, varNumber -1); - printf("\t%%%d = insertvalue %%IntArray undef, i32 %%%d, 0\n", varNumber++, leftExprId.tempVarNum); - printf("\t%%%d = insertvalue %%IntArray %%%d, i32* %%%d, 1\n", varNumber++, varNumber -1, varNumber -2); + printf("\t%%%d = insertvalue %%Int.Array undef, i32 %%%d, 0\n", varNumber++, leftExprId.tempVarNum); + printf("\t%%%d = insertvalue %%Int.Array %%%d, i32* %%%d, 1\n", varNumber++, varNumber -1, varNumber -2); returnValue.tempVarNum = varNumber -1; returnValue.type = INTARRAY; @@ -575,8 +575,8 @@ ExprRet genExpr(Expr* expr) printf("\t%%%d = call noalias i8* @calloc(i32 %%%d, i32 1) nounwind\n\n", varNumber++, leftExprId.tempVarNum); printf("\t%%%d = bitcast i8* %%%d to i1*\n", varNumber++, varNumber -1); - printf("\t%%%d = insertvalue %%BoolArray undef, i32 %%%d, 0\n", varNumber++, leftExprId.tempVarNum); - printf("\t%%%d = insertvalue %%BoolArray %%%d, i1* %%%d, 1\n", varNumber++, varNumber -1, varNumber -2); + printf("\t%%%d = insertvalue %%Bool.Array undef, i32 %%%d, 0\n", varNumber++, leftExprId.tempVarNum); + printf("\t%%%d = insertvalue %%Bool.Array %%%d, i1* %%%d, 1\n", varNumber++, varNumber -1, varNumber -2); returnValue.tempVarNum = varNumber -1; returnValue.type = BOOLARRAY; @@ -585,7 +585,7 @@ ExprRet genExpr(Expr* expr) return returnValue; } -const char* llvmTypes[6] = {"void", "i32", "i1", "%IntArray", "%BoolArray", "i8**"}; +const char* llvmTypes[6] = {"void", "i32", "i1", "%Int.Array", "%Bool.Array", "i8**"}; void getTypeLLVM(char* llvmType, Type type) { sprintf(llvmType, "%s", llvmTypes[type]); From 253dbc622561050fe750a7ca8218df8b57b5488e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Mon, 2 Jun 2014 00:14:58 +0100 Subject: [PATCH 32/39] SUCCESS MOTHERFUCKERS (PS: Joca faz-me um filho) --- codeGen.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/codeGen.c b/codeGen.c index b75e803..99afd88 100644 --- a/codeGen.c +++ b/codeGen.c @@ -19,6 +19,7 @@ extern ClassTable* symbolsTable; extern MethodTable* currentLocalTable; char* argCountName; Type curFunctionType; +char* curFunctionName; int varNumber, ifNumber, whileNumber, indexNumber, andNumber, orNumber; void genPreamble(); @@ -92,6 +93,7 @@ void genMethod(MethodDecl* methodDecl) { varNumber = indexNumber = 1; curFunctionType = methodDecl->type; + curFunctionName = methodDecl->id; currentLocalTable = getLocalTable(methodDecl->id); //If generating main, adapt the type @@ -223,7 +225,12 @@ void genStmt(Stmt* stmt) printf("\tret %s %%%d\n", llvmType, exprVarNumber); } else - printf("\t ret void\n"); + { + if(strcmp(curFunctionName, "main") != 0) + printf("\tret void\n"); + else + printf("\tret i32 0\n"); + } varNumber++; } From 63bd16fbae879e0a69c9b7b0cb275e3e527041af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Mon, 2 Jun 2014 00:21:51 +0100 Subject: [PATCH 33/39] Several tests and a script used for testing. --- tests/args/test10args.txt | 0 tests/args/test11args.txt | 1 + tests/args/test11args.txt~ | 0 tests/args/test12args.txt | 0 tests/args/test13args.txt | 0 tests/args/test14args.txt | 0 tests/args/test15args.txt | 0 tests/args/test16args.txt | 1 + tests/args/test16args.txt~ | 0 tests/args/test17args.txt | 0 tests/args/test17args.txt~ | 1 + tests/args/test18args.txt | 0 tests/args/test19args.txt | 1 + tests/args/test19args.txt~ | 0 tests/args/test1args.txt | 0 tests/args/test20args.txt | 0 tests/args/test21args.txt | 0 tests/args/test22args.txt | 0 tests/args/test23args.txt | 0 tests/args/test24args.txt | 0 tests/args/test24args.txt~ | 0 tests/args/test25args.txt | 0 tests/args/test26args.txt | 0 tests/args/test27args.txt | 0 tests/args/test28args.txt | 0 tests/args/test29args.txt | 1 + tests/args/test29args.txt~ | 0 tests/args/test2args.txt | 0 tests/args/test2args.txt~ | 1 + tests/args/test30args.txt | 0 tests/args/test31args.txt | 0 tests/args/test31args.txt~ | 0 tests/args/test32args.txt | 0 tests/args/test33args.txt | 0 tests/args/test3args.txt | 0 tests/args/test4args.txt | 0 tests/args/test5args.txt | 0 tests/args/test6args.txt | 0 tests/args/test7args.txt | 0 tests/args/test8args.txt | 1 + tests/args/test8args.txt~ | 1 + tests/args/test9args.txt | 0 tests/runTests.bash | 41 +++++++++++++++ tests/test1.java | 12 +++++ tests/test10.java | 21 ++++++++ tests/test11.java | 32 ++++++++++++ tests/test12.java | 34 +++++++++++++ tests/test13.java | 27 ++++++++++ tests/test14.java | 40 +++++++++++++++ tests/test15.java | 101 +++++++++++++++++++++++++++++++++++++ tests/test16.java | 23 +++++++++ tests/test17.java | 52 +++++++++++++++++++ tests/test18.java | 8 +++ tests/test19.java | 12 +++++ tests/test2.java | 11 ++++ tests/test20.java | 78 ++++++++++++++++++++++++++++ tests/test21.java | 35 +++++++++++++ tests/test22.java | 15 ++++++ tests/test23.java | 15 ++++++ tests/test24.java | 15 ++++++ tests/test25.java | 21 ++++++++ tests/test26.java | 21 ++++++++ tests/test27.java | 36 +++++++++++++ tests/test28.java | 52 +++++++++++++++++++ tests/test29.java | 73 +++++++++++++++++++++++++++ tests/test3.java | 24 +++++++++ tests/test30.java | 46 +++++++++++++++++ tests/test31.java | 32 ++++++++++++ tests/test32.java | 39 ++++++++++++++ tests/test33.java | 67 ++++++++++++++++++++++++ tests/test4.java | 15 ++++++ tests/test5.java | 15 ++++++ tests/test6.java | 32 ++++++++++++ tests/test7.java | 32 ++++++++++++ tests/test8.java | 17 +++++++ tests/test9.java | 22 ++++++++ 76 files changed, 1124 insertions(+) create mode 100644 tests/args/test10args.txt create mode 100644 tests/args/test11args.txt create mode 100644 tests/args/test11args.txt~ create mode 100644 tests/args/test12args.txt create mode 100644 tests/args/test13args.txt create mode 100644 tests/args/test14args.txt create mode 100644 tests/args/test15args.txt create mode 100644 tests/args/test16args.txt create mode 100644 tests/args/test16args.txt~ create mode 100644 tests/args/test17args.txt create mode 100644 tests/args/test17args.txt~ create mode 100644 tests/args/test18args.txt create mode 100644 tests/args/test19args.txt create mode 100644 tests/args/test19args.txt~ create mode 100644 tests/args/test1args.txt create mode 100644 tests/args/test20args.txt create mode 100644 tests/args/test21args.txt create mode 100644 tests/args/test22args.txt create mode 100644 tests/args/test23args.txt create mode 100644 tests/args/test24args.txt create mode 100644 tests/args/test24args.txt~ create mode 100644 tests/args/test25args.txt create mode 100644 tests/args/test26args.txt create mode 100644 tests/args/test27args.txt create mode 100644 tests/args/test28args.txt create mode 100644 tests/args/test29args.txt create mode 100644 tests/args/test29args.txt~ create mode 100644 tests/args/test2args.txt create mode 100644 tests/args/test2args.txt~ create mode 100644 tests/args/test30args.txt create mode 100644 tests/args/test31args.txt create mode 100644 tests/args/test31args.txt~ create mode 100644 tests/args/test32args.txt create mode 100644 tests/args/test33args.txt create mode 100644 tests/args/test3args.txt create mode 100644 tests/args/test4args.txt create mode 100644 tests/args/test5args.txt create mode 100644 tests/args/test6args.txt create mode 100644 tests/args/test7args.txt create mode 100644 tests/args/test8args.txt create mode 100644 tests/args/test8args.txt~ create mode 100644 tests/args/test9args.txt create mode 100644 tests/runTests.bash create mode 100644 tests/test1.java create mode 100644 tests/test10.java create mode 100644 tests/test11.java create mode 100644 tests/test12.java create mode 100644 tests/test13.java create mode 100644 tests/test14.java create mode 100644 tests/test15.java create mode 100644 tests/test16.java create mode 100644 tests/test17.java create mode 100644 tests/test18.java create mode 100644 tests/test19.java create mode 100644 tests/test2.java create mode 100644 tests/test20.java create mode 100644 tests/test21.java create mode 100644 tests/test22.java create mode 100644 tests/test23.java create mode 100644 tests/test24.java create mode 100644 tests/test25.java create mode 100644 tests/test26.java create mode 100644 tests/test27.java create mode 100644 tests/test28.java create mode 100644 tests/test29.java create mode 100644 tests/test3.java create mode 100644 tests/test30.java create mode 100644 tests/test31.java create mode 100644 tests/test32.java create mode 100644 tests/test33.java create mode 100644 tests/test4.java create mode 100644 tests/test5.java create mode 100644 tests/test6.java create mode 100644 tests/test7.java create mode 100644 tests/test8.java create mode 100644 tests/test9.java diff --git a/tests/args/test10args.txt b/tests/args/test10args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test11args.txt b/tests/args/test11args.txt new file mode 100644 index 0000000..d20390c --- /dev/null +++ b/tests/args/test11args.txt @@ -0,0 +1 @@ +-1 0 1 07 7 -010 -47 00 00000 123456789 diff --git a/tests/args/test11args.txt~ b/tests/args/test11args.txt~ new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test12args.txt b/tests/args/test12args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test13args.txt b/tests/args/test13args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test14args.txt b/tests/args/test14args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test15args.txt b/tests/args/test15args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test16args.txt b/tests/args/test16args.txt new file mode 100644 index 0000000..29d6383 --- /dev/null +++ b/tests/args/test16args.txt @@ -0,0 +1 @@ +100 diff --git a/tests/args/test16args.txt~ b/tests/args/test16args.txt~ new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test17args.txt b/tests/args/test17args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test17args.txt~ b/tests/args/test17args.txt~ new file mode 100644 index 0000000..29d6383 --- /dev/null +++ b/tests/args/test17args.txt~ @@ -0,0 +1 @@ +100 diff --git a/tests/args/test18args.txt b/tests/args/test18args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test19args.txt b/tests/args/test19args.txt new file mode 100644 index 0000000..1f5ace8 --- /dev/null +++ b/tests/args/test19args.txt @@ -0,0 +1 @@ +1 2 3 4 5 6 7 8 diff --git a/tests/args/test19args.txt~ b/tests/args/test19args.txt~ new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test1args.txt b/tests/args/test1args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test20args.txt b/tests/args/test20args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test21args.txt b/tests/args/test21args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test22args.txt b/tests/args/test22args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test23args.txt b/tests/args/test23args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test24args.txt b/tests/args/test24args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test24args.txt~ b/tests/args/test24args.txt~ new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test25args.txt b/tests/args/test25args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test26args.txt b/tests/args/test26args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test27args.txt b/tests/args/test27args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test28args.txt b/tests/args/test28args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test29args.txt b/tests/args/test29args.txt new file mode 100644 index 0000000..ebd338b --- /dev/null +++ b/tests/args/test29args.txt @@ -0,0 +1 @@ +1 2 3 4 5 6 7 8 9 10 -1 -2 -3 -4 -6 -7 -8 -9 -10 diff --git a/tests/args/test29args.txt~ b/tests/args/test29args.txt~ new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test2args.txt b/tests/args/test2args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test2args.txt~ b/tests/args/test2args.txt~ new file mode 100644 index 0000000..93c924c --- /dev/null +++ b/tests/args/test2args.txt~ @@ -0,0 +1 @@ +0 -1 diff --git a/tests/args/test30args.txt b/tests/args/test30args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test31args.txt b/tests/args/test31args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test31args.txt~ b/tests/args/test31args.txt~ new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test32args.txt b/tests/args/test32args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test33args.txt b/tests/args/test33args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test3args.txt b/tests/args/test3args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test4args.txt b/tests/args/test4args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test5args.txt b/tests/args/test5args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test6args.txt b/tests/args/test6args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test7args.txt b/tests/args/test7args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/args/test8args.txt b/tests/args/test8args.txt new file mode 100644 index 0000000..d20390c --- /dev/null +++ b/tests/args/test8args.txt @@ -0,0 +1 @@ +-1 0 1 07 7 -010 -47 00 00000 123456789 diff --git a/tests/args/test8args.txt~ b/tests/args/test8args.txt~ new file mode 100644 index 0000000..61bdd27 --- /dev/null +++ b/tests/args/test8args.txt~ @@ -0,0 +1 @@ +-1 0 1 07 0xF -010 -47 00 00000 123456789 diff --git a/tests/args/test9args.txt b/tests/args/test9args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/runTests.bash b/tests/runTests.bash new file mode 100644 index 0000000..6c3a6bc --- /dev/null +++ b/tests/runTests.bash @@ -0,0 +1,41 @@ +#!/bin/bash + +NUMBER_TESTS=17 + +cd .. +bash compile.bash > /dev/null +cd tests + +rm -r -f diffs/ +mkdir diffs/ + +cp ../ijcompiler ijcompiler + +i=1; +while true +do + programName='test'$i + programFileName=$programName'.java' + diffFileName='diffs/diff'$i'.txt' + + if ! [[ -s $programFileName ]] ; then + break + fi ; + + echo -n $programName': ' + + javac $programFileName && java $programName `cat 'args/test'$i'args.txt'` &> 'diffs/out'$i'_java.txt' + + ./ijcompiler < $programFileName > $programName'.ll' && lli $programName'.ll' `cat 'args/test'$i'args.txt'` &> 'diffs/out'$i'_ijava.txt' + + diff 'diffs/out'$i'_java.txt' 'diffs/out'$i'_ijava.txt' > 'diffs/diff'$i'.txt' + + if [[ -s $diffFileName ]] ; then + echo "ERRORS" + else + echo "OK" + fi ; + + let i=$i+1 +done + diff --git a/tests/test1.java b/tests/test1.java new file mode 100644 index 0000000..2e4f90e --- /dev/null +++ b/tests/test1.java @@ -0,0 +1,12 @@ +/*Declaração de variáveis globais*/ +class test1 +{ + static int a, b, c, d; + static boolean e, f, g, h, i; + static int[] j, k, l, m; + static boolean[] n, o, p, q; + + public static void main(String[] args) + { + } +} diff --git a/tests/test10.java b/tests/test10.java new file mode 100644 index 0000000..002001b --- /dev/null +++ b/tests/test10.java @@ -0,0 +1,21 @@ +/*Impressão de variáveis globais não inicializadas*/ +class test10 +{ + static int a, b, c; + static boolean e, f, g; + + public static void main(String[] args) + { + int a, b; + boolean e; + + a = -1; b = 07; e = true; + + System.out.println(a); + System.out.println(b); + System.out.println(c); + System.out.println(e); + System.out.println(f); + System.out.println(g); + } +} diff --git a/tests/test11.java b/tests/test11.java new file mode 100644 index 0000000..2df65fa --- /dev/null +++ b/tests/test11.java @@ -0,0 +1,32 @@ +/*Atribuição de inteiros passados por linha de comandos a variáveis*/ +class test11 +{ + static int a, b, c, d, e; + + public static void main(String[] args) + { + int f, g, h, i, j; + + a = Integer.parseInt(args[0]); + b = Integer.parseInt(args[1]); + c = Integer.parseInt(args[2]); + d = Integer.parseInt(args[3]); + e = Integer.parseInt(args[4]); + f = Integer.parseInt(args[5]); + g = Integer.parseInt(args[6]); + h = Integer.parseInt(args[7]); + i = Integer.parseInt(args[8]); + j = Integer.parseInt(args[9]); + + System.out.println(a); + System.out.println(b); + System.out.println(c); + System.out.println(d); + System.out.println(e); + System.out.println(f); + System.out.println(g); + System.out.println(h); + System.out.println(i); + System.out.println(j); + } +} diff --git a/tests/test12.java b/tests/test12.java new file mode 100644 index 0000000..e739b02 --- /dev/null +++ b/tests/test12.java @@ -0,0 +1,34 @@ +/*Atribuição múltipla a variáveis*/ +class test12 +{ + static int a, b, c, d, e; + static boolean k, l, m, n; + + public static void main(String[] args) + { + int f, g, h, i, j; + + a = 1; b = 2; c = 3; d = 4; e = 5; + f = 6; g = 7; h = 8; i = 9; j = 10; + k = false; l = true; m = false; n = true; + + a = -1; b = -2; c = -3; d = -4; e = -5; + f = -6; g = -7; h = -8; i = -9; j = -10; + k = true; l = false; m = true; n = false; + + System.out.println(a); + System.out.println(b); + System.out.println(c); + System.out.println(d); + System.out.println(e); + System.out.println(f); + System.out.println(g); + System.out.println(h); + System.out.println(i); + System.out.println(j); + System.out.println(k); + System.out.println(l); + System.out.println(m); + System.out.println(n); + } +} diff --git a/tests/test13.java b/tests/test13.java new file mode 100644 index 0000000..1fe446c --- /dev/null +++ b/tests/test13.java @@ -0,0 +1,27 @@ +/*Operadores unários aplicados a literais*/ +class test13 +{ + public static void main(String[] args) + { + System.out.println(-(-1)); + System.out.println(-(1)); + System.out.println(-(0)); + System.out.println(+(-1)); + System.out.println(+(1)); + System.out.println(+(0)); + System.out.println(-(-01)); + System.out.println(-(01)); + System.out.println(-(00)); + System.out.println(+(-01)); + System.out.println(+(01)); + System.out.println(+(00)); + System.out.println(-(-0x1)); + System.out.println(-(0x1)); + System.out.println(-(0x0)); + System.out.println(+(-0x1)); + System.out.println(+(0x1)); + System.out.println(+(0x0)); + System.out.println(!false); + System.out.println(!true); + } +} diff --git a/tests/test14.java b/tests/test14.java new file mode 100644 index 0000000..1adeca4 --- /dev/null +++ b/tests/test14.java @@ -0,0 +1,40 @@ +/*Operadores unários aplicados a variáveis*/ +class test14 +{ + public static void main(String[] args) + { + boolean b1, b2; + int a, b, c, d, e, f, g, h, i, j, k, l; + + b1 = false; + b2 = true; + + a = -1; b = 1; c = 0; + d = -01; e = 01; f = 00; + g = -0x1; h = 0x1; i = 0x0; + + System.out.println(-a); + System.out.println(-b); + System.out.println(-c); + System.out.println(+a); + System.out.println(+b); + System.out.println(+c); + + System.out.println(-d); + System.out.println(-e); + System.out.println(-f); + System.out.println(+d); + System.out.println(+e); + System.out.println(+f); + + System.out.println(-g); + System.out.println(-h); + System.out.println(-i); + System.out.println(+g); + System.out.println(+h); + System.out.println(+i); + + System.out.println(!b1); + System.out.println(!b2); + } +} diff --git a/tests/test15.java b/tests/test15.java new file mode 100644 index 0000000..873897a --- /dev/null +++ b/tests/test15.java @@ -0,0 +1,101 @@ +/*Operadores binários aplicados a literais*/ +class test15 +{ + public static void main(String[] args) + { + //1 - 4 + System.out.println(1+0xF); + System.out.println(0xF-(-1)); + System.out.println(-07+1); + System.out.println(-33-7); + + //5 - 11 + System.out.println(1*13); + System.out.println(0x1*0xD); + System.out.println(01*7); + System.out.println(7*3); + System.out.println(8*(-2)); + System.out.println((-4)*02); + System.out.println((-3)*(0x3)); + + //12 - 19 + System.out.println(3/3); + System.out.println(3/2); + System.out.println(3/4); + System.out.println(-3/3); + System.out.println(3/(-2)); + System.out.println(3/0x4); + System.out.println(05/07); + System.out.println(100/50); + + //20 - 27 + System.out.println(3%3); + System.out.println(3%2); + System.out.println(3%4); + System.out.println(-3%3); + System.out.println(3%(-2)); + System.out.println(3%0x4); + System.out.println(05%07); + System.out.println(100%50); + + //28 - 33 + System.out.println(03 < 2); + System.out.println(2 < 3); + System.out.println(1 < 0x1); + System.out.println(-3 < 02); + System.out.println(-0x2 < -3); + System.out.println(-3 < -3); + + //34 - 39 + System.out.println(0x3 <= 2); + System.out.println(2 <= 03); + System.out.println(1 <= 1); + System.out.println(-3 <= 0x2); + System.out.println(-02 <= -03); + System.out.println(-0x3 <= -3); + + //40 - 45 + System.out.println(3 > 02); + System.out.println(2 > 0x3); + System.out.println(0x1 > 0x1); + System.out.println(-3 > 2); + System.out.println(-02 > -3); + System.out.println(-0x3 > -3); + + //46 - 51 + System.out.println(0x3 >= 2); + System.out.println(2 >= 3); + System.out.println(1 >= 01); + System.out.println(-03 >= 2); + System.out.println(-2 >= -0x3); + System.out.println(-03 >= -0x3); + + //52 - 57 + System.out.println(3 != 2); + System.out.println(02 != 3); + System.out.println(01 != 1); + System.out.println(-0x3 != 2); + System.out.println(-2 != -0x3); + System.out.println(-3 != -03); + + //58 - 63 + System.out.println(3 == 0x2); + System.out.println(2 == 03); + System.out.println(0x1 == 1); + System.out.println(-03 == 2); + System.out.println(-2 == -3); + System.out.println(-03 == -0x3); + + //64 - 67 + System.out.println(true && true); + System.out.println(true && false); + System.out.println(false && true); + System.out.println(false && false); + + //68 - 71 + System.out.println(true || true); + System.out.println(true || false); + System.out.println(false || true); + System.out.println(false || false); + } +} diff --git a/tests/test16.java b/tests/test16.java new file mode 100644 index 0000000..77f8a5e --- /dev/null +++ b/tests/test16.java @@ -0,0 +1,23 @@ +/*Whiles*/ +class test16 +{ + public static void main(String[] args) + { + boolean b; + int i, r, lim; + + i = 1; r = 0; + lim = Integer.parseInt(args[0]); + + while(i <= lim) + { + r = r + i; + i = i + 1; + } + + System.out.println(r); + + b = false; + while(b) {} + } +} diff --git a/tests/test17.java b/tests/test17.java new file mode 100644 index 0000000..3da1693 --- /dev/null +++ b/tests/test17.java @@ -0,0 +1,52 @@ +/*Ifs*/ +class test17 +{ + public static void main(String[] args) + { + boolean b1, b2; + + b1 = true; b2 = false; + + if(b1) + System.out.println(0); + + if(b2) + System.out.println(1); + + if(b1) + System.out.println(2); + else + System.out.println(3); + + if(b2) + System.out.println(4); + else + System.out.println(5); + + if(b1) {} + + if(b2) {} + + if(b1) {} + else {} + + if(b2) {} + else {} + + if(b1) + System.out.println(6); + else {} + + if(b2) + System.out.println(7); + else {} + + if(b1) {} + else + System.out.println(8); + + if(b2) {} + else + System.out.println(9); + } +} diff --git a/tests/test18.java b/tests/test18.java new file mode 100644 index 0000000..fe13090 --- /dev/null +++ b/tests/test18.java @@ -0,0 +1,8 @@ +/*Dotlength aplicado ao array de strings dos argumentos do programa*/ +class test18 +{ + public static void main(String[] args) + { + System.out.println(args.length); + } +} diff --git a/tests/test19.java b/tests/test19.java new file mode 100644 index 0000000..d43ed01 --- /dev/null +++ b/tests/test19.java @@ -0,0 +1,12 @@ +/*Dotlength aplicado ao array de strings dos argumentos do programa*/ +class test19 +{ + public static void main(String[] args) + { + int a; + + a = args.length; + + System.out.println(a); + } +} diff --git a/tests/test2.java b/tests/test2.java new file mode 100644 index 0000000..a66708a --- /dev/null +++ b/tests/test2.java @@ -0,0 +1,11 @@ +/*Declaração de variáveis locais*/ +class test2 +{ + public static void main(String[] args) + { + int a, b, c, d; + boolean e, f, g, h, i; + int[] j, k, l, m; + boolean[] n, o, p, q; + } +} diff --git a/tests/test20.java b/tests/test20.java new file mode 100644 index 0000000..ebdac50 --- /dev/null +++ b/tests/test20.java @@ -0,0 +1,78 @@ +/*Chamadas a funções*/ +class test20 +{ + public static void main(String[] args) + { + int a, b; + int[] a2, b2; + boolean c, d; + boolean[] c2, d2; + + a = test1(); + b = test2(a, -1); + c = test3(); + d = test4(); + + a2 = test5(); + b2 = test6(); + c2 = test7(); + d2 = test8(); + + System.out.println(a); + System.out.println(b); + System.out.println(c); + System.out.println(d); + System.out.println(b2[0]); + System.out.println(d2[0]); + System.out.println(d2[1]); + } + + public static int test1() + { + return 1; + } + + public static int test2(int a, int b) + { + return a + b; + } + + public static boolean test3() + { + return true; + } + + public static boolean test4() + { + return false; + } + + public static int[] test5() + { + return new int[2]; + } + + public static int[] test6() + { + int[] b; + b = new int[1]; + b[0] = 0x7F; + + return b; + } + + public static boolean[] test7() + { + return new boolean[0]; + } + + public static boolean[] test8() + { + boolean[] a; + a = new boolean[7]; + a[0] = false; + a[1] = true; + + return a; + } +} diff --git a/tests/test21.java b/tests/test21.java new file mode 100644 index 0000000..8660abb --- /dev/null +++ b/tests/test21.java @@ -0,0 +1,35 @@ +/*Short circuiting*/ +class test21 +{ + public static void main(String[] args) + { + int a, b; + boolean c, d; + + c = true && test1(); + d = false && test1(); + + c = true && test2(); + d = false && test2(); + + c = false && test1(); + d = true && test1(); + + c = false && test2(); + d = true && test2(); + } + + public static boolean test1() + { + System.out.println(1); + + return true; + } + + public static boolean test2() + { + System.out.println(2); + + return false; + } +} diff --git a/tests/test22.java b/tests/test22.java new file mode 100644 index 0000000..c5f89f7 --- /dev/null +++ b/tests/test22.java @@ -0,0 +1,15 @@ +/*Atribuição de variáveis a outras variáveis (arrays globais)*/ +class test22 +{ + static int[] a1, a2; + static boolean[] b1, b2; + + public static void main(String[] args) + { + a1 = a2; + a2 = a1; + + b1 = b2; + b2 = b1; + } +} diff --git a/tests/test23.java b/tests/test23.java new file mode 100644 index 0000000..0c61566 --- /dev/null +++ b/tests/test23.java @@ -0,0 +1,15 @@ +/*Inicialização de arrays globais*/ +class test23 +{ + static int[] a1, a2; + static boolean[] b1, b2; + + public static void main(String[] args) + { + a1 = new int[3]; + a2 = new int[0]; + + b1 = new boolean[4]; + b2 = new boolean[0]; + } +} diff --git a/tests/test24.java b/tests/test24.java new file mode 100644 index 0000000..40fd03b --- /dev/null +++ b/tests/test24.java @@ -0,0 +1,15 @@ +/*Inicialização de arrays locais*/ +class test24 +{ + public static void main(String[] args) + { + int[] a1, a2; + boolean[] b1, b2; + + a1 = new int[3]; + a2 = new int[0]; + + b1 = new boolean[4]; + b2 = new boolean[0]; + } +} diff --git a/tests/test25.java b/tests/test25.java new file mode 100644 index 0000000..c0b3e51 --- /dev/null +++ b/tests/test25.java @@ -0,0 +1,21 @@ +/*Dotlength de arrays globais*/ +class test25 +{ + static int[] a1, a2; + static boolean[] b1, b2; + + public static void main(String[] args) + { + a1 = new int[3]; + a2 = new int[0]; + + b1 = new boolean[4]; + b2 = new boolean[0]; + + System.out.println(a1.length); + System.out.println(a2.length); + + System.out.println(b1.length); + System.out.println(b2.length); + } +} diff --git a/tests/test26.java b/tests/test26.java new file mode 100644 index 0000000..d59a79f --- /dev/null +++ b/tests/test26.java @@ -0,0 +1,21 @@ +/*Dotlength de arrays locais*/ +class test26 +{ + public static void main(String[] args) + { + int[] a1, a2; + boolean[] b1, b2; + + a1 = new int[3]; + a2 = new int[0]; + + b1 = new boolean[4]; + b2 = new boolean[0]; + + System.out.println(a1.length); + System.out.println(a2.length); + + System.out.println(b1.length); + System.out.println(b2.length); + } +} diff --git a/tests/test27.java b/tests/test27.java new file mode 100644 index 0000000..d89c6f9 --- /dev/null +++ b/tests/test27.java @@ -0,0 +1,36 @@ +/*Indexação de arrays alocados mas não inicializados*/ +class test27 +{ + static int[] a1; + static boolean[] b1; + + public static void main(String[] args) + { + int[] a2; + boolean[] b2; + + a1 = new int[3]; + a2 = new int[3]; + + b1 = new boolean[4]; + b2 = new boolean[4]; + + System.out.println(a1[0]); + System.out.println(a1[1]); + System.out.println(a1[2]); + + System.out.println(a2[0]); + System.out.println(a2[1]); + System.out.println(a2[2]); + + System.out.println(b1[0]); + System.out.println(b1[1]); + System.out.println(b1[2]); + System.out.println(b1[3]); + + System.out.println(b2[0]); + System.out.println(b2[1]); + System.out.println(b2[2]); + System.out.println(b2[3]); + } +} diff --git a/tests/test28.java b/tests/test28.java new file mode 100644 index 0000000..503130e --- /dev/null +++ b/tests/test28.java @@ -0,0 +1,52 @@ +/*Atribuição de valores a posições de arrays*/ +class test28 +{ + static int[] a1; + static boolean[] b1; + + public static void main(String[] args) + { + int[] a2; + boolean[] b2; + + a1 = new int[3]; + a1[0] = -1; + a1[1] = 0x0; + a1[2] = 01; + + a2 = new int[3]; + a2[0] = -2; + a2[1] = 0x0; + a2[2] = 02; + + b1 = new boolean[4]; + b1[0] = false; + b1[1] = true; + b1[2] = false; + b1[3] = true; + + b2 = new boolean[4]; + b2[0] = false; + b2[1] = true; + b2[2] = false; + b2[3] = true; + + System.out.println(a1[0]); + System.out.println(a1[1]); + System.out.println(a1[2]); + + System.out.println(a2[0]); + System.out.println(a2[1]); + System.out.println(a2[2]); + + System.out.println(b1[0]); + System.out.println(b1[1]); + System.out.println(b1[2]); + System.out.println(b1[3]); + + System.out.println(b2[0]); + System.out.println(b2[1]); + System.out.println(b2[2]); + System.out.println(b2[3]); + } +} diff --git a/tests/test29.java b/tests/test29.java new file mode 100644 index 0000000..001586f --- /dev/null +++ b/tests/test29.java @@ -0,0 +1,73 @@ +/*Programas mais complexos*/ +class test29 +{ + static boolean[] isNegative; + + public static void main(String[] args) + { + int i, sum, fib; + int[] parsedArgs, aux; + + i = 0; + parsedArgs = new int[args.length]; + while(i < args.length) + { + parsedArgs[i] = Integer.parseInt(args[i]); + i = i + 1; + } + + aux = change(parsedArgs); + sum = sum(aux); + fib = fibonacci(sum); + + System.out.println(fib); + + } + + public static int[] change(int[] array) + { + int i; + + i = 0; + isNegative = new boolean[array.length]; + while(i < array.length) + { + if(array[i] < 0) + { + isNegative[i] = true; + array[i] = array[i] + 1; + } + else if(array[i] > 0) + { + isNegative[i] = false; + array[i] = array[i] - 1; + } + + i = i + 1; + } + + return array; + } + + public static int sum(int[] array) + { + int i, sum; + + i = 0; sum = 0; + while(i < array.length) + { + sum = sum + array[i]; + i = i + 1; + } + + return sum; + } + + public static int fibonacci(int n) + { + if(n <= 1) + return 1; + else + return fibonacci(n -1) + fibonacci(n -2); + } +} diff --git a/tests/test3.java b/tests/test3.java new file mode 100644 index 0000000..89a25ad --- /dev/null +++ b/tests/test3.java @@ -0,0 +1,24 @@ +/*Impressão de literais*/ +class test3 +{ + public static void main(String[] args) + { + System.out.println(-1); + System.out.println(0); + System.out.println(-0); + System.out.println(1); + System.out.println(07); + System.out.println(-07); + System.out.println(010); + System.out.println(00); + System.out.println(-0xF); + System.out.println(-0xf); + System.out.println(0x0); + System.out.println(0x1); + System.out.println(0x9); + System.out.println(0xA); + System.out.println(0x10); + System.out.println(false); + System.out.println(true); + } +} diff --git a/tests/test30.java b/tests/test30.java new file mode 100644 index 0000000..e5ec0fd --- /dev/null +++ b/tests/test30.java @@ -0,0 +1,46 @@ +/*Fluxo de controlo*/ +class test30 +{ + static int i; + static boolean b; + + public static void main(String[] args) + { + int j; + + i = 0; + while(i <= 100) + { + if(i > 10 && test1()) + {} + + j = 0; + while(j <= 10) {j = j + 1;} + + if(!b) + {} + else + { + System.out.println(args.length); + } + + i = i + 1; + } + } + + public static boolean test1() + { + System.out.println(i); + + if(i >= 50) + { + b = true; + return true; + } + else + { + b = false; + return false; + } + } +} diff --git a/tests/test31.java b/tests/test31.java new file mode 100644 index 0000000..e0d23f8 --- /dev/null +++ b/tests/test31.java @@ -0,0 +1,32 @@ +/*Atribuição a variáveis que são parâmetros da função*/ +class test31 +{ + public static void main(String[] args) + { + int a, e; + int[] b; + boolean c; + boolean[] d; + + a = 1; + b = new int[2]; + b[0] = -1; + b[1] = 0x1; + c = true; + d = new boolean[2]; + d[0] = false; + d[1] = true; + + e = test1(a, b, c, d); + } + + public static int test1(int a, int[] b, boolean c, boolean[] d) + { + a = -a; + b = new int[2]; + c = !c; + d = new boolean[2]; + + return 0; + } +} diff --git a/tests/test32.java b/tests/test32.java new file mode 100644 index 0000000..4d2e9ce --- /dev/null +++ b/tests/test32.java @@ -0,0 +1,39 @@ +/*Cortesia de Joca Leitão*/ +class test32 +{ + static int a, b, c; + static boolean d, e; + static int[] f, g; + static boolean[] h, i, j; + + public static void main(String[] args) + { + int a; + + a = 0; + while (a < args.length) + { + System.out.println(Integer.parseInt(args[a])); + a = a + 1; + } + + f = new int[4]; + + f[3] = 3; + + g = banana(); + + f[0] = g[2]; + } + + public static int[] banana(){ + int[] f2; + + f2 = new int[4]; + + f2[3] = 3; + + return f2; + } +} + diff --git a/tests/test33.java b/tests/test33.java new file mode 100644 index 0000000..aad5693 --- /dev/null +++ b/tests/test33.java @@ -0,0 +1,67 @@ +/*Cortesia de Ribeiro Lourenço e Joca Leitão*/ +class test33 +{ + static int a, b, c; + static boolean d, e; + static int[] f, g; + static boolean[] h, i, j; + + public static void main(String[] args) + { + int a; + + a = 0; + + h = new boolean[9]; + g = new int[3]; + + while (a < args.length) + { + System.out.println(Integer.parseInt(args[a])); + a = a + 1; + } + + g[g[g[2]]] = 2; + + f = new int[4]; + + f[3] = 3; + + a = f[1]; + + g = banana(3); + + f[0] = g[2]; + + return; + } + + public static int[] banana(int a){ + int[] f2; + int i; + + f2 = new int[a]; + + if (a > 7) + { + h[8] = true; + f2[3] = 3; + } + + else + { + h[0] = false; + i = 0; + while (i < 9) + { + if ( a%2 == 0) + f2[i] = a*2 + i*7; + h[i] = true; + i = i + 1; + } + } + + return f2; + } +} + diff --git a/tests/test4.java b/tests/test4.java new file mode 100644 index 0000000..159cd8f --- /dev/null +++ b/tests/test4.java @@ -0,0 +1,15 @@ +/*Atribuição de variáveis locais (sem arrays)*/ +class test4 +{ + public static void main(String[] args) + { + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10; + int a11, a12, a13, a14; + boolean a15, a16; + + a1 = -1; a2 = 0; a3 = 1; a4 = 07; a5 = -07; + a6 = 010; a7 = 00; a8 = -0xF; a9 = -0xf; + a10 = 0x0; a11 = 0x1; a12 = 0x9; a13 = 0xA; + a14 = 0x10; a15 = false; a16 = true; + } +} diff --git a/tests/test5.java b/tests/test5.java new file mode 100644 index 0000000..1ec9d64 --- /dev/null +++ b/tests/test5.java @@ -0,0 +1,15 @@ +/*Atribuição de variáveis globais (sem arrays)*/ +class test5 +{ + static int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10; + static int a11, a12, a13, a14; + static boolean a15, a16; + + public static void main(String[] args) + { + a1 = -1; a2 = 0; a3 = 1; a4 = 07; a5 = -07; + a6 = 010; a7 = 00; a8 = -0xF; a9 = -0xf; + a10 = 0x0; a11 = 0x1; a12 = 0x9; a13 = 0xA; + a14 = 0x10; a15 = false; a16 = true; + } +} diff --git a/tests/test6.java b/tests/test6.java new file mode 100644 index 0000000..eced283 --- /dev/null +++ b/tests/test6.java @@ -0,0 +1,32 @@ +/*Impressão de variáveis locais (sem arrays)*/ +class test6 +{ + public static void main(String[] args) + { + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10; + int a11, a12, a13, a14; + boolean a15, a16; + + a1 = -1; a2 = 0; a3 = 1; a4 = 07; a5 = -07; + a6 = 010; a7 = 00; a8 = -0xF; a9 = -0xf; + a10 = 0x0; a11 = 0x1; a12 = 0x9; a13 = 0xA; + a14 = 0x10; a15 = false; a16 = true; + + System.out.println(a1); + System.out.println(a2); + System.out.println(a3); + System.out.println(a4); + System.out.println(a5); + System.out.println(a6); + System.out.println(a7); + System.out.println(a8); + System.out.println(a9); + System.out.println(a10); + System.out.println(a11); + System.out.println(a12); + System.out.println(a13); + System.out.println(a14); + System.out.println(a15); + System.out.println(a16); + } +} diff --git a/tests/test7.java b/tests/test7.java new file mode 100644 index 0000000..33d6052 --- /dev/null +++ b/tests/test7.java @@ -0,0 +1,32 @@ +/*Impressão de variáveis globais (sem arrays)*/ +class test7 +{ + static int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10; + static int a11, a12, a13, a14; + static boolean a15, a16; + + public static void main(String[] args) + { + a1 = -1; a2 = 0; a3 = 1; a4 = 07; a5 = -07; + a6 = 010; a7 = 00; a8 = -0xF; a9 = -0xf; + a10 = 0x0; a11 = 0x1; a12 = 0x9; a13 = 0xA; + a14 = 0x10; a15 = false; a16 = true; + + System.out.println(a1); + System.out.println(a2); + System.out.println(a3); + System.out.println(a4); + System.out.println(a5); + System.out.println(a6); + System.out.println(a7); + System.out.println(a8); + System.out.println(a9); + System.out.println(a10); + System.out.println(a11); + System.out.println(a12); + System.out.println(a13); + System.out.println(a14); + System.out.println(a15); + System.out.println(a16); + } +} diff --git a/tests/test8.java b/tests/test8.java new file mode 100644 index 0000000..85933ff --- /dev/null +++ b/tests/test8.java @@ -0,0 +1,17 @@ +/*Acesso a parâmetros da linha de comandos*/ +class test8 +{ + public static void main(String[] args) + { + System.out.println(Integer.parseInt(args[0])); + System.out.println(Integer.parseInt(args[1])); + System.out.println(Integer.parseInt(args[2])); + System.out.println(Integer.parseInt(args[3])); + System.out.println(Integer.parseInt(args[4])); + System.out.println(Integer.parseInt(args[5])); + System.out.println(Integer.parseInt(args[6])); + System.out.println(Integer.parseInt(args[7])); + System.out.println(Integer.parseInt(args[8])); + System.out.println(Integer.parseInt(args[9])); + } +} diff --git a/tests/test9.java b/tests/test9.java new file mode 100644 index 0000000..5fe0969 --- /dev/null +++ b/tests/test9.java @@ -0,0 +1,22 @@ +/*Distinção entre variáveis locais e globais*/ +class test9 +{ + static int a, b, c; + static boolean e, f, g; + + public static void main(String[] args) + { + int a, b; + boolean e; + + a = -1; b = 07; c = 0x10; + e = true; f = false; g = true; + + System.out.println(a); + System.out.println(b); + System.out.println(c); + System.out.println(e); + System.out.println(f); + System.out.println(g); + } +} From e484690b43f0fa7c8a93b40908f904d17ce84a29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Mon, 2 Jun 2014 03:29:44 +0100 Subject: [PATCH 34/39] SUCCESS MOTHERFUCKERS --- codeGen.c | 76 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 44 insertions(+), 32 deletions(-) diff --git a/codeGen.c b/codeGen.c index 99afd88..1ae20f6 100644 --- a/codeGen.c +++ b/codeGen.c @@ -17,6 +17,8 @@ typedef struct _ExprRet extern Class* myProgram; extern ClassTable* symbolsTable; extern MethodTable* currentLocalTable; + +char prevLabel[100]; char* argCountName; Type curFunctionType; char* curFunctionName; @@ -200,19 +202,19 @@ void genStmt(Stmt* stmt) int thisIfElseNumber = ifNumber++; int compVarNumber = genExpr(stmt->expr1).tempVarNum; - printf("\tbr i1 %%%d, label %%ifthen%d, label %%ifelse%d\n\n", compVarNumber, thisIfElseNumber, thisIfElseNumber); + printf("\tbr i1 %%%d, label %%if.then%d, label %%if.else%d\n\n", compVarNumber, thisIfElseNumber, thisIfElseNumber); - printf("ifthen%d:\n", thisIfElseNumber); + printf("if.then%d:\n", thisIfElseNumber); if(stmt->stmt1 != NULL) genStmt(stmt->stmt1); - printf("\tbr label %%ifend%d\n\n", thisIfElseNumber); + printf("\tbr label %%if.end%d\n\n", thisIfElseNumber); - printf("ifelse%d:\n", thisIfElseNumber); + printf("if.else%d:\n", thisIfElseNumber); if(stmt->stmt2 != NULL) genStmt(stmt->stmt2); - printf("\tbr label %%ifend%d\n\n", thisIfElseNumber); + printf("\tbr label %%if.end%d\n\n", thisIfElseNumber); - printf("ifend%d:\n", thisIfElseNumber); + printf("if.end%d:\n", thisIfElseNumber); } else if(stmt->type == RETURN_T) { @@ -238,17 +240,17 @@ void genStmt(Stmt* stmt) { int thisWhileNum = whileNumber++; - printf("\tbr label %%whilestart%d\n\n", thisWhileNum); - printf("whilestart%d:\n", thisWhileNum); + printf("\tbr label %%while.start%d\n\n", thisWhileNum); + printf("while.start%d:\n", thisWhileNum); int exprVarNumber = genExpr(stmt->expr1).tempVarNum; - printf("\tbr i1 %%%d, label %%whiledo%d, label %%whileend%d\n\n", exprVarNumber, thisWhileNum, thisWhileNum); + printf("\tbr i1 %%%d, label %%while.do%d, label %%while.end%d\n\n", exprVarNumber, thisWhileNum, thisWhileNum); - printf("whiledo%d:\n", thisWhileNum); + printf("while.do%d:\n", thisWhileNum); if(stmt->stmt1 != NULL) genStmt(stmt->stmt1); - printf("\tbr label %%whilestart%d\n", thisWhileNum); + printf("\tbr label %%while.start%d\n", thisWhileNum); - printf("\nwhileend%d:\n", thisWhileNum); + printf("\nwhile.end%d:\n", thisWhileNum); } else if(stmt->type == PRINT_T) { @@ -349,19 +351,24 @@ ExprRet genExpr(Expr* expr) { int thisAndNumber = andNumber++; - printf("\tbr label %%andstart%d\n\n", thisAndNumber); - printf("andstart%d:\n", thisAndNumber); + //res = a + int resVarNumber = varNumber++; + printf("\t%%%d = alloca i1\n", resVarNumber); + int leftExprIdNum = genExpr(expr->expr1).tempVarNum; + printf("\tstore i1 %%%d, i1* %%%d\n", leftExprIdNum, resVarNumber); - leftExprId = genExpr(expr->expr1); - printf("\t%%%d = icmp eq i1 0, %%%d\n", varNumber++, leftExprId.tempVarNum); - printf("\tbr i1 %%%d, label %%andend%d, label %%anddo%d\n", varNumber-1, thisAndNumber, thisAndNumber); + //if(a) + printf("\t%%%d = icmp eq i1 1, %%%d\n", varNumber++, leftExprIdNum); + printf("\tbr i1 %%%d, label %%and.do%d, label %%and.end%d\n\n", varNumber -1, thisAndNumber, thisAndNumber); - printf("anddo%d:\n", thisAndNumber); - rightExprId = genExpr(expr->expr2); - printf("\tbr label %%andend%d\n\n", thisAndNumber); + //res = a + printf("and.do%d:\n", thisAndNumber); + int rightExprIdNum = genExpr(expr->expr2).tempVarNum; + printf("\tstore i1 %%%d, i1* %%%d\n", rightExprIdNum, resVarNumber); + printf("\tbr label %%and.end%d\n\n", thisAndNumber); - printf("andend%d:\n", thisAndNumber); - printf("\t%%%d = phi i1 [ false, %%andstart%d ], [ %%%d, %%anddo%d ]\n", varNumber++, thisAndNumber, rightExprId.tempVarNum, thisAndNumber); + printf("and.end%d:", thisAndNumber); + printf("%%%d = load i1* %%%d\n", varNumber++, resVarNumber); returnValue.tempVarNum = varNumber -1; returnValue.type = BOOL_T; @@ -370,19 +377,24 @@ ExprRet genExpr(Expr* expr) { int thisOrNumber = orNumber++; - printf("\tbr label %%orstart%d\n\n", thisOrNumber); - printf("orstart%d:\n", thisOrNumber); + //res = a + int resVarNumber = varNumber++; + printf("\t%%%d = alloca i1\n", resVarNumber); + int leftExprIdNum = genExpr(expr->expr1).tempVarNum; + printf("\tstore i1 %%%d, i1* %%%d\n", leftExprIdNum, resVarNumber); - leftExprId = genExpr(expr->expr1); - printf("\t%%%d = icmp eq i1 1, %%%d\n", varNumber++, leftExprId.tempVarNum); - printf("\tbr i1 %%%d, label %%orend%d, label %%ordo%d\n", varNumber-1, thisOrNumber, thisOrNumber); + //if(!a) + printf("\t%%%d = icmp eq i1 0, %%%d\n", varNumber++, leftExprIdNum); + printf("\tbr i1 %%%d, label %%or.do%d, label %%or.end%d\n\n", varNumber -1, thisOrNumber, thisOrNumber); - printf("ordo%d:\n", thisOrNumber); - rightExprId = genExpr(expr->expr2); - printf("\tbr label %%orend%d\n\n", thisOrNumber); + //res = a + printf("or.do%d:\n", thisOrNumber); + int rightExprIdNum = genExpr(expr->expr2).tempVarNum; + printf("\tstore i1 %%%d, i1* %%%d\n", rightExprIdNum, resVarNumber); + printf("\tbr label %%or.end%d\n\n", thisOrNumber); - printf("orend%d:\n", thisOrNumber); - printf("\t%%%d = phi i1 [ true, %%orstart%d ], [ %%%d, %%ordo%d ]\n", varNumber++, thisOrNumber, rightExprId.tempVarNum, thisOrNumber); + printf("or.end%d:", thisOrNumber); + printf("%%%d = load i1* %%%d\n", varNumber++, resVarNumber); returnValue.tempVarNum = varNumber -1; returnValue.type = BOOL_T; From a1e4a44735ccd2494abb34f9296550448398a885 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Mon, 2 Jun 2014 03:30:46 +0100 Subject: [PATCH 35/39] Another test added to the party. --- tests/args/test34args.txt | 0 tests/test34.java | 29 +++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 tests/args/test34args.txt create mode 100644 tests/test34.java diff --git a/tests/args/test34args.txt b/tests/args/test34args.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/test34.java b/tests/test34.java new file mode 100644 index 0000000..324353a --- /dev/null +++ b/tests/test34.java @@ -0,0 +1,29 @@ +/*Expressões random*/ +class test34 +{ + public static void main(String[] args) + { + int a; + boolean b, b11, b12; + boolean[] b2; + + a = (new int[1])[0]; + System.out.println(a); + + b2 = new boolean[2]; + b2[0] = true; b2[1] = false; + b11 = false; b12 = false; + b = b12 && (b11 || b12); + System.out.println(b); + b = b2[0] && (b2[1] || (test1() && (b2[1] && b2[0]))); + System.out.println(b); + } + + public static boolean test1() + { + boolean b1, b2; + b1 = true; b2 = false; + + return b1 || b2 && b1 && b2; + } +} From ae3c718217b14b664dec4de4fd1fb61bca11054a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Mon, 2 Jun 2014 03:58:47 +0100 Subject: [PATCH 36/39] SUCCESS MOTHERFUCKERS --- codeGen.c | 1 + 1 file changed, 1 insertion(+) diff --git a/codeGen.c b/codeGen.c index 1ae20f6..dada518 100644 --- a/codeGen.c +++ b/codeGen.c @@ -615,3 +615,4 @@ void getOpLLVM(char* llvmOp, OpType opType) { sprintf(llvmOp, "%s", llvmOps[opType]); } + From f55e370c1ab0bd2de433cb0c900ecfc0855512f5 Mon Sep 17 00:00:00 2001 From: joaosimoes Date: Mon, 2 Jun 2014 15:02:10 +0100 Subject: [PATCH 37/39] Report Update --- report/report.tex | 160 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 157 insertions(+), 3 deletions(-) diff --git a/report/report.tex b/report/report.tex index a7ffb42..d647a3d 100644 --- a/report/report.tex +++ b/report/report.tex @@ -32,6 +32,8 @@ \usepackage{float} \usepackage{makeidx} +\usepackage[margin=1.3in]{geometry} + \usepackage{graphicx} \setlength{\parindent}{1cm} @@ -156,14 +158,166 @@ \subsection{Tratamento dos Comentários} \newpage -\section{Análise Semântica} +\section{Análise Sintática} + +Após terminada a fase da análise lexical, segue-se a análise sintática. Uma vez que nesta vamos ter em conta as precedências dos operadores, foram feitos alguns ajustes nos tokens detectados. Estas alterções serão explicadas de seguida. + +\subsection{Alterações na Análise Léxical} -Nesta secção +Como dito anteriormente, houve necessidade de efectuar algumas alterações à organização dos \emph{tokens} realtivos aos operadores. Estas alterações devem-se à necessidade de termos em conta as precedências dos operadores. Assim, após alterações obtivemos os seguintes tokens relativos aos operadores. + +\begin{itemize} + \item \textbf{AND} - \&\& + \item \textbf{OR} - $\|$ + \item \textbf{RELCOMPAR} - $< , >, <= , >=$ + \item \textbf{EQUALITY} - $, == , !=$ + \item \textbf{ADDITIVE} - $ , == , != $ + \item \textbf{MULTIPLIC} - $* , / , \% $ +\end{itemize} + +Para além das alterações acima referidas, foram ainda feitas outras em relação à contagem da linha e da coluna. Uma vez que aquando da mostragem da mensagem de erro sintático, o número da linha e da coluna apresentadas têm de corresponder ao inicio do \emph{token} inválido. Logo, esta informação foi guardada de forma a depois ser acedida no analisador sintático. + +\subsection{Gramática da Linguagem} + +A gramática da linguagem \emph{iJava}, apresenta-se de seguida segundo a notação \emph{EBNF}: +\vspace{0.5cm} + +\hspace{-1cm}\vspace{.1cm}Start $\rightarrow$ Program \\ \\ +\vspace{.5cm}Program $\rightarrow$ CLASS ID OBRACE { FieldDecl $\mid$ MethodDecl } CBRACE\\ +\vspace{.5cm}FieldDecl $\rightarrow$ STATIC VarDecl\\ +MethodDecl $\rightarrow$ PUBLIC STATIC ( Type $\mid$ VOID ) ID OCURV [ FormalParams ] CCURV OBRACE { VarDecl } { Statement } CBRACE\\ \\ +\vspace{.5cm}FormalParams $\rightarrow$ Type ID { COMMA Type ID }\\ +\vspace{.5cm}FormalParams $\rightarrow$ STRING OSQUARE CSQUARE ID\\ +\vspace{.5cm}VarDecl $\rightarrow$ Type ID { COMMA ID } SEMIC\\ +\vspace{.5cm}Type $\rightarrow$ ( INT $\mid$ BOOL ) [ OSQUARE CSQUARE ]\\ +\vspace{.5cm}Statement $\rightarrow$ OBRACE { Statement } CBRACE\\ +\vspace{.5cm}Statement $\rightarrow$ IF OCURV Expr CCURV Statement [ ELSE Statement ]\\ +\vspace{.5cm}Statement $\rightarrow$ WHILE OCURV Expr CCURV Statement\\ +\vspace{.5cm}Statement $\rightarrow$ PRINT OCURV Expr CCURV SEMIC\\ +\vspace{.5cm}Statement $\rightarrow$ ID [ OSQUARE Expr CSQUARE ] ASSIGN Expr SEMIC\\ +\vspace{.5cm}Statement $\rightarrow$ RETURN [ Expr ] SEMIC\\ +\vspace{.5cm}Expr $\rightarrow$ Expr ( OP1 $\mid$ OP2 $\mid$ OP3 $\mid$ OP4 ) Expr\\ +\vspace{.5cm}Expr $\rightarrow$ Expr OSQUARE Expr CSQUARE\\ +\vspace{.5cm}Expr $\rightarrow$ ID $\mid$ INTLIT $\mid$ BOOLLIT\\ +\vspace{.5cm}Expr $\rightarrow$ NEW ( INT $\mid$ BOOL ) OSQUARE Expr CSQUARE\\ +\vspace{.5cm}Expr $\rightarrow$ OCURV Expr CCURV\\ +\vspace{.5cm}Expr $\rightarrow$ Expr DOTLENGTH $\mid$ ( OP3 $\mid$ NOT ) Expr\\ +\vspace{.5cm}Expr $\rightarrow$ PARSEINT OCURV ID OSQUARE Expr CSQUARE CCURV\\ +\vspace{.5cm}Expr $\rightarrow$ ID OCURV [ Args ] CCURV\\ +\vspace{.5cm}Args $\rightarrow$ Expr { COMMA Expr }\\ + + +Após a interpretação da gramática dada, definimos a gramática seguindo a notação do \emph{YACC}. A gramática obtida após definição de precedências e após alterações relativamente à gramática acima, foi a seguinte seguida(todas as alterações e definições de precedências serão abordadas com detalhe nas proximas secções). + +\vspace{0.7cm} + +\lstset{language=C,caption={Gramática obtida segundo a representação do YACC},label=Estruturas,numbers=left,frame=single, breaklines = true} +\begin{lstlisting} + +start: CLASS ID '{' decls '}' + | CLASS ID '{' '}' + +decls: decls fielddecl + | decls methoddecl + +fielddecl: STATIC type ID idlist ';' + +methoddecl: PUBLIC STATIC methodtype ID '(' formalparams ')' '{' vardecl stmtlist '}' + +methodtype: type + | VOID + +formalparams: type ID formalparamslist + | STRING '[' ']' ID + | + +formalparamslist: formalparamslist ',' type ID + | + +stmtlist: stmtlist statement + | + +vardecl: vardecl type ID idlist ';' + | + +idlist: idlist ',' ID + | + +type: INT '[' ']' + | BOOL '[' ']' + | INT + | BOOL + +statement: '{' stmtlist '}' + | IF '(' expr ')' statement ELSE statement %prec ELSE + | IF '(' expr ')' statement %prec IFX + | WHILE '(' expr ')' statement + | PRINT '(' expr ')' ';' + | ID '[' expr ']' '=' expr ';' + | ID '=' expr ';' + | RETURN expr ';' + | RETURN ';' + +expr: exprindex + | exprnotindex + +exprindex: ID + | INTLIT + | BOOLLIT + | '(' expr ')' + | expr DOTLENGTH + | PARSEINT '(' ID '[' expr ']' ')' + | ID '(' args ')' + | ID '(' ')' + | exprindex '[' expr ']' + +exprnotindex: NEW INT '[' expr ']' + | NEW BOOL '[' expr ']' + | '!' expr %prec UNARY + | ADDITIVE expr %prec UNARY + | expr AND expr + | expr OR expr + | expr RELCOMPAR expr + | expr EQUALITY expr + | expr ADDITIVE expr + | expr MULTIPLIC expr + +args: expr argslist + | expr + +argslist: ',' args -\subsection{title} +\end{lstlisting} +\subsection{Tradução da Gramática dada para o YACC} +Como referido anteriormente, foram necessárias diversas alterações à gramática dada na notação \emph{EBNF}. Nesta sub-secção vamos referenciar essas alterações explicando o seu porquê. +Uma das alterações efectuadas, é relativa à abordagem do que é "opcional"$([\dots])$, que tem "zero ou mais repetições"$(\{\dots\})$ e situações em que temos várias opções. + +\begin{itemize} + \item Nas situações em que temos símbolos "opciaís", dividimos a regra em duas regras distintas como forma de abrager os dois casos, ou seja, o caso em que tem o simbolo e o caso em que não. Noutros casos, simplesmente consideramos a possiblidade de ter a String vazia aos símbolos poderem ser opcionais. + + \item Quando existem "zero ou mais repetições", consideramos a possibilidade da String vazia, sendo ainda adicionada a recursividade de forma a permitir várias repetições da mesma regra. + + \item No caso de termos várias opções relativamente ao simbolo, é criada uma nova regra que contempla todas os simbolos possíveis. +\end{itemize} + +Outras alterações efectuadas têm a ver com a definição de precedência de operadores. Apresentamos abaixo as precedências definidas no \emph{YACC}. + +\newpage + +\lstset{language=C,caption={Precedências},label=Estruturas,frame=single, breaklines = true} +\begin{lstlisting} + %left OR + %left AND + %left EQUALITY + %left RELCOMPAR + %left ADDITIVE + %left MULTIPLIC + %right UNARY + %left '[' DOTLENGTH +\end{lstlisting} \end{document} \ No newline at end of file From f1aad7c08e2383f41c196a751a69ca1351285f7f Mon Sep 17 00:00:00 2001 From: ThrostGunnulf Date: Mon, 2 Jun 2014 23:53:40 +0100 Subject: [PATCH 38/39] Report finished --- report/report.tex | 679 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 574 insertions(+), 105 deletions(-) diff --git a/report/report.tex b/report/report.tex index d647a3d..351b7f7 100644 --- a/report/report.tex +++ b/report/report.tex @@ -1,40 +1,14 @@ % !TeX spellcheck = pt_PT \documentclass[11pt,a4paper]{article} -\usepackage{etex} -\reserveinserts{28} -\usepackage[utf8]{inputenc} - -\usepackage{hyperref} -\usepackage{amsthm} -\usepackage{amsmath} -\usepackage{amssymb} -\usepackage{amsfonts} -\usepackage[portuguese]{babel} -\usepackage{pictex} -\usepackage[dvips]{graphics} -\usepackage{enumerate} -\usepackage{color} -\usepackage[usenames,dvipsnames]{xcolor} - -\usepackage{amsmath} -\usepackage{amssymb} -\usepackage{amsfonts} +\usepackage[margin=1.3in]{geometry} \usepackage[portuguese]{babel} -\usepackage{pictex} -\usepackage[dvips]{graphics} -\usepackage{enumerate} -\usepackage{color} +\usepackage[utf8]{inputenc} \usepackage{indentfirst} +\usepackage{graphicx} \usepackage{listings} -\usepackage{tabularx} -\usepackage{multirow} -\usepackage{float} -\usepackage{makeidx} -\usepackage[margin=1.3in]{geometry} -\usepackage{graphicx} \setlength{\parindent}{1cm} @@ -51,8 +25,8 @@ {\noindent\Huge\bfseries Compilador \\[0.5\baselineskip] iJava}\\[2\baselineskip] % Title {\large \textit{Projecto da Cadeira de Compiladores}}\\[4\baselineskip] % Tagline or further description -{\Large \textsc{JOÃO OLIVEIRA - 2010129856}} \\ \\ % Author name -{\Large \textsc{JOÃO SIMOES - 2011150045}} % Author name +{\Large \textsc{João Oliveira - 2010129856}} \\ \\ % Author name +{\Large \textsc{João Simões - 2011150045}} % Author name \vspace{0.5\textheight} % Whitespace between the title block and the publisher {\noindent FCTUC - Departamento de Engenharia Informática}\\[\baselineskip] % Publisher and logo @@ -63,40 +37,39 @@ \titleGM -\section{Inrodução} +\section{Introdução} -Este projecto consistiu no desenvolvimento de um compilado para a linguagem $iJava$. Esta línguagem apresenta diversas caracteristicas específicas a serem descritas de seguida. +Este projecto consistiu no desenvolvimento de um compilador para a linguagem \textit{iJava}, de imperative \textit{Java}. Esta linguagem é uma restrição da linguagem \textit{Java}, para facilitar a implementação do compilador. -Uma das características prende-se com o facto de cada programa conter uma única classe. Esta classe pode ter incluídas variáveis estáticas e métodos \emph{public static}, assim como variáveis locais. Para além disto, é mandatória a presença de um método \emph{main}, método este a ser chamado aquando da execução do programa. Este mesmo método tem como parâmetro, por defeito, um array de \emph{Strings}, contendo os parâmetos de entrada. +Uma das características da linguagem é o facto de cada ficheiro conter uma única classe, sendo que cada programa consiste apenas num ficheiro. Uma classe pode ter variáveis globais e métodos, que por sua vez podem ter variáveis locais. Para além disto, é obrigatória a existência de um método \textit{main}, método este que será a função de entrada do programa. Este mesmo método tem como parâmetro, por defeito, um array de \textit{Strings}, contendo os parâmetos de entrada, tal como em \textit{Java}. -É ainda possível implementar expressões aritméticas e lógicas, assim como operações de atribuição, relacionais e controlo. (\emph{if-else} e \emph{while} ) +É ainda possível implementar expressões aritméticas, lógicas e relacionais, assim como statements de atribuição, indexação e controlo (\textit{if-else} e \textit{while}). -Relativamente aos tipos de variáveis existentes na linguagem, é possivel usar varíaveis do tipo \emph{Integer} e \emph{Boolean}. É ainda possível criar arrays unidimensionais dos tipo apresentados anteriormente. +Relativamente aos tipos de variáveis existentes na linguagem, é possivel usar varíaveis do tipo \textit{int} e \textit{boolean}. É ainda possível criar arrays unidimensionais dos tipo apresentados anteriormente. -Por fim, o desenvolvimento do compilador deu-se em várias fases bem definidas, fases estas que apresentamos de seguida. +Por fim, o desenvolvimento do compilador fez-se em várias fases bem definidas, fases essas que apresentamos de seguida. \begin{description} \item[Fase 1] Análise Lexical \begin{itemize} - \item Identificação dos tokens aceites pela linguagem e tradução dos mesmo para a linguagem \emph{LEX}. + \item Identificação dos tokens aceites pela linguagem, recorrendo ao \textit{LEX}. Nesta ferramenta definimos os tokens através de expressões regulares. \end{itemize} \item[Fase 2] Análise Sintática \begin{itemize} - \item Tradução da gramática dada para a linguagem \emph{YACC} e resolução de conflitos e ambiguidades; - \item Estruturas de dados a serem criadas de forma a representar os nós da Árvore de Sintaxe Abstracta; - \item Definição de enumerações de forma a representar os diversos tipos de operações, expressões, \emph{statments}, entre outros; + \item Tradução da gramática dada para a linguagem \textit{YACC} e resolução de conflitos e ambiguidades; + \item Criação das estruturas de dados que representam os nós da Árvore de Sintaxe Abstracta; \item Implementação das funções responsáveis pela construção da AST; \item Deteção de erros sintáticos. \end{itemize} \item[Fase 3] Análise Semântica \begin{itemize} - \item Definição das estruturas de dados a serem utilizadas para a criação da tabela de símbolos; + \item Criação das estruturas de dados a utilizar para a construção da tabela de símbolos; \item Implementação dos procedimentos responsáveis pelas inserções na tabela de símbolos; - \item Detecção de erros ao nível semântico. + \item Detecção de erros semânticos. \end{itemize} \item[Fase 4] Geração de código intermédio \begin{itemize} - \item Implemententação das funções responsáveis pela geração de código \emph{LLVM}. + \item Implemententação das funções responsáveis pela geração de código \textit{LLVM}. \end{itemize} \end{description} @@ -104,28 +77,28 @@ \section{Inrodução} \section{Análise Léxical} -A primeira fase da construção do compilador consistiu na definição dos tokens aceites pela linguagem, através de expressões regulares, sendo internamente construído pelo \emph{LEX} um autómato não-determinístico capaz de reconhecer a linguagem. +A primeira fase da construção do compilador consistiu na definição dos tokens aceites pela linguagem, através de expressões regulares. Para este efeito usou-se o \textit{LEX}, que constrói internamente um autómato determinístico capaz de reconhecer esses tokens. \subsection{Tokens} -Após terminada a análise sintáticta, obtivemos os seguintes \emph{tokens}: +Após terminada a fase de análise lexical, obtivemos os seguintes \textit{tokens}: \begin{itemize} - \item \textbf{INT} - \emph{int} - \item \textbf{BOOL} - \emph{boolean} - \item \textbf{NEW} - \emph{new} - \item \textbf{IF} - \emph{if} - \item \textbf{ELSE} - \emph{else} - \item \textbf{WHILE} - \emph{while} - \item \textbf{PRINT} - \emph{System.out.println} - \item \textbf{PARSERINT} - \emph{Integer.parseInt} - \item \textbf{CLASS} - \emph{class} - \item \textbf{PUBLIC} - \emph{public} - \item \textbf{STATIC} - \emph{static} - \item \textbf{VOID} - \emph{void} - \item \textbf{STRING} - \emph{String} - \item \textbf{DOTLENGTH} - \emph{length} - \item \textbf{RETURN} - \emph{return} + \item \textbf{INT} - \textit{int} + \item \textbf{BOOL} - \textit{boolean} + \item \textbf{NEW} - \textit{new} + \item \textbf{IF} - \textit{if} + \item \textbf{ELSE} - \textit{else} + \item \textbf{WHILE} - \textit{while} + \item \textbf{PRINT} - \textit{System.out.println} + \item \textbf{PARSEINT} - \textit{Integer.parseInt} + \item \textbf{CLASS} - \textit{class} + \item \textbf{PUBLIC} - \textit{public} + \item \textbf{STATIC} - \textit{static} + \item \textbf{VOID} - \textit{void} + \item \textbf{STRING} - \textit{String} + \item \textbf{DOTLENGTH} - \textit{.length} + \item \textbf{RETURN} - \textit{return} \item \textbf{OCURV} - $($ \item \textbf{CCURV} - $)$ \item \textbf{OBRACE} - \{ @@ -137,49 +110,52 @@ \subsection{Tokens} \item \textbf{OP3} - $+ , -$ \item \textbf{OP4} - $* , / , \% $ \item \textbf{NOT} - ! - \item \textbf{ASSIGN} - \emph{printf} + \item \textbf{ASSIGN} - $=$ \item \textbf{SEMIC} - ; \item \textbf{COMMA} - , - \item \textbf{BOOLLIT} - \emph{true false} - \item \textbf{ID} - Corresponde a todas as sequências alfanuméricas inciadas por uma letra(maiúscula ou minúscula), que podem conter os caractéres "\$" e "$\_$". + \item \textbf{BOOLLIT} - \textit{true, false} + \item \textbf{ID} - Corresponde a todas as sequências alfanuméricas inciadas por uma letra (maiúscula ou minúscula), que podem conter os caracteres "\$" e "$\_$". \end{itemize} -\subsection{Detecção de Erros Lexícais} - -A análise lexical é realizada da esquerda para a direita, caractér a caractér, até ao momento em que o autómato atinge um estado morto. Quando este mesmo estado é atingido, o analisador percorre o caminho inverso até encontrar um estado final, estando então encontrado um \emph{token} válido. Caso o analisador não atinja um estado final, então é gerado um erro léxical. Para melhor identificação do erro lexícal, é impressa a linha e a coluna onde se encontra o mesmo. Assim, necessitamos de mecanismos para obter estas informações. +\subsection{Detecção de Erros Lexicais} -Para tal, existe uma varíavel com o nome \emph{colNo}, responsável por armazenar a coluna actual, sendo esta variável incrementada quando se verifica uma mudança de lina . Relativamente à linha, obtemos o seu valor actual através da varíavel \emph{yylineno}, já implementada pelo \emph{YACC}. +A análise lexical é realizada da esquerda para a direita, caracter a caracter, até ao momento em que o autómato atinge um estado morto. Quando este mesmo estado é atingido, o analisador regressa ao último estado final, caso em que é encontrado um \textit{token} válido. Caso o analisador não tenha atingido previamente um estado final, é então gerado um erro lexical. Para melhor identificação do erro lexical, é impressa a linha e a coluna da posição onde começa o \textit{token}. Para este efeito, necessitamos de mecanismos para obter informação da posição. +Para tal, existe uma variável com o nome \textit{colNo}, responsável por armazenar a coluna actual, sendo esta variável incrementada de cada vez que se acaba de processar um \textit{token} válido. Relativamente à linha, obtemos o seu valor actual através da variável \textit{yylineno}, já implementada pelo \textit{YACC}. \subsection{Tratamento dos Comentários} -A linguagem iJava permite a existência de comentários de linha(iniciado por "$\|$") e comentários de bloco(colocados entre "$/* */$"). +A linguagem \textit{iJava} permite a existência de comentários de linha (iniciados por "\textit{//}") e comentários de bloco (colocados entre "\textit{/* */}"). + +No caso dos comentários de linha, uma simples expressão regular permite manter actualizada a informação de linhas e colunas. No caso dos comentários de bloco, usou-se um estado \textit{COMMENT}, no qual se entra quando se detecta o \textit{token} "\textit{/*}" e do qual se sai quando se detecta o \textit{token} "\textit{*/}". Dentro deste estado, apesar de se ignorar o texto que não representa o final do comentário, actualiza-se a informação de posição, mantendo assim a sua correcção. \newpage \section{Análise Sintática} -Após terminada a fase da análise lexical, segue-se a análise sintática. Uma vez que nesta vamos ter em conta as precedências dos operadores, foram feitos alguns ajustes nos tokens detectados. Estas alterções serão explicadas de seguida. +Após terminada a fase da análise lexical, segue-se a análise sintática. Uma vez que nesta fase é necessário ter em conta as prioridades dos operadores, foram feitos alguns ajustes nos tokens detectados. Estas alterações são explicadas na próxima secção. + +A ferramenta utilizada, o \textit{YACC}, é um analizador sintático \textit{LALR(1)}. Assim, foi preferida na nossa implementação da gramática recursividade à esquerda, por resultar numa menor utilização da pilha. -\subsection{Alterações na Análise Léxical} +\subsection{Alterações na Análise Lexical} -Como dito anteriormente, houve necessidade de efectuar algumas alterações à organização dos \emph{tokens} realtivos aos operadores. Estas alterações devem-se à necessidade de termos em conta as precedências dos operadores. Assim, após alterações obtivemos os seguintes tokens relativos aos operadores. +Como dito anteriormente, houve necessidade de alterar a organização dos \textit{tokens} relativos aos operadores. Estas alterações devem-se à necessidade de se ter em conta as prioridades dos operadores. Assim, após alterações, obtivemos os seguintes tokens relativos aos operadores. \begin{itemize} \item \textbf{AND} - \&\& \item \textbf{OR} - $\|$ \item \textbf{RELCOMPAR} - $< , >, <= , >=$ - \item \textbf{EQUALITY} - $, == , !=$ - \item \textbf{ADDITIVE} - $ , == , != $ + \item \textbf{EQUALITY} - $== , !=$ + \item \textbf{ADDITIVE} - $+ , -$ \item \textbf{MULTIPLIC} - $* , / , \% $ \end{itemize} -Para além das alterações acima referidas, foram ainda feitas outras em relação à contagem da linha e da coluna. Uma vez que aquando da mostragem da mensagem de erro sintático, o número da linha e da coluna apresentadas têm de corresponder ao inicio do \emph{token} inválido. Logo, esta informação foi guardada de forma a depois ser acedida no analisador sintático. +Para além das alterações acima referidas, foram ainda feitas outras em relação à contagem da linha e da coluna. Uma vez que aquando da mostra da mensagem de erro sintático, o número da linha e da coluna apresentadas têm de corresponder ao início do \textit{token} inválido, esta informação foi guardada de forma a poder ser acedida no analisador sintático. \subsection{Gramática da Linguagem} -A gramática da linguagem \emph{iJava}, apresenta-se de seguida segundo a notação \emph{EBNF}: +A gramática da linguagem \textit{iJava}, apresenta-se de seguida segundo a notação \textit{EBNF}: \vspace{0.5cm} \hspace{-1cm}\vspace{.1cm}Start $\rightarrow$ Program \\ \\ @@ -207,15 +183,15 @@ \subsection{Gramática da Linguagem} \vspace{.5cm}Args $\rightarrow$ Expr { COMMA Expr }\\ -Após a interpretação da gramática dada, definimos a gramática seguindo a notação do \emph{YACC}. A gramática obtida após definição de precedências e após alterações relativamente à gramática acima, foi a seguinte seguida(todas as alterações e definições de precedências serão abordadas com detalhe nas proximas secções). +Após a interpretação da gramática dada, definimos a gramática no \textit{YACC}. A gramática obtida após definição de prioridades e após alterações relativamente à gramática acima, foi a seguinte (todas as alterações e definições de precedências serão abordadas com detalhe nas proximas secções). \vspace{0.7cm} -\lstset{language=C,caption={Gramática obtida segundo a representação do YACC},label=Estruturas,numbers=left,frame=single, breaklines = true} +\lstset{language=C,caption={Gramática obtida segundo a representação do YACC},label=Estruturas1,numbers=left,frame=single, breaklines = true} \begin{lstlisting} start: CLASS ID '{' decls '}' - | CLASS ID '{' '}' + | CLASS ID '{' '}' decls: decls fielddecl | decls methoddecl @@ -238,7 +214,7 @@ \subsection{Gramática da Linguagem} | vardecl: vardecl type ID idlist ';' - | + | idlist: idlist ',' ID | @@ -259,56 +235,57 @@ \subsection{Gramática da Linguagem} | RETURN ';' expr: exprindex - | exprnotindex + | exprnotindex exprindex: ID - | INTLIT - | BOOLLIT - | '(' expr ')' - | expr DOTLENGTH - | PARSEINT '(' ID '[' expr ']' ')' - | ID '(' args ')' - | ID '(' ')' + | INTLIT + | BOOLLIT + | '(' expr ')' + | expr DOTLENGTH + | PARSEINT '(' ID '[' expr ']' ')' + | ID '(' args ')' + | ID '(' ')' | exprindex '[' expr ']' exprnotindex: NEW INT '[' expr ']' - | NEW BOOL '[' expr ']' - | '!' expr %prec UNARY - | ADDITIVE expr %prec UNARY - | expr AND expr - | expr OR expr - | expr RELCOMPAR expr - | expr EQUALITY expr - | expr ADDITIVE expr - | expr MULTIPLIC expr + | NEW BOOL '[' expr ']' + | '!' expr %prec UNARY + | ADDITIVE expr %prec UNARY + | expr AND expr + | expr OR expr + | expr RELCOMPAR expr + | expr EQUALITY expr + | expr ADDITIVE expr + | expr MULTIPLIC expr args: expr argslist | expr argslist: ',' args - \end{lstlisting} \subsection{Tradução da Gramática dada para o YACC} -Como referido anteriormente, foram necessárias diversas alterações à gramática dada na notação \emph{EBNF}. Nesta sub-secção vamos referenciar essas alterações explicando o seu porquê. +Como referido anteriormente, foram necessárias diversas alterações à gramática dada na notação \textit{EBNF}. Nesta sub-secção vamos comentar essas alterações explicando a sua razão de ser. Uma das alterações efectuadas, é relativa à abordagem do que é "opcional"$([\dots])$, que tem "zero ou mais repetições"$(\{\dots\})$ e situações em que temos várias opções. \begin{itemize} - \item Nas situações em que temos símbolos "opciaís", dividimos a regra em duas regras distintas como forma de abrager os dois casos, ou seja, o caso em que tem o simbolo e o caso em que não. Noutros casos, simplesmente consideramos a possiblidade de ter a String vazia aos símbolos poderem ser opcionais. + \item Nas situações em que temos símbolos "opcionais", dividimos a regra em duas regras distintas para abrager os dois casos posssíveis, o caso em que tem o símbolo e o caso em que não. Noutros casos, simplesmente considerámos a possiblidade de ter um síbolo não terminal a derivar a cadeia vazia. - \item Quando existem "zero ou mais repetições", consideramos a possibilidade da String vazia, sendo ainda adicionada a recursividade de forma a permitir várias repetições da mesma regra. + \item Quando existem "zero ou mais repetições", considerámos a possibilidade de ser derivada a cadeia vazia, sendo ainda adicionada recursividade de forma a permitir várias repetições do mesmo símbolo. - \item No caso de termos várias opções relativamente ao simbolo, é criada uma nova regra que contempla todas os simbolos possíveis. + \item No caso de termos várias opções relativamente ao símbolo, é criada uma nova regra que contempla todos os símbolos possíveis. \end{itemize} -Outras alterações efectuadas têm a ver com a definição de precedência de operadores. Apresentamos abaixo as precedências definidas no \emph{YACC}. +\subsubsection{Prioridade de Operadores} + +Outras alterações efectuadas têm a ver com a definição de prioridade de operadores. Apresentamos abaixo as prioridades que definimos no \textit{YACC}. \newpage -\lstset{language=C,caption={Precedências},label=Estruturas,frame=single, breaklines = true} +\lstset{language=C,caption={Prioridades},label=Estruturas2,frame=single, breaklines = true} \begin{lstlisting} %left OR %left AND @@ -320,4 +297,496 @@ \subsection{Tradução da Gramática dada para o YACC} %left '[' DOTLENGTH \end{lstlisting} -\end{document} \ No newline at end of file +\vspace{0.5cm} + +Segundo o \textit{YACC}, as prioridades definidas mais abaixo, têm maior prioridade do que as definidas acima. Por exemplo, \textit{AND} tem maior prioridade do que \textit{OR} e menor do que \textit{EQUALITY}. + +Estas prioridades representam as prioridades da linguagem \textit{Java}, que são as mesmas que se aplicam na linguagem \textit{iJava}. + +\subsubsection{Ambiguidade \textit{if-else}} + +Uma ambiguidade muito comum na definição da gramática de uma linguagem está relacionada com o \textit{if-else}. Veja-se o seguinte exemplo: + +\vspace{0.3cm} +\lstset{language=C,label=Estruturas3, caption={}, numbers=none, frame=single, breaklines = true} +\begin{lstlisting} + IF '(' expr ')' IF '(' expr ')' statement ELSE statement +\end{lstlisting} + +\vspace{0.3cm} + +Como podemos verficar acima, o " \textit{ELSE statement} " pode estar associado ao \textit{IF} exterior ou ao interior. São então possíveis duas árvores de derivação, existindo portanto uma ambiguidade. Para resolver esta ambiguidade, foram definidas as seguintes prioridades: + +\vspace{0.3cm} + +\lstset{language=C,label=Estruturas4, caption={}, numbers=none, frame=single, breaklines = true} +\begin{lstlisting} + %nonassoc IFX + %nonassoc ELSE +\end{lstlisting} + +\vspace{0.3cm} + +Desta forma, dando maior prioridade à redução do \textit{ELSE}, o \textit{ELSE} é sempre associado ao \textit{IF} mais recente. + +\subsubsection{Indexação} + +Relativamente à indexação, foram feitas algumas alterações relativamente à gramática inicial, de forma separar as expressões indexáveis das não-indexáveis. Como podemos verificar (ver linhas 46-68), a \textit{expr} pode derivar em \textit{exprindex} e \textit{exprnotindex}. + +\begin{itemize} + \item Uma vez que a linguagem não permite a existência de arrays \textbf{não unidimensionais}, as regras " \textit{NEW INT [ expr ]} " e " \textit{NEW BOOL [ expr ]} " estão incluídas nas não indexáveis, não sendo assim possível a inicialização de arrays não unidimensionais. + + \item O operador de indexação tem maior prioridade do que qualquer operador (excepto \textit{DOTLENGTH}, que tem a mesma). Desta forma, nunca será possível indexar uma expressão unária (excepto \textit{DOTLENGTH}) ou binária, pelo que estas são não-indexáveis. + + \item Todos os outros tipo de expressões, estão incluídas nas indexáveis. +\end{itemize} + +\subsection{Árvore de Sintaxe Abstracta} + +Concluída a definição da grámatica, segue-se então a construção da AST. + +\subsubsection{Estruturas de Dados} + +Para a construção da AST, foram definidos diversos nós, sendo estes apresentados e analisados detalhadamente de seguida. Optámos por definir um nó para cada regra da gramática, por ser para nós conceptualmente mais fácil visualizar a árvore desta forma. + +\lstset{caption={Expressão}} +\begin{lstlisting} + typedef struct _expr + { + ExprType type; + OpType op; + struct _expr *expr1; + struct _expr *expr2; + char *idOrLit; + ArgsList *argsList; + } Expr; +\end{lstlisting} + +\vspace{0.3cm} + +\begin{itemize} + \item \textbf{type} - permite identificar o tipo da expressão (Binária, Unária, \textit{ID}, \textit{boolean}, \textit{int}, Chamada de Função, \textit{parseInt}, indexação, \textit{new BOOL[]}, \textit{new INT[]}); + + \item \textbf{op} - permite identificar o operador aplicado na expressão. Estes operadores são aplicados nas expressões binárias, unárias e no caso particular do \textit{.length}; + + \item \textbf{expr1} - esta variável corresponde à expressão à esquerda do operador nas operações binárias, assim como a expressão utilizada nas operações unárias. No caso da indexação, este campo corresponde à expressão a ser indexada. Por fim, no caso das operações do tipo \textit{new BOOL[]}, \textit{new INT[]}, este campo corresponde ao tamanho do array a ser inicializado. + + \item \textbf{expr2} - no caso das operações binárias, a \textit{expr2} corresponde à expressão à direita do operador. Este campo é utilizada nas expressões do tipo \textit{Indexação}, correspondendo ao índice a ser usado. + + \item \textbf{idOrLit} - esta variável tem como objectivo armazenar um \textit{ID} da expressão ou um literal; + + \item \textbf{argsList} - é através desta variável que são guardados os argumentos "passados" quando é feita a chamada de uma função. +\end{itemize} + +\newpage + +\lstset{caption={Lista de Argumentos}} +\begin{lstlisting} + typedef struct _argsList ArgsList; + + struct _argsList + { + Expr *expr; + struct _argsList *next; + }; +\end{lstlisting} + +\vspace{0.3cm} + +Representa a lista de argumentos a serem passados aquando da chamada de uma função. + +\lstset{caption={Statement}} +\begin{lstlisting} + typedef struct _stmt + { + StmtType type; + char *id; + Expr *expr1; + Expr *expr2; + struct _stmt *stmt1; + struct _stmt *stmt2; + struct _stmtList *stmtList; + } Stmt; +\end{lstlisting} + +\vspace{0.3cm} + +\begin{itemize} + \item \textbf{type} - permite distinguir os vários tipos de statements (\textit{compound statement}, \textit{if-else}, \textit{return}, \textit{while}, \textit{print}, \textit{store}, \textit{store array}); + + \item \textbf{id} - esta variável permite guardar o \emph{id} da variável a que é atribuida uma expressão, no \emph{store} e no \emph{storearray}; + + \item \textbf{expr1} - é utilizada no caso de existir apenas uma expressão na regra. No caso de existirem duas regras, a regra mais à exquerda é armazenada neste campo. + + \item \textbf{expr2} - apenas é utilizada no caso de existirem duas expressões na regra, correspondendo à expressão mais à direita; + + \item \textbf{stmtList} - caso o \emph{statement} seja do tipo \emph{compound statement}, então todas as \emph{statements} são adicionadas a esta lista de \emph{statments}. +\end{itemize} + +\lstset{caption={Lista de Statements}} +\begin{lstlisting} + typedef struct _stmtList + { + Stmt *stmt; + struct _stmtList *next; + } StmtList; +\end{lstlisting} + +\vspace{0.3cm} + +Esta lista é utilizada como estrutura auxiliar de \textit{compound statements}. + +\lstset{caption={Lista de IDs}} +\begin{lstlisting} + typedef struct _idList + { + char *id; + struct _idList *next; + } IDList; +\end{lstlisting} + +\vspace{0.3cm} + +Permite armazenar os id's das variáveis quando estas são declaradas em formato de lista definindo o tipo delas uma única vez. + +\lstset{caption={Declaração de Variável}} +\begin{lstlisting} + typedef struct _varDecl + { + Type type; + int isStatic; + IDList *idList; + } VarDecl; +\end{lstlisting} + +\vspace{0.3cm} + +\begin{itemize} + \item \textbf{type} - corresponde ao tipo da variável a ser declarada(\textit{int, bool, int[], bool[]}); + + \item \textbf{isStatic} - identifica a variável como sendo estática ou não; + + \item \textbf{idList} - uma vez que podem ser declaradas várias variáveis do mesmo tipo definindo o tipo apenas uma vez, é usada uma estrutura auxiliar para manter a lista dos \textit{ID}s das variáveis. +\end{itemize} + +\lstset{caption={Lista de Declarações}} +\begin{lstlisting} + typedef struct _varDeclList + { + VarDecl *varDecl; + struct _varDeclList *next; + } VarDeclList; +\end{lstlisting} + +Estrutura auxiliar usada para manter todas as declarações de variáveis locais de um método. + +\vspace{0.3cm} + +\lstset{caption={Lista de Parâmetros}} +\begin{lstlisting} + typedef struct _paramList + { + Type type; + char *id; + struct _paramList *next; + } ParamList; +\end{lstlisting} + +\vspace{0.3cm} + +\begin{itemize} + \item \textbf{type} - representa o tipo do parâmetro; + \item \textbf{id} - armazena o \textit{id} do parâmetro; + \item \textbf{next} - ponteiro para o parâmetro seguinte. +\end{itemize} + +\lstset{caption={Declaração de Método}} +\begin{lstlisting} + typedef struct _methodDecl + { + Type type; + char *id; + ParamList *paramList; + VarDeclList *varDeclList; + StmtList *stmtList; + } MethodDecl; +\end{lstlisting} + +\vspace{0.3cm} + +\begin{itemize} + \item \textbf{type} - representa o tipo do valor de retorno da função. Para além dos tipos de variáveis é ainda possível retornar \textit{void}; + \item \textbf{id} - armazena o nome do método; + \item \textbf{paramList} - contém a lista de parâmetros recebidos pela função; + \item \textbf{varDeclList} - lista de declarações de variáveis locais à função; + \item \textbf{stmtList} - lista de \textit{statments da função}. +\end{itemize} + +\lstset{caption={Lista de Declarações}} +\begin{lstlisting} + typedef struct _declList + { + DeclType type; + union + { + VarDecl *varDecl; + MethodDecl *methodDecl; + }; + struct _declList *next; + } DeclList; +\end{lstlisting} + +\vspace{0.3cm} + +\begin{itemize} + \item \textbf{type} - permite identificar se é a declaração de um método ou de uma variável global; + \item \textbf{varDecl} - caso se trate de uma variável global, então é criado um novo nó do tipo \textit{Variable Declaration}; + \item \textbf{methodDecl} - caso se trate da declaração de um método, então é criado um novo nó do tipo \textit{Method Declaration} +\end{itemize} + +\lstset{caption={Classe}} +\begin{lstlisting} + typedef struct _class + { + char *id; + DeclList *declList; + } Class; +\end{lstlisting} + +\vspace{0.3cm} + +Esta estrutura armazena o nome da classe e a lista de declarações. + +\subsubsection{Construção da Árvore} + +Após termos definido as estrutura de dados acima, seguem-se os procedimentos utilizados para efectuar novas inserções na AST. + +\lstset{caption={Funções utilizadas na construção da AST}} +\begin{lstlisting} + Class* insertClass(char*, DeclList*); + + DeclList* insertDecl(DeclType, void*, DeclList*); + + VarDecl* insertFieldDecl(Type, char*, IDList*); + + VarDeclList* insertVarDecl(VarDeclList*, Type, char*, IDList*); + + IDList* insertID(char*, IDList*); + + StmtList* insertStmtList(Stmt*, StmtList*); + + Stmt* insertStmt(StmtType, char*, Expr*, Expr*, Stmt*, Stmt*, StmtList*); + + ParamList* insertFormalParam(Type, char*, ParamList*, int); + + MethodDecl* insertMethodDecl(Type, char*, ParamList*, VarDeclList*, StmtList*); + + Expr* insertExpr(ExprType, char*, Expr*, Expr*, char*, ArgsList*); + + ArgsList* insertArg(Expr*, ArgsList*); +\end{lstlisting} +\vspace{0.3cm} + +\section{Análise Semântica} + +Concluída a construção da \textit{AST} e a identificação de erros sintáticos, segue-se a análise semântica. Para tal, foi construída uma tabela de símbolos global e uma tabela local para cada método declarado. + +\subsection{Arquitetura da Tabela de Símbolos} + +Segue-se abaixo um esquema da estrutura da tabela de simbolos. + +\begin{figure}[h!] + \centering + \centerline{\includegraphics[keepaspectratio=true, width=1.3\textwidth]{table.jpg}} + \caption{Esquema tabela de símbolos.} +\end{figure} + +Como se pode verificar, a tabela é representada através de uma lista ligada em que os nós representam variáveis globais e métodos. Cada método contém um ponteiro para uma nova lista, a sua tabela local, que contém todos os símbolos locais a esse método. Os argumentos dos métodos aparecem no ínicio desta lista (com a \textit{flag} \textit{isParam} a 1). + +De seguida, apresentam-se as estruturas de dados utilizadas para representar a tabela de símbolos. + +\lstset{caption={Estrutura da Tabela de Símbolos}} +\begin{lstlisting} + typedef struct _methodTableEntry + { + char* id; + Type type; + int isParam; + struct _methodTableEntry* next; + } MethodTableEntry; + + typedef struct _methodTable + { + struct _classTable* broaderTable; + MethodTableEntry* entries; + + } MethodTable; + + typedef struct _classTableEntry + { + char* id; + Type type; + MethodTable* methodTable; + struct _classTableEntry* next; + } ClassTableEntry; + + typedef struct _classTable + { + char* id; + ClassTableEntry* entries; + } ClassTable; +\end{lstlisting} + +Os métodos utilizados na construção da tabela de símbolos foram os que se apresentam na listagem seguinte. + +\lstset{caption={Métodos para Construção da Tabela de Símbolos}} +\begin{lstlisting} +ClassTable* buildSymbolsTables(Class*); +ClassTableEntry* newVarEntries(VarDecl*, ClassTableEntry*); +void newMethodEntry(MethodDecl*, ClassTableEntry*, ClassTable*); +void newMethodTable(MethodTable*, ParamList*, VarDeclList*); +\end{lstlisting} + +\begin{itemize} + \item O método \textit{buildSymbolsTables()} é o método que é chamado no \textit{YACC} após a construção da \textit{AST} para dar início à construção da tabela de símbolos. + \item \textit{newVarEntries} é o método que, a partir de uma lista de variáveis globais em que o tipo apenas é definido uma vez, as coloca na tabela de símbolos da classe. + \item O método \textit{newMethodEntry()} é responsável por introduzir na tabela de símbolos da classe toda a informação referente ao método, como o seu nome e tipo de retorno. + \item \textit{newMethodTable()} é o método que preenche a tabela de símbolos local a um método com a informação sobre os seus parâmetros e variáveis locais. +\end{itemize} + +\subsection{Detecção de Erros} + +Após a construção da tabela de símbolos, segue-se a deteção de erros semânticos. Apresentam-se de seguida os possíveis erros semânticos: + +\lstset{caption={Estrutura da Tabela de Símbolos}, numbers=left} +\begin{lstlisting} + Cannot find symbol %s + Incompatible type of argument %d in call to method %s (got % required %s) + Incompatible type in assignment to %s (got %s, required %s) + Incompatible type in assignment to %s[] (got %s, required %s) + Incompatible type in %s statement (got %s, required %s) + Incompatible type in %s statement (got %s, required %s or %s) + Invalid literal %s + Operator %s cannot be applied to type %s + Operator %s cannot be applied to types %s, %s + Symbol %s already defined +\end{lstlisting} + +\begin{itemize} + \item \textbf{Erro 1} - A verificação da declaração de uma variável ou método já definidos é feita durante a construção da tabela de símbolos. Assim, antes da inserção de um novo símbolo na tabela, verifica-se se o símbolo já foi previamente definido. Note-se que, a linguagem permite a existência de um método e de uma várivel local com o mesmo nome, não sendo por isso gerado nenhum erro semântico; + + \item \textbf{Erro 2} - A comparação entre os tipos de parâmetros recebidos por um método e os argumentos passados na chamada deste mesmo método, é feita obtendo da tabela de símbolos local ao método os tipos recebidos pela função, comparando-os com os argumentos passados, obtidos da \textit{AST}; + + \item \textbf{Erro 3, 4} - A verificação da correcção de tipos nas atribuições é feita através da comparação do tipo devolvido pela expressão correspondente ao valor a ser atribuído e o tipo da variável à qual estamos a fazer a atribuição; + + \item \textbf{Erro 5} - Este erro é gerado quando, por exemplo, o tipo da expressão no \textit{return} é diferente do tipo de retorno do método. Para além disto, no caso de termos um \textit{if} ou um \textit{while} cuja expressão condicional não é do tipo boolean, é também gerado um erro semântico deste tipo; + + \item \textbf{Erro 6} - Nos casos em que é chamado o \textit{System.out.println} com váriaveis cujo tipo não é \textit{Integer} nem \textit{Boolean}, então é gerado um erro indicando que o operador apenas aceita parâmetros deste tipo. + + \item \textbf{Erro 7} - Caso o literal não seja um octal (começado por "0"), hexadecimal (começado por "0x") ou decimal (os restantes casos), é então gerado um erro deste tipo; + + \item \textbf{Erro 8} + + \begin{itemize} + \item Quando um operador unário ou o \textit{.length} é aplicado sobre um tipo sobre o qual essa operação não é valida. Por exemplo, o operador unário \textit{not}, apenas pode ser aplicado sobre expressões do tipo \textit{boolean}. Igualmente, o \textit{.length} apenas pode ser usado em \textit{arrays}; + + \item Na inicialização de \textit{arrays}, caso a expressão que indica o tamanho do \textit{array} seja de um tipo diferente de \textit{integer}, é gerado um erro semântico. + \end{itemize} + + + \item \textbf{Erro 9} + + \begin{itemize} + + \item No caso de \textit{store array}, o erro pode ser análogo ao da indexação (Ver abaixo); + + \item Quando os operadores "+", "-", "*", "/", "\%", "<", ">", "<=", ">=" são aplicados a tipos diferentes de \textit{integer}; + + \item Quando os operdores "!=" e "==" são aplicados a tipos diferentes; + + \item Quando os operadores "$\&\&$" e "$||$" são aplicados a tipos diferentes de \textit{Boolean} + + \item Caso o \textit{Integer.parseInt} não seja aplicado a um \textit{array} de \textit{Strings} indexado por um \emph{integer}, então é gerado um erro deste tipo; + + \item É gerado um erro deste tipo quando é feita a indexação a um tipo diferente de \textit{int[]} ou \textit{bool[]}. Igualmente, caso a expressão de indexação não seja do tipo inteiro é gerado um erro semântico desta natureza; + \end{itemize} + +\end{itemize} + +\section{Geração de Código} + +A última fase, que se segue à fase semântica, é a geração de código. No âmbito do nosso projecto, foi implementada a geração de código intermédio \textit{LLVM}. Após a geração de um ficheiro \textit{.ll}, pode então interpretar-se com o comando \textit{lli} ou compilar com o comando \textit{llc} seguido de um qualquer compilador de \textit{Assembly} o código gerado pelo nosso compilador. + +Nesta secção serão apenas mencionadas as funcionalidades mais complexas, para manter a brevidade deste relatório. As restantes funcionalidades, por serem comparativamente triviais, foram omitidas. + +\subsection{Ifs e Whiles} + +Para a implementação destas estruturas de controlo foram utilizadas \textit{named labels}, com o cuidado de usar pontos na sua nomenclatura, para evitar conflitos com identificadores do programa a ser compilado. + +O \textit{if-else} consiste em 3 \textit{labels}, uma para o \textit{then}, uma para o \textit{else} e uma que representa o fim do \textit{if-else}. A \textit{then}, contém o código que deve ser executado se a condição for verdadeira, sendo que na \textit{else} se encontra o código que deve ser executado se esta for falsa. A \textit{label} que representa o fim do \textit{if-else} é para onde qualquer um dos segmentos anteriores salta no final da sua execução. Esta \textit{label} precede o código que se segue a esta estrutura de controlo de fluxo. + +O \textit{while} é muito análogo ao \textit{if-else}, tendo também 3 \textit{labels}. A primeira é o início da estrutura, onde se encontra a condição de paragem. Caso esta condição seja verdadeira, o programa executa o que se encontra na segunda \textit{label}, \textit{do}, voltando no final deste segmento à \textit{label start}. Caso a condição de paragem seja falsa, a execução salta para a \textit{label end}, que precede o código que se segue ao \textit{while}. + +\subsection{Returns} + +Como não é efectuada qualquer análise da presença de \textit{returns} numa função, ou da existência de \textit{returns} em todos os ramos de execução de uma função, foi necessário encontrar uma forma de nos certificarmos que qualquer função retorna, independentemente da existência ou não de \textit{returns explícitos}. + +Para solucionar este problema, todos os métodos possuem um return por omissão, colocado no final da função. Este retorna 0 no caso de o tipo de retorno ser \textit{inteiro} ou \textit{boolean}, \textit{null} no caso de ser um ponteiro ou uma estrutura com o primeiro campo a 0 e o segundo a \textit{null} no caso de ser um \textit{array}. + +\subsection{ParseInt} + +Para o \textit{Integer.parseInt}, foi usada a função \textit{atoi()} da biblioteca de \textit{C}, através da \textit{API} de chamada deste tipo de funções a partir de \textit{LLVM}. + +\subsection{Prints} + +Para a impressão foi necessário definir \textit{strings} auxiliares para serem usadas na função \textit{printf()} da biblioteca de \textit{C}. + +No caso de inteiros, foi utilizada a \textit{string} \textit{"\%d\textbackslash n"}, sendo passada essa \textit{string} como \textit{format string} da função \textit{printf()} e o inteiro a imprimir como segundo argumento dessa mesma função. + +No caso de \textit{booleans}, utilizou-se um \textit{array} com a string \textit{"false\textbackslash n"} na primeira posição e \textit{"true \textbackslash n"} na segunda. Desta forma, e tendo em conta que em \textit{LLVM} \textit{false} $= 0$ e \textit{true} $= 1$, podemos usar o valor que queremos imprimir como índice do \textit{array} para obter a \textit{format string} a passar à função \textit{printf()}. + +\subsection{Short Circuiting} + +Inicialmente tentámos implementar esta funcionalidade com recurso a nós \textit{phi} da representação intermédia \textit{LLVM}. No entanto, após problemas com a correcta indicação das \textit{labels} que precedem a instrução \textit{phi} desistimos desta abordagem. + +No entanto, essa abordagem seria correcta e mais eficiente em termos de memórida alocada na stack, não fazendo uso de nenhuma memória deste tipo. Chegámos tardiamente à conclusão de que, com uma \textit{label} adicional que representasse sempre a saída de qualquer código que fosse executado apenas caso não existisse \textit{short circuiting}, poderiamos ter solucionado este problema. + +A nossa abordagem implementada foi utilizar uma estrutura de controlo de fluxo semelhante a um \textit{if}, mas que necessita de recorrer a memória da pilha. + +\lstset{caption={Short Circuiting em ANDs}, numbers=none} +\begin{lstlisting} + a && b + + res = a; + if(a) + res = b; +\end{lstlisting} + +\lstset{caption={Short Circuiting em ORs}, numbers=none} +\begin{lstlisting} + a || b + + res = a; + if(!a) + res = b; +\end{lstlisting} + +\subsection{Arrays e .length} + +Para poder ter a funcionalidade de \textit{Java} existente no operador \textit{.length}, implementámos os \textit{arrays} como sendo estruturas, em que na primeira posição se encontra o tamanho do vector e na segunda o ponteiro em si. + +Desta forma, o operador \textit{.length} consiste apenas na obtenção do valor guardado na primeira posição da estrutura. Este valor deve ser actualizado sempre que existir um \textit{new} com o valor correcto do novo tamanho do array, sendo inicializado a 0 aquando da declaração da variável. + +A indexação de um array continua a ser uma simples indexação, em que apenas se deve indexar o valor na segunda posição da estrutura. + +\subsection{Inicialização de Arrays} + +Usando a função \textit{calloc} de \textit{C} forçamos a inicialização de \textit{arrays} de inteiros a 0 e de \textit{arrays} de \textit{booleans} a \textit{false}, tal como acontece em \textit{Java}. + +\section{Possíveis Melhorias} + +Uma das possíveis melhorias que poderiamos implementar seria a libertação de toda a memória alocada na \textit{heap} no processo de compilação de um qualquer programa. Apesar de termos o código já estruturado para que, em qualquer cenário de saída do programa, não tivémos, infelizmente, tempo para implementar esta correcta libertação. + +Outra melhoria digna de ser mencionada é o facto de não utilizarmos \textit{unions} nos nós da \textit{AST} em casos em que o uso destas estruturas pouparia claramente espaço. A razão pela qual não implementámos desta forma os nós da \textit{AST} foi não complicar em demasia as funções de criação de nós da \textit{AST}, que nesse caso teriam de ter sido implementadas com cuidado para não sobrepor campos importantes ao inicializar campos irrelevantes para o tipo de nó em questão. + +\end{document} From bb0b6085faf3e5ee583bd903b004a0e3e479b619 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Nuno=20Oliveira?= Date: Mon, 2 Jun 2014 23:55:16 +0100 Subject: [PATCH 39/39] Report in .pdf format --- report/iJavaC-report.pdf | Bin 0 -> 230989 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 report/iJavaC-report.pdf diff --git a/report/iJavaC-report.pdf b/report/iJavaC-report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6f17150db7d9b0133d59b08dd66f507a2b2487e7 GIT binary patch literal 230989 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

nC`e(j5Om_VPyJ)>JyF1 zEN@Ox8hy^S3Ws9Y_3=ZISrhf@IPJ04D-iao+9-Kb8ldd9_Uh7u1TAX!Ygg2HHZ_5! z4u6Px_w!HkXEwTAyErCoVL;6LhqoyFAtuhxz9@q(Ps!hc&M2Tk*mp&M8;}aMBlS88 zYq-di=biJ0A-p=uWq^L9FK6uy(!AoFVNT`cn$hh>7IlfLAw2Pq+youP?r&d8y~f ztMmKw0s}JPYeDWt?8%ZO2^=J$x>7(f4toF>Fu@cD$aD4mz~Q1@)V_E_Jba<-u?bsp zo~>St>(Gw;m_>l)@Gd#OS!OTcGH*C!v?}($Fj*^HuSaM~9fcAkG33W8*)+oiu^_H>A8n0|KD@Ic`A1KL#i@biXkU zVEcrDzY9YEZ>U2X__o16yH2D+s4Z;BFaTlNodZAY-&8;pv@%0S8h$2TNEIUCCuV;~ z)WzyLV5hY5fG8n~e*RDZz)(VyF&;l~?ydo=5yJvMS@HOZNdMKP)@mC%rfF^=wC3!z z=$`qFPk6y3{`5?7fV!#>y3e7?6Y9^`D8=8uK-jFSNKnjiCLJJeh4zYWc32Xb*)ka4 z!E)MVQjDHUqQW}TqBEH)$9C>+F3i%n66y>_wer5}zh+Y2q@u4m*ZiqgU{fK^c&`%* z!q{jwVeAUM(@rn;I=#qkrIkZ-6yjHI4{+^F*4V!bg7k0Cw9N&nA!L=1uo;7{4izx< z`6V<>RV#CdV~tBOgb;nXZ9K=U$+8Yqkj1Am*d%YT4m{^U z7Y?+|Ghm#HjJ%_^Pm{Aq7boT(wYH=!&dWxvUSzqx&7~P)4Et<^x&Ix2Lw-GQ14&@~ z7PPu3+M@-ydW11@OLEQzBb*2Br5CD;S>d}*f~+qbN7T9B8gn!}UQt_7+`NqA1tw_) zaC?M#PT8hEW5a}1iWzxST6e`a>HUn1ep3g4%k_&U1jy+}{^u_h2eo#dq0p&t z#)BpOfioT#zBTF4fu+L0)zND^AT(uXBXeP$qpd700*I51NA}!(VYg&<{AOAQe5oFt zJbMsmHM3GpNNrf-dinV8xNR9Li}!#g#%FQJp+~waxxmXRXJ)`xmccRao7w&FTl!Lo z$(9(hKOwDE?chEhl+$pGI@WhS@ zG~$qlQP@#1KU9kjuk!O$fBLQ0a(KUQ_y1Ma=VzArH}UwBp}dZ6LSAWF1k+&(&pN6$ zj6K$YJ{^KflNDuCN>A%%myhCHt}j7eaK`Ye$l&Vp1UVQSc~wujFEE@x8LM4j?OS4O zVx=^^JNstpXhb`1+kt{3RVbdFf@C@A9>I$f)%#hx7zE11h&ImvXs$_yvG;_|OvCLk zw~==K<8}xBNX=Qh1=>B<<>#=^UtJv(04ReJZUYT9em*PN0e!_HhAIykT(C`>R>trk zW#|f0Y{56jgl;NHOzPAh1Q6Kc6rt+6Sy{xv5wADoZ;iCFnXKbh)P3D-r5kk=Oy`$O zIoonnv76>`TKIa<=GY)5FNOhWVa&W>{v-ZWQ#O@o{Zc=>Lh;EBqv!4`6NO{$Gfsns zjIVAQ_3)C+xve@a#&4Ebawt;KnNE;c zLm=O_!N%&L+Npg25pV8)-|K)FKC{qfCu8bu@EGkCTqmk9(=3TJnPa4~emdCqw2JYb z;NW1F#pMXj1c&kUY!Kj!gj@zXu9pJ74i)sGA`bHqd}!SI(|G~#q1mlT+icJ)C}0Z% zSs7b79fB7PIFI^_oRn#Xn27n3Z zvlFP52JpL?bXmyhh;s{};kb&Zx%t6I52~Co%C$)4j1r;c;IDf!jf?KE+O7W9ThKn` zpRu;prGp1eQ!Q$Q*v#fjJ_m*)ko4DH7KlZ9@0wOHeP3j#_ubJCdd>N@({bSJ6Gn(pLX z?Sjvr55z;#ueBB03JY^51mP(xj-U*;#yC{TMU8(e*1vogNf2YK$0ImNGaL|{Rp(Ea6x;HBi>xIbx|#IFwP7t zIAP(gYnbes3{UUlT7CPTvnEKb(T~_HjE(Xo7AQx@wG-GeUt1Q`CXR z6m`NZOSBQ16m!NC#$W6V>aJf8b?})Cdxx)_YRSoK`C8O`!8d#T<(mcD33n6X63>tY zxhk0_o_+K^+zp_}g{zM8d_9N;%I;P!RB{eNQ>WHZR0nltEQs!(s-CTi_rOQLxoO&a zv-YVNHs2kn$+4ec=>ckdNT^dC31>lO=i z=KRvm)X8z9k7|h0B2R`z3X_PAT7*S}wTGaW{Y6{QdLPr~S*Dv6i{_MF3Wi-uP3#Wd zuKfh-U7P2hI4lP0xBoumdUr(O!xHcj+HZ)itix`Z9nO zscS+_^lHvHUntux4?>o0IaCgCJO$eraQ1=O!1K2-lfc{_W2|B8Eqn7@411xqCxXu6 zMYc_-tX(Cl~T_mq>ggzV{pnTnZi>_itL4Qt0-I*%Zbud!>xXU}~csm0z zOkvl!0_)U{z{;ZwurS2j0`c7D%dT%}!v%)lvW>6<%q=zgTcRPFXo&koi0kbP% zi*XUGB;~91qvu}8tVl|8u@@I9U1^yaR?N}%OsUr$*&aje1oNsA+vDL z@1q9gSw5hzq{=7k6>MGFH3&uW#OmwYUQ_8WlSn8dl#RXNYr?3uEm*#7VSRJ%Ui@{- zJ|Z0YV`Ko&&#?4gz3|p908&3H9Xo*q!luaSE`QcD+794ff%X#Xp7CVCbqGtA`bpt(Tth0>*M2{m_wasngGA@2pXq4B9t-4iunNL4nbMQkd8l{Q%kWKfUn} zR+SWe-0r8*ZcaJ{d6b7aUXqM(b}!`NK-09dAFbBMZZ` z*UcIUrEzRkI5$Ew@3r&gz0r0q@^;pvW#LR`a`P==FEi<7N>b&dxcUg34|GaP@E-t7 z)H94l@$AX|&@$$r=jKVG#2UoA=rQBlW1bTE+AWV2aJBY%VmTPwPZ0Y9=a7F=VDfMC zuK!`HI^=JkI|9SyvU+A87>fk%Kok*%5N0HZ(t(c|9rcjCT|@99Q-SYQh%N%|6~9U^ zzklK#579YO+Z@GIDO`n!W4u_SgoSGdpk%Y(2FjusftK;F(2!j^|dk#Q^Sf2EA*_BKJ1Yn%EJn$*NO!uq;#djHj(`ieF4k;7*vovcM3k z8@$KI4~go4SA{kp_Cgn~LdbKx-*0sow31Hk9$uI{9^IociSmt#BL0%(lG zA8~JVu|1gW+GQMNK-$* zleJIva&B(e9kW?-^Q@9{e^jT!B{5iBqwx&X!a>?Ut7I<5#-Mg|^m^0HZHlj^^`R0h zPZ%{^J8b*dtGF&wATo9qIdOy#6*N5Lu!V(GW!CwcU7cqFc++L!EAhL9TED`1L!*NF zOO6{9Vve0wR7vtVd6-8kqs=#qyp^vfpJ|N?S=5Bvi;6E-3ErnRHsTT-gX5$;HB3)% zyTb(iCXn>fghr!{bs5c^1ah~Ou|3JfLD`8zmd1P?BDzr&GaM^#TvR$ z1Mku>GidYYMq>*cO1x=xFi^xhIMug{WU0dOS~K0%BVG^6mF!DjTdI_K5tauWuP^Jp z&VmVkFBjE{SR8jhb5L8p?GeNkO&R?xKzcd@BYNbG@m(CEa3<|enQcw+KrkzOGLT5i z>k>3za7=Cd!X)UB;^KS5?O2UC#FQz(8y?YYgf0SO$nznOM_Z*GuuK!Gkp>+HpNiH` zWk*aqBqKg&a$309aS&*D;dSH0$_Y0pNJOi6^z8 z$R%MzXAQ&LSC06+a}22L^z_6}7~i88C{PHNXdQ}M^KQrr=q|O@Bs0LrvMSj~>QKz} zUG4KDJFtZKqy6PV6}JNerSdJH;7&-~;hiG^FgUe%1O4HenI=-nX+I`A;pv&^b_d1H zdKB(n0Pc#s+^GBwNuWj=e$^IUlNIgmNZDnq-%wf`^D!#B_oJqbP-GX$EzKwUbiGZ9 z@|H5pr3Ykg-|q%dUFr&FN}O-7lclsP2k5{G6t!>aYo^7RxzDsU)P!j?tY`~o)=2JO zaV>YC(`Qs6w$f6O{v8TbxmpcmeEv7ZO@ox^Dr zY%=#bIQf3yP<7XvxW;Nddcm@6P&=Ij0jjMNqEI~8{>y9F+{Qy3)-T|ilnanQ2=KQ| z;Y+GVv^!h?S#BX1AdVV{V5Z-X0%JHXLeA8oBga6B_?&tGD+aXyhCh6l!zcg@Xjfoz z>&tQ~+!gTus0XQ3mKm<=^XN`IKweJfRS%t2pL0(Tbl6uZ`|@=wF`9SaCJ`aU!h-Qe zvZQp<_g1~yd~Mm`AkW;O!56osaK2}QZeiOm^5N^gC@7X_1sG$Z@BwZoa>{ZJP{x89 zpxtHOj6h>+RWzk>CF(e=Hp80uLZ2o}Gs*}xRgxE@NG;oaCc0qKS%=SUT4ojg(1dQa zMIu19^o;l@0l+`^J^?tGK+3u8FMs6Fm=~`f{*QktZd+tl0~-b>09dURU^Gk*m;v%{ zJ!cM>W&~WFSZTE8TCl7T5}1|>v;z!e=tt5yjS=260NKgLml-%vl~wkR$OcJR8Stx7 ze|t!f^y|U?A{^$W$~Zm-zevdFKMIHVX3c-%gF+zOHRzVC9WFGx2+QWIQ(iGE9!4%N zx&2D$P0-xAQpk09)C;$)y8_=F`kQb6z~RvbQUiT}iw*t0gp@us{uhNjDP2rXM1Nds z$6n8BXAweuOHNq0CJXc@5)oukPsH;3sY$F75Qx;rJrx-F<*4I;8bI|aAZ==e*8@FG zvQOHq`JX23e@Xu)1%#e|B5b)s+_soD^cHfw~eXfdLRzo z5OAgagRK7|f#q4@3XH9+keicbH6qlSNJ4SqGdq#%b))AZ?;SwPdH6Oimd=vNk~di8 zMKeXscwRxk2pEgE=Rj90Xo_u8EJM+#d^d;3!SQKq{xzbi#;U3hBxPm!m#$`$5&t*o z$7Uxg;XVO*Nk*__x>|?NF`2&Z$5}o){f5M^P zzsbEU|97_s`{yZk|B=r?mWEzoIrp3paPtFwe&7^Ww3wHg8g%Z3-aNk_*O3VH>AU7_ zpo^;b;L#$fJ4(}66zf^lSZ!t1Tvs0wpVRX8n&oHD*DAbtwLg*fUzzYgZYV?&O^c1~ z0RR|chyajTvj02u|2yA54)X{~4qg9OB?a04gy;VseCjl2$+FB|0mM~1;wU2Q^tmz@ zo?;ulPnY<()=rByBUjw@TTm!Z^z^`#IXRjuWrq+M^-Z+R_^8OO0Pao<9}hVQLH!+XV^rEQo~fxotC2QdnZ3en%;p^e}epiG4lNzh5^ z+-^?Q&;S(Whg7I!<(Ib>aHnv!ep#-n3H8VtNH)~@_N8Z4^hrIwcUGW0op&gZp~D0t zc0@igRAl91;3}vZ3g}aBN+VRW$cwZFlT|(+*%V5%GKx}l&wI}|bE?{Jb!;j8b|%0) z+h58Zit&IeI|@!BET$bLQ0NUpFn`V>c;x{l)j({NH8YlOPOECgB44@Sc;Mm% zuM*GA3-U5 z?}JKJ2a4IRy-gyQKV5n8#76HPi*+}D(xK45qlD>Cg+c%E!l?iBr{Z|KVYRZ5tUm#0 zAjH||>GasF1-M!uc?yk1XKIIe@kuO~H>~^Rbhy}sj7Hj;S)68EZ*5h=u9{_pprcUY z-ojTJLHgLo&u}BZ|2;_tOeWul{pL8-E*-H}AHlQLOOz0xSy7}x*!OR$h7*UCg|o)q zFKva2;4NwU2up_yexpdAX^Ph@Ds0z8yG;IXH(3ClFLM-(ift(CTJo6q4!t&zues#M zvLOp6(niWj`#v6BQa!Uyr4*c=GWXO=CLK)laV7sK$uX_)*Hj9`fYC!OAYl;*)PrQ{ z<0yZMiY$cY-N^-wagHP#?VY=hBZbwM2S2_?g`^6-jj&K9&*W$Wf*Ct-kU=B$D=0}b z-y*L+49irNym-U;NVASqERwzFth=*`vu7d((%@$dyyrFHU6{%3xSXpo$_-l;;eQ?Kp z5AgPu^+HDSeT&K)BIH5+fLCDX`E+$-AIT!KTha8pLH?5n4`I6eJQm|3=W#JGF9htG0|Qx7!B!d&ejd@pyS+Cv z9`b&^67E{p>6sV758(C1EV3^#s9)D&f^2|DE z<(m9(iYwuz52gW+1Juf3f9aV1DV_hDTkt38`+JuDSGV9#SI~dSQ*nMLK~bS?wpWmG zOc(&>HHd`TD@4{ciiC@u#fa#9JfjWeIM}g?$xD{o$SbW__N3RPvtbJ!@-_QE;@bU3 z+`|9N--Z5|A+mCM=H~8dW#RbqE9a;7L=v~yZmc)=|vbUQk z*+NNqz61ugdE(qhe!e<#Q$yW+Sbll#k!qq+Y)PhhF=q1+0)vQ+I%_e92hi4QJ!=6ikhlvpm~Lp z$)4cNqRhqc+apZ~`+>>8(#TTP?408@Ti%w3{+y($ZN0Xb{15{dDuxb=?{?xJZUs=B zEC)UcJ;4|A;9WPAzoYI-w8NG36??;%^0~JYPWE#W9J*i@yle}_H6|fCMX_!}93kch zYG%u$mkg8X2ZEj%HE#CDzm{ux=f(YoN4Y1AGhchjTY|2e{xDdG*hP5j>)O|?sVY`Tg)U773Yc~}JiYRL|Jt3e z>(#P1bqwWntqD4$itP1?883Xa364JOY`ozVzN7b|)>$v|%h7kI`BWVDF~tn7*Ld`m zYmzpvB65cD?5wT^$%6vd2EcdQEC;C%%A@aIna2C1&L!JSAJ|FxjzBlp;NXs5pbra~ zs&CC64w7;#`dgE0?8k~dME_@Z#+b-;u4{pfFvDu|AX zAoZ?L-^1~^9vaSld&;-mB-;m?G`_Po=!Z#Xu2BJ?s~vRnuWnj5n(u(R%o-5$t<5qO zAJt-&_^xJ0vHOs|5J$0%?>M}zo}EWit-$XP?-eevo%{16gFwnjDUi9GcaGzvV3C6l zb4K`aqq)p2f(`x)8ufQx5kIJZ6uA-IS2XocbFYLAMJic#SyZ=wXs{{m zzkFSUwNIAm@O+%D=!U$T4HF}Z{4>?kJ!{@@{|G|v2kA<dB{_D zCrpS}LFa@y>2eZvlH}w4UZt(uy-%uqgm?M71i6WtsRIZJKfMa?$hnA}<*KEfFh7nY zF7zE!b|GZ1UnMzYxT`i&GycrE7@D@7+_xK=$o$4strY5q8+LG?j^2qRY?LxCFx--& zBbDh+h_oTHE8 zg}D;5w`uKDi75hoo^rfCytCtLzgOInzt1ekSJIO038xAQoRT)>2tj*shM0q<8KJlF zH>9N|*A`E?=(K!aK6@d-qym0%1zi;8C-VR_@o5HDRQ#fM-(pz;koLUd`-$2N?~6az zQYYOTy{-FLBl7;sB{hZ|KVW!tZOTMzK~*-7n>}pHsDHp%$B#{!O9lsx4ea-QS(SH` zFk3evTr5{~l-57LL}jbcIbmPi7`k2rRbp=Q$SyP9Ax#1+@x?pEe}1XslDmI$S`Uft zC|ACtQ1ZsQi@hUsQl{em)W^%mQ>K1HlaZxz1}$pJ9Jw0sR+EHl5gqC__rBs?W6SmP z`Re9_rFIz}i1!|w34F7z$;fpzdZ#m#_xVF{#>eY&jXKrVQ+0GA0~@RNn$wlrYjE4H zPo}D9uJ%m6Ji)q%X65vl?K#`v1_hope$9KIAo!gf*LB5&{Sho$edd)kgs3#!aC9zC zmB~zX{_uHJ3hs@~)-P0ty^eeGZ-O6rJwN}Va1AYDGpo7Kx+Cs%Eik{ko*Gocze>c5 z_jDAdGuClOHd|@aT8@TxoJ8*G>4d~pa4URANrNEgfl_Z#XLnVx)O6+S=Z8%)8xdXh zJt8@I^pu&k^}@`q>)Ih-1YFf}hx?zrx!QAAsf0P{s~e$zcYQ3r^MLk3{GguXoKh|S zaf?1>I>WkMT>S=T5vM^(;!9CxmkvcXCs?I2nqMBrm{p&;E`@%~B@tX?*0<(foDXsImC=_54Cl!r47v4JM=TE8@>iWcwYZu* zS=Bh5I(lm{KvDd>uGA{?4rALD%kL*1q1CVz%b~|cRJT1OAB}&NP4AD}5n1b@OEJC* zW zjX!sd+G_1JK(}?Tz4%Znq3nE#K}ByRtcu@FLQ;DWrsaZvZ&>>3f!8}`k@%jy0S?KJ zO`2DdN|RA0368U=+fF4x)bDq8iO~CaLnDdqVp^!6S8rdxG|OI+t4Dq1j#sox7bSfr z8E&wqXXG?XohdOLZK z1Kw(Lu8H+s@isocgYzcx>9bi@e2lxd=eXBOj_I}4tG+j*9^GLPl4ECOVpJ-2es4d$ zmAg4WArzu<+u_{m_)QKT^M0lDQZf4Q7HI3svzI!qeyMA)6Yh6>5HG=n?E$hY8edR- zD+eP95(C7^?*Uz)eR$MxZdoX<)e1V>fKyn zcXa1_f@+bg)l{#NHoy8k>OIz!?2Ya~Z=ep54tcS&8AMq%!5EHHaztWihck%?D68Tv z^fm-A@yzludHADa_oNi#&h9x#MQ3W@T%CW6Z@3s%J9wmQ@p6n{uwtbwe8?xsG4Xbe z>3uaac)YH@&STJIaw%8gRkavAKiC!XXG$yS{me;ko}$MU25pzsOU7xC=PuxQ(lD1$ z-6vAb18>H@uc)SBsdp-izA4o%5{Xp2$(s{Y<`F0(svt8h_wG&ib*Q+{$pSX?<}@dg zx{W5*ba{V^h>(?wzWYvAfufJc=jJ-nh-#hRWY#xbKn z*B!CPldg_4NZ2OJy7ihmog4ohHr`itx4hoK1-8s$b=6XdVJKgRrw%s4*y%Do&|#4t z?|&or^Ga~g$xs2fAh}nCS(-IU9I%4GWo+tbEcs@r1Mj}gdl9~oimnlXx)P4MQ*|fD zW$)WM#$pYn%DMFW#PMph_t+WYx1}QJh>$gRimzhzS1lti7HF>GJwIiE^S>Bp#l;g6 zc~@&J%N`X5wI-8y-Ro_kKAuI!3td4xsi>yIy?uLk*F!2=^b$qc2VvFPT?GL)7OC_6 zZ|CT+XNzOgtclC!eUpXba}t#78Q-CdyC5{}=P27Av-O_`a>l}HwR`r%4N7&K=YGhp z*V0?7)xnT6uGT3?1>T135QmdK1 zcQ=t&OXJ?Fd$Cb*?834U+G_dFeTs(`lpWs@ayDKE8~bAC`=+7Sl|o*LUMOwBY>evm zS^Ft2`*qhqY~Gy1Qt!M}zn`(c@O)WWpI2n!i{dbmLG~0jeKepusf` z1CVKwDXx}q*P6;eaJLyUaiZNsGFCg-;yaoUJ{^hbj5@t#tbYI5ld&yQ{PMWRPQ~eu z8uBO(u64^B&749LW9i7&X88H7iE3|<6x>|^uO@J39AfBQGsgGDzx^PMmAMK2LkuPU zdkl5!_6_mB8bh@he{=p?PY#8{+r>wMKMrkTxOCdDgBsW`SAZ0w@ckM$Nj}+%TzKhKd^+$<{30_pX)SX_J>+W=_x;(uJLBIX z{Nos{C{-=Xv;ra?bjLgh5V*FNdUBQ;u|Nv?CUNEzfSch16lB;le2W-L1x9wuznzSLB~+>NE8CQotX?yqcgAt(c7a=9@`=-!u(5xx((rgfLI zPTgxg)V+ErNzI&8$qj-VN|{}-aig~lJtMkM$h;}<&ld46_e0RK7#HD7>GtQ`i650J zv^JPyIza}UoWx9IefP%n@3CAxxujZ^)bl(n?PRJ3d}LBDv~!^#WQG?Bcpxu9)8mlH`}(h9;5wMv<`Xv#vLXv>h9>N#jN^j ziCBeZ)-6PDoTHcfe)}^V~P!g0fM){yxua`jox?PbDrKHLNRMb!f7YBtS>f4+A(BT?k$Zv zAjSg}=5|V~Kz9p*AoEdoB>Ai72mTjh=M>yo)U^B9wr$%JCllMYZQHi(Wa5c!+qP{d z|1;-QeOK>Wb-sPEYxk~NweEU7)$8eB6BV`e5tGn|S5S}&f8}5!A11_(0dH={^dwlS zk%UC*g-B+WLu`fU0+u)38{QNgkmOMiWlP1hfMz`0Y;cq*a3M3}ey; zhN-@ML?4~rfqETbYR!DZhh-hW(L})u$$hVMb^6FXYyvo-E>UQ4(wD8Sva?aAI4?!# zmnD)eOFsvbpgEy*bYPAavge`Q|zE4BoWn z=q9A(lkQBG_SM+-YfgN;$yL8-Dj4D{?Nm8J~v zLKn$>)QMNtQ7kp5!9V={_9lr(=~@omSN-fyv^w^4%Ww0ZWG<~sJvrZkCr8aDjog{J^DzJV%gu zQ39$e%o}A^L2MCVj|=Q*9M~d~Y3tgi&c>m_#j^*Dr(PMhOgmL8s6JfxG=8@}(J*us zQ1+$c{i4HF7_9h#cywO8VRRd9K}c*YKVGG;cWf90=jnqY{=Ob2;$$3Ux}bLD19waX zJH2gSHr1UfeSx4)=fBJ-e4z25^uuu;arq0AJdribIXl2Hyt8BiL{?croZb4#or#BA zt^dL9P-1eRlea!~-XpBGP=9RV&|NRJ`QNMN=-pWSDAChwK*KvR;_Ya&28ZH{>%$Lk z^%5{~V4%Ige(5kmX1Qes%Uh>tc@WMxd&0Yb2k($4mM^9SANgX6cmjI2Dq(ZcZlDwp zQ$wff8kaOk-rbw*CYGwGHNOu<9Yff+B*B5qu?5(c!`iEjJ5XiyBuY$a{*Lo5ifr%1 zzG5oLa}Zh>!W!uP!ozt1TXQNi6kj0Kuz8PmYOm+NuHm?xQnmGiYEUCkbPGWokiyY37#fIySX>bZEO1(-skJd)K6^1L60rBu zJgUB>ksCGv+Uwz(8t_X<9`$vn8FtxT#{gOd zXTs)?5f>){^{K%4j)f2P~3ycUk5ESRg zH6Y{9%T7Majeil?Q|W9Rw*3;@nRFHSM48e>hs(%$`C%2v-BVSdvj)ipVnCiKzq^n= zkVAyfq=KvSX`%0>!w$?@B|1}s8d01DkXl*7Zsp3+@nesR~>>6B7}}R+ui9%z2N(wo=XA! z;&9DOoA1Hr{Ic@fvT^~v-U8i1IKzvOt@8~i*c;H!vV`k3cb6x*r7|rO_03GC2}B>N zK_1M;Nrr~W{NWkC$nD9tHk7Co--V2y-I-zfz<^DDS{n4258PU$Ac_DN}I}=V-JeX*<3r0P!|JZY~ z-kdsZJn5Nv!I-pDPw?n%P}%g#qYt$1UuGB?W-Q)36pF+oLQM@l-+^Gg9s5hbGR)Ph z%caLl`jG4N1Qp;V5|3n<$_NYnyVX!UiskeLG=l2=Th@FY0p(zWzmUS@sZVH08oDk* zR}uLU*N%Jd_PhY=G73Q`VX~Otf&!@XFXp_mz&6OX;&n7da%n=GW}vKqC+Q{q!0MEK ze4iZj9f{vKov?hs9TuoBE(y*v-aOp?)>P-&+SrzGQoB8A()6`GWDE==cd5bMbY%b@ zs(QMAL|*f4KCr>8251fkJW>rZ zL`OIWvgvBLX10|E&CmYcU#SI$zwV|9f5;wrEkigmJ3j9` z)U6V?k9jb)COZ+Iw|h~%JJOZbk7lRO{A66c8ZEO_%1Pe8O=@Jf96DCpWiP@eTLsFb z@@>kJ3hna47JCK0z+dX!SvjFy>kPF2c&2l5X_ND5qK_|3U#|-lH;fl& zXW2JoQTEcc#WIhBsgM`$@Hze+evg83*$P!|H@BJ*aFq8CdOmG&YAd7jln2fJO!T`@ z=Bf*fzi`jvbKSCe6Unll_e-#PMp`0nfW>t(%potqhg zTs-RF?yCRz;^5h-j z#|3*0o&E8>C#FUgPa86~Jp|tSm-i&`SL|0;6_wBvs$kKn?owKqm4p(bg~JjD8*9I} z-0YsFnw3f}gn=^gvXQwJ=2}H{6D4!1x{ykH3M!)(OvKDq6D$7MUb_>|2(`aW`)lez z;_x4+6O7dchV*mxhpg#hIEWp4rQ1`?J%`_{VlhKhsL?X-*QZYe#8TNct83OYODKDq zU`Gos?t9b(Ul=tDuMpo0a?c6G1f{Lh_8hbK*q5#E^H4LDMM-kH$BsgrzTRvP!5hF- zxt;Z+yoD+7Gi=Q_kBO^uE-@tkwf=@Wa$5CqLzQTuSv*>gy=f`r=_HzUP$?Z(6TWBS z$lutQ_oZQqr)->N$vg>zjFCM(iJdl*Uxx6r=PW zO(|6kxjM9Wg;IcAtI2wfdm!AGWh(#;zn8|fSIcR zlNhZUrF~1;syM&mSLl)ay%@71pAOw<&`?;LiZ{$pALOrKdt8~yj z8-kTWseyitIs~J0_@n=RO*aD`RMktoGZz^>9gM6+CSyb4D;MF&cW4BV2#rcTwpXTQ zK4)ySKOy`+QKK?A0cSbCCIj4NU}iBL&_N@eL%Kf(L9IN^7Q>*-C*)7K`&U5iBYNi0xHbp&>?8b%$kt4Tv! zuD%^$m0{Oiw~+qP|QwMBTeWHp$A9=8{<>N3FrQXHkMvXE`)QFjN{e) z9X`Ws0PFaNEkNb1*i9#Cw;yKvycurr*E*f-&OZCdQ)@!OMP1Jy;o1{Wh6*b#BK64f zJDj5vEAyEJ9h1_oBbhs8kF)YnMSLE*+rBO!;lU`5uFXeQ^cXm{Lt=Hn!Y$25>Bb%{dkh2gPkUWW7yqnMoVziMvPg-ZRcW-RtuQoG1abHZG2 zSLxW<1v)ii9FB!$CdA=qI)d$yNIX%e3H`vbM_G=Y)6`Exh`V7)^U`|as=DN2nX&_V zs~;-Io+u2M`$%K-Y=!YY{W0Ij$rtC!+XylIuE=+20 z4bS@Vw5y?APKBT=B01!f_s|6607Yf0Vx}#7BjF3u;x0p}H@ehKdYA3}_~M&JqS0(_ zQ`-$bNG3|$!Dj`)WS-OR7RY84>N|ltl4_cuq5IEESu?R{Loi?%?TXwHS2Hk@+8&c$ z_i`Fof2fDA*oU(c$el>`4ki{PLD~RsPa7*w!;-5t(_yLgHDGHB4)&WjCFi4uIiuB= z8u&W%d6u$(S2gLaO1yeMs&uSHgIZz^Q?&h%?#TGlho^8QX23s;@hDO5>Qy^A zrRl3Zw@miKjzXPQc$}%B2uf3$P=CzVCorBX4!77SXifriyfZmo^=!m22@@|blR&)= zOXU5P*ycXpxs%_;z}i=1lGEr2CzvG@%?tD7nYE7wErtqV9>~tQ*}E;G8fuRkm4o-; zDlmO0Kdv#6A?sug=|$?9L<@vdw_5IxzMcn?k`&r8%!1b~;~#u1c*nSHCm*yJD_pR# z-x+T_!_cRpo%3Oji_&EEEc=%Iv-h-dls?F0jd-!}r0CEG8TN>3w?dqEMDo*AdFP@{mM(*M zai%ZW3O=ZY>SbsYL)NX{nd_SouqIyUdS(MQTpQD%T(sE(`Ca#U+II52hO>}pL*cdf zCuI+^oQ{JxX!gaB=we<#4IX9K!<&T{K0FXJsQDZOs)2|~Ab{R|1MZ!#yPvcz8_9I` z#6WMq5U6@RR=mZJs3z7V>zl!$>c_rW5bGbXdcam3BexnkER_92ou_fUl#gAA)H8Vw zhtR=jnwakgj3(ooM(D^WjbPs*0vFoIB$bMhLp0Bdx`>M#l&EdUKN z=S}S|Or!;Gd1A3$w}6!dv|iJ?2*J>v}%&F45&R6ES?AU%ZCF%|lseN#T=G zWREXSk7PS{sA`gHuD7+*Qc~?Jvzy0~MO58w0VuMbX*#XVx3~z;wLjBoEAkDO`a3^w z%df%&^yVxhtj$v2!rz5|va_GXX;Zu2jIqt|m@CLp3y>+;n2WLu-z|q=1&%~zW@55N zz-B(HsDn$~TW%?5XuE!A%CplpqVAAJ+nVGxb}9UUPlwBC-`{lG9f^p_apZS&+jjHz z*03*OvI}GnAH&TPT^(mhyEn>_+KMics0}~SrCDqal4}KMU$V*mb9|{XF-tl_8X~OT zD&-!;kE$hO@v~~Z4;S!9f@9e2Z`xYy2H*7D_!KJ#THpT3?myp&y|xSUJ*MUoFKoqA zlZUMnR0RXh)#Xr{Fwsv``tW_r5nK5?HkBCUMZWbJk>G6K|NC_WcZ>H#J;Ry;zFXfK z!Sj5#wkX{8qax3#EJmXvD~Xt6!*EfVD3T5Pr2&1P6Kcq@_L`@4=Jbq(dU9z9Pvw%l z;iti6=8&A_&4It+^)SO71Y8-UV`YEV-rb zHX9vdl_qjS8oR8Knm`Y)gP1{c#;KMdRrVK&_K3+ydZQ$Lu(39TgtY5}?J{At`5R7R z%o;^&Gh-!nIZ_cdWW2CkRk!^{O9VtR9>_eR2$q&uuDC^iqmNVQYTYUy`gkt@f}l+j z1A6qoYi)-kb|~@)G3K>+sxwV_7;C5(nDZEfuac)ti&vNO|U%VkowN8Zy<1 zpd2O$L5?8t1-o-^fpu8w5l|V5Rk7+cCvT_P@2jL|ww0j$?#VJpisFJ8i zamYvwW@>bs#^VHf+wt;C#&EEFwcasOIst{7E?GAy7AF{U z(xv$?L$-RS1w{Cw87qp%QlSN?vFbU~hFFVrHSW;WU6VxcC9C0)F+yNM<{@l$UWdRE z!BxE;wi1lv-OiweI!Wsq?&-8QhDtCSqlzDx!i$4;Jztrn{g1ZlmWt&!kcuDv8qRd6 z5H31$#-~WOyQRiSxpo+~UR%v6SMns90Ujag7_=|9JnhE$1WPSp|8JHLqohpVc^aL( zqv-UI-_&b;^OEp3Y(NEI(EY)(LJW#WCnxQhkri)VuJl&KS)cgd21MewZojMr0U62o zOrFHCL-;%5mCJcei;}6?(Po-NEBQ4LsFn)es`9UV@ z$|rx=%q!=SVR%Ya>KF}$%cG7nyA)96(rHY&lP-hNgbQ+y57yaw;?Qmvmf9KJ2&w}j zNB#z;k-Vecwfv))h^jvPbm{M{kwzV`XfhNqHwM}jGaeqalNG^)W(%PV!%vO|h}t+G zyYc9>o22bi#i7>BeAT8t9x1|PoiRS z>L<%b$Z;VWGEiR`7NI;mXQF8u%4AtghyM1#(I5S@sdSMFW(*O&6@E=ktx)mu7VwK) zm4ek3I1U9I9Jm+lcRmxq5wANSa$RtCN%SAG{}vA#*PC+0l|VXRcoB7P7vRbdcsEja zi`;H9302g$YaKlm=(p3K88T^&X4`k64t!nE!PuECyBGXPhB3^GVg`s=_2B(EQMP;& z2-(1i_n6k26q^TBi$G(s_u8O3K*uJ+M-h1v`OIX!z8uWbf=5PJ)qirn9CvIotbBRXa3RGaA<)3xN$P{k!gWoE25GlSXWr zRJI!ZQu3b|#!F?_{xn<6-qG26esn_ug~%hB@=2>$luX8mm}Z<{ldQb0!r0-YMJ=Lq zb2}Io53pYUXS80uG^Q4vtxu)>@aX$dxF!jzE$|DjWTvHb_PYbAa-A8@ z#@groN%dA0jdI6kJP95-_|R+;b4@p;KAyF1TRV}|Dmc@Yc(%?Bf(-?M$`dags?reH zWrqeg6$b5}lfLDv0gn2*+w`s=-gwN$I~4cp6PSvb;%(A5dG{4ZkNy}Gc}Kk1Ri73m z5!J7WIv^h<8lSEL z=wlkvQSHVV^pCKaZCi7m_nFCH;5~_8QuqFA%k)&v>f75tb2hEv{T=yG&BpQ-=-CZH z)*}nnn19korG3^K&>s<%vo2PtBKEj=0gVH@JeH@5!hcGYLi1|5gv&p3qsn-wp^wR6 ze9Tc0TnQ~ja(P$tjavMD>jBSv_1%iODQNS`O%mK2hj(=#EC?14 zm5$ys9B6f`Jxl+!u$!dvS)2{!h^BA~J6gQLU+Wup*XrJ+)GC-xs_#&`i-q(HE>VTJ zMVWhNwXeH{J3;Z(sd+x@UU9n%%Uv1(**{@y@?T^!$A6Z)nOWFa{XQZ43}*DpqzBw|X00!knI zUw7ZL)jZ7NIHhmrKHTgU4{~dVO=e0+#VXNGVV>3lvaaeN4%s zefmr9_hWE}CAA((?QNE@nuvBiyb0am3R2Cy>cm{W^l%ZWYN}2}<qb{i@z8uqIpDqJ!ccN4Ddj=XSlOKQij80S%#y;Ftqp2Qjv##`I+Y>#}M9_g_Jv==fcPd_q8Pa^9#>W~*HR!I1hfg^Y@v^OzEIm{(Y8`i8sd z+5OKJKt1RVKxp;+f=1!i_7K5i7tomIbwLzHRNcNX6jM!j>IsOPEZn){sN5|X!=c-` zFUTPvcY_9D4jA@B;PFCh#yRwRIp+-KlDH=QN<#ER-uip zr};+7_1pcxZgg$^J$AY`Z2RsfWnTl{nl`@K&V^9HLaD)L^iy6*Pll(U__Cf3jmk0# zDV({Qa8+`@(J%p8nCuK0o|$%&wlHmCrGN5@(25?PRnvN04y2;E--+1A%2XWRqzI!oR^vohXs2HV#XC7( z_kg)g#t`&AVFF(%zHTC}*@5#au-A?YT!Z2Ow#j<|=bgMrf7{JHc+Tuw$wd{_t&TsPYk2MMg^`=LZ%DO*?baLymZKl-r=W*Yx70rqoh7SkU5o!f@(}_ z7u@S|(rf#Bqo}HlR~(&ZTje~|Kks`%lsuh3Fy-V z$iYdd6YILk*-xwA$-<%nWr(lcaLr*s_j>l1{d+#Nf>%I9w+Ssjn0nkIZ0RM80g&U& zcU@*BTea`2iRGKPCkIzTL;GqyFD>x4uq7VIpv)Gs6H;A1gK%C5T*`T&Xnh`ceJ&Ie z!hZuBLa*?;gl}E+@bY>_cvhH{mXEc=!%HU20BD7gMmv~WNYre$Lzz<6i#o(|$^I5FzTNe9~sz=NaCO=c&@(%JSoZ&gkvx~rU zKaOIwZL&n{qv_dsL}-t1a(xUA3%WNgS-L%ER5Q;t_*nT@jSB8g@0wfIu<+$TH4fr> z+K{BQ-<*Iqc3*W@mPGrlTN0`$*lU;}dcUuzyQ*4N_9{kuB^=s2f(245U>T1S9&B)zz+Pe zjV;iEoEi`X1`sMQCn_W-DQQ4vV&bJhSPQ}ykRqtLvvC04FTsr!h%+d81|#d!69YRd z2(Q`4e0iW$WcGl_=;+`Vd-s3@_PPG8u|5bQb08K_tzL6BmU@tXNTf_qAv*wSP}C|M zSmU9YfrF!CA!of?NvkWf?(D;tUFB8fUZFHyWOR;{c&I#vy(W0 z64ho_fDRm9K!AH-YCH1W$o=;4_z2b+kjE^7LRu2IPXp-2*QCaaK15T1KPP0L=C~nyT^iC-HUIp$5;vi-OfyVlw z&yMfqhXEuW6chms?Z{9DP;Bh2fdJHRT{yOPOg{mCNN4o`jKj}2W?(G9$NO#i%x4Jp z=7vW5H#6Wf0y`yDth86k?}zgkKoc5js|!rvVsiz=W5yv4go?^b8*unNcs{HHV+4uZe$2NOrS&;;v&A*zl*Rf)E z{F%S~^@4hJe*n`z`iejLqX2*!*^PjSSiffM&TjYh_xHj7e4p(i z*MZ=K{Ud)u*MQ*${E;97gpLpo zz?dR_gmi!)8UQ2+;y}S~ghOBk32(s}z;H?aNU#Ay7l>Z7l%J5@r^%neJCEZ4q1*SK zFHFatQ{}gRG4;>CIOV6{)n~#Vi8es!7}4vr_5-qewdm#lzJ4IP%>f_!L(jFWZ;VD> ztJqlGh*N~$-p677bDcY9y%F!-AfyEi?WxQ8P}Tn9JGX8ALq7Rn5QqMK?qU81y@YIo zy zcC`&&{k+$HiX~-kpMQek7rhz^3uC?G!O}ypm&7i zOaM~@JJYXtf*xm(_O&0<5nlRo|Gw8aE&yp?=eqz3OK-WuC+^Rz6fQS6SC@dhzkbK9 z`3K?G>n03X2T1H*I)+WG2MC=N$i~f|kUO0-H_A7&arfoq%5%Onyp3D}fdL8y^|DWZ zQyZ!j){T(nHb!v=x(77{)%9{ffq?ZejfHl5bW5pJT(l(|P;vP7B>;xzn8MY!i{GYh)eC<7h~ zo~#YXn08ZxB@E(zu&8CVSbR}XguYL7CSKvZ$Rx0D!y}6o7ugQX8UpaJi;rbbWA2%W zt|o)HC4!ojc=7`fj8u^pSG?c@33PHB%)&lNH=K`iemJHQ$gu{z!{O}pc8D&ec~vf3 zUc>y_mQ3O&>Pm>a&zUwp_RiHT;y;5r#3D-L95jW&Wy$1&KL2zK?Wsp3H9W8Q%CV=# zbMNsS=2zL@fF`IHIv`E!I_Fp7HYX!$89r>9CH$e>{GKCsKTh10s=9%;;V+KRqSb!% z#$Vt@ex{Mudu?z9sYW9xKOS0H{oG`^U(t>PgB!^D=)%5I_wyQuAz1z$`g@00(&D3* zk$q7I*c;H7)C$x(EGR&t?Yj-ZfT&diC78xYcR4|?`dKR84nD?HkHN12OWvU1bg7z+B2VTWtFQCbj4bFdEOox z={K*_cyno<&w4F7VElE}zAIR*n_-b|7rhp=rEEi6hZXyz(rebBE({giDu!eT=FsSN zm5L&DoEK++R%%}Pf)p~JtT$9Z?Z)aU_qHrItM$Z@FY{qPz{DnjnE8#D1lwkrVkB8; z8W#r+?3c7KMTo6YkUV6FNsx8EjYP{4A_wN^NM`t)`@2lgRQO=kFM`i3>jRZ9qutTB z3rfx|_LkmHU9GCLtzH&bshtx5Z`Y+GQA0+%(^1uUd$&~yo z3%pl^1hcX)m6-OE5O|J<0mU!S^yZ=wIHNHXS?dg~eAxuUW<(SNY(xQv926WX*^45j zQvOLJ&4Q#j6z$Gx*4Ct!jTj!AB+sy3**^uj69Xfo=Q5rtR%jQ!zZzfu-Ilc#aHd>W zd(dpL!V+fIuC(jmYPm(Ko01T{ji;k$Y21lo!zTE(lDtp(DM`&4!!%%C-#bK0J=XiV zWreWD2FU%XZhK5@FJOPIj0tKSE5rM(-7Ef^nQssGwSTmx`GmlY77tfkq?X7!whrx77~O|z6Gp(fPy1Q z%Rehl>PRjq`IvO4Dk2hWz9K?vLv7s}HG1}*nUWO$I=6VweN=N0o2)kGSMRh0v9v$8 zB{YM#EdgC3olh_!M_Lqe@w*^w{n^&y`lWl>EkrxVpdp4oS9~+t<&RaWw&tEGo{T(X ziuhU`ei!M}bBBWS|j;c-lk9kG(lqIh#Nq|1S;u`aF zFmO1~?Pi*TwfgnS-#~Rl79BipP=eV`wJTQ{|7Pypb$JWX)I?hj1e@lKOLYSs*So+@OM31M z0IY*WSZF&{3A-3!TBgGr>jH6>fqP8<7*bSmNE>++qL2t+DlPKLng~Gi>!cFENYd$) zxF(asZdmVs3&~y4ZlQ?8Q|V4cTS4%We-%vdGp?}%+M916a z1|qh>prkBOmgCc;g1G}V>Pzgak51}@%j?VOAdhO^59Ue9-AOv%6}r0!hQ)|&$h z4SF+8e9Hvlt5?$L?x1UMGf%*o+CZ?jwuGc2*lacOLwaC9ZtZA-{PfpXu1{aJFvf5j zb%%}OOz^J+L#A_QN>OqM@~Myf`-`G zFW5XSsmko-FB?Cl#4})WY=qd>h*~N$bThl5%`~gx2@!O>ekG_^8Z!|H8pl>F>z2_$ zzh2Oy3L2#4SbWveoA()40&``BBR=y&W#gFA+veUhDqp%(het6x6ZSIUcXGn+*xe(c zhw%#`Ubq5dZk7H@h(Hg1Vpp4|e7Tu~cS0HhXjc z+oG0Ph;MSHZUr3;>0Z4!ku~c4Y`R#sWg!t7O_3-a7E4$iQ^mTeP8C=?t>9NF>E?~brQ%Qq^z13 z#y*en1gB#E+;XrVQD!Hrp6NrPTxyE64P3WQsQj!L_z7^$h*V1tSwggwQ?Jm8u zGEOn`p>CyNoa0pC2wDVZyu^k>BYdmJ3`WUj*&ag4rg5KY0dWav93Q5LIM66i%&0i1 zGM4ovQz>5T&~Ok}&k>|t#M~EI$p(Z3;2q2DKIO4>fRk^bBNBlXZ)r;+wcc2a+u@+2 z&C}9C7VJq0GBJ+oxhLdGdvc88StFtJFq$RvvDC43vP7ZguV;pE>lyjx>^u{Vr|RF1 zY(anHKxpqyUWt?43|zy$wKot5N!s~gQeW&W9{9QZ8L$H@Q_$BfWi#G%MC%8jkz*4h z0DBm6w=^t&*%HL|cPq70_L@uRo1<|L1XGwFxPr)Sqrx-ho5#CbNoWFMwfR6ILQADO z2gI(+?@EH{yhrZN)toFSP=l#Jn{5Jx?C5leO*RKR1wC(qC}SG=2;f3gn7|%&E|7| z*ijW_r)|D+F;flBot}gk!OQ#JvS7J2k{rq1$x4t!{icy>dtdQ2pPmrhPSd7fQx#(_?HblRT z`ZxC@2FK>XCQ{wxx7a}ScC|?7A*(k18Bht$hXr|${378?>Y*pK(|frefpBwfBamlu z`>Dkn=oqRD?9D5s$POeQ0(VdN6E*_f=stC}mkxkBCF~pp(`>~xWw?*Q7-EoB(VqTd z0#ZYHWdJWNIGr6Dh6#fA-Tv3n7&MqP-?42$+b^;^GP^q{o6ca;A<~#|0!GYs6&V!> zrg+5nWYZo2taJG2`{Yez$(&8d<*2uXJS zi#5-$z_&#!9|8|63~rAuQARb`FfmAa@U?YH)hOuWMilX*VzjP^1(V|k$3=we>$1G^ z`jo?F%ZgdEoTq-Qp}|mB5N7*oy}A6)(J*_bq}f=p5ez4fn>c9l51uN&w-fj$>m-=v zVWU&D)x6mPpzGnR_e5fzR1<0bx89G5FEp}89TZhYdFcFZLxqI8(D_^`gF?fU_U(J# zD{oDFi;|bD(CP&K6jt&~Vq@>4uBA&RdUQtY>V8Cl9?T8C_~-f zK3{DUqA)wgn@U-0TM?nuVkL$tg?FFj?iQq|d!xiT{i%RBJ3oO-*b^q+ejC1K@c#55 zQ&1VfeBh+onoa2vJGXNA*MWu~c=~eim?fpUF;n z{%V0Cefc1~ZVNU&FaHTN4YV>H-1YM}k8+0xH)uQmTRAh!H^cd^$sFV>`8=SRVPXMC zp_7|$-PUqmxS(CF7Iihh?8{c|Ge=uaxjAS&tUiN89J3^e=S-~>Jp&(Lo4`Nx#S0;- z=W*>vd{$b;?VfPZGodL+n)2iLh;q(TksE%_gP?a2ey{f!altzJs>9#Rc8|Z z)wFQzlv`JlggSWd!b-C@?qc{m+?zej$(0Vb;K^+KpHDC1aOXV>EQ&_csd1jzie3BI z#W%aZRXV%can^!&8_rn~BFe}RvlBJQ1VZ70z%itM@4g7qIBbnlB*dYJ)B4)6C~eb` zD=4mml~0sVSb1P1&$H_h*Ikmdd#NInr=K&97u_AzBf4d#d-T6&zGO(Y6k_nu=P%wr zE>C!cZRcrf(~OyuQWu$`+jKpW#gmE71%!4W^5X*Qpsu3$QXxi8mHKBx_;{FTOzJe87n zE_$@hvcz~m93zb&&k&uq>%0$E?NEua&F_PdGsU_mc#4ucL^Yh1Ivrazgud* zn91?gP6ed#r8#L}82>ZHJBVhf@uI@A!s7OFDe>~HkyKL%9sf1#2`+6WRjptcqFr;T z&mB=8_M=pY^s|5o!x0KAVIfiUiAg&grMjh>bn67;aKs{&cDY6q#{{40F{nEIf&ymj zG|y&KTW3qSq!-hr6qzb=W zLK4mwbJMQ&w;N)LwxzSuZAf(WIK@!P Q%G(zB(R_la{R|$gXAN<@Uoz)9-eLvhQL=JTnF|QKE%_$IgO3jR5O^(?hEny zZidHTj7RTydWh^sGL%Xg43;zu@B<_4mz`Ke0V58CCv-&nEJs#k7!~{Jx*Fg@@`=IO zx11n5yQqm#Ins*L`(&J(y3CbuX}a2I&cYLxp~T}jxqan^k^N?AAA~iMWgL)IHQQa3 zktLs{*zFaywUWf%RXIY9S^`!A`CU?~)}}1#x^cE!Q6)}8;ZKwg2L80YFp4E@c5FKy zy*<@#uK+@4Y0sr|WuTO6z0*@9>ptgXW161YYz*NCXLLXw4rDYSWIH#o0~OU1)g!TLA6pfq6#oeS85MLCdUY6TXa}Pfx&N0)FR}*ahL&PulG9_! z)EL)m1NmjVb&RTMn`j+50mjZyYH_01PBB?PV->@Ys7F)HHoVk!HZ*j0fx=t(R=2c> zcMPcm{#Pf$GdNB&<9vwIaltXT)-kN|FRov?A2uU>^--iek;t*{-me?MvnY8D4%`%8 z4G26&D9p6Ia98RJ#WKB^TK*ZUmFa)q@6*6eWmL(v1{K`@(phUnT{vU)SaiAel&H-7 zB}t?pG9cRiQx??qeo^LKuk^EG@iDmJO{&@}p3Hq<;7l{bisv<9{99s!N>cHhA8~$X zB*O~dlYE>0xaxjJ%|%DQR8)%$$Ld*&WleY7;MvR}O>n>c~*vh3v3Ia30nn0a94`_>AJi*`Ogwt@gOv5@2F@gbQ)fYFX_8de$eGgz_2R zu^a}Asfyp57REnkBk;M`mB;nPui5cby?0_Ksu-LGVE8K4UjA3-tSZ?L4HPY{I2xT$ zW^rRtOR&-YB~{u)?D5MddnvOEtz}HO!?zo_TLy;aT9BKhw@#uOw@VcS57M-(SrQLK zEcY5p8DPfjzL)oYDPzEVQHv@BpXB;Fp`<`33?uQKw=L}KEmTA{vf}B|T%Tt|$W)_Y`ah==jg>qu z=bVsZZ&>v(Nw~+~bEri~Ed#-Px^p`vp`&$yXkRNqjQ#$YRb=!UHzS?kfbT%A{PMTz z;nSN>o}{`25mM43D?;l`cnpATwhM}g!ER$a3~;2@&EWBQGFT6a;c`I-8VYjcf_hxE z@bl`*GIsrXacE%G;oM`2?Z|8pYV#wF^#e^X2&V?JC#|_3M9o5Jt=-Oa4ws0W+jD!K z1U-n&sVbMfiPlmaBErP(# zafcrAJ?(BTgh?wip)vw=a|+JZobuDS{apZI)gt}S%A{Qk|H(k5f$cr za>v-3TP++AXe{(U&&R(_Wb#rkb^XLD(3t^(&!7YqgPT9Ia3Pr#$C-IuU6JmLU~DIW zE1UJjkS3K_-2^n>jj-6qY#T$n3KnF&nX$y4JC>sxqIKI&Z(d7m6E#g|b@6p^lCDU(m@i=!J*9FU_>z402-9 z9!G=pu0-xa{5o$j0d#I|FOQjpBa4IA$dR7OYUC!7%N%+vC-?#m$!-|y&8=su$6wyM#a*s8rYkZ`f{2z(|4$IuD)FRed@;%ZrOt}Jqn{G2 zTSoW9vv0<98UM5!y_ef%0ejW!b{5&q|qVn&@?OBpv`W z@TnNr_Z0@d_N{Y|9sTRcJJ|ixb+UX6XVZS}5%8){@e)+@W*X1C98`6Xxc6Xk$D_-- zOFWmf8k0SRdIGhM+eIj0gs2LJZu(>@`Sa99g$*JKW#^pA<}{k|lu}i{C9qDL_0zE% zEuYDyB|%`fZVL?kTBerxcE(=zuR50~Ab@;c+k~4kPG;>Vj`v!t#1;7h3h)}8@d{Gd z4nEkm4X8sVa~LICE7^ZDbJiR=NylH{8 zsK057q&ST-)Lh*(DlM!h+FbMvruHj}iL=n?xf;9)A@$bd3jE{Ff%$q)tW~eplB$Lj z;krKf-zqM^si*gqdujX$O>e0y{u2vUbd#PAT`b8GgZD%k_keTGz*9k#6BSJG&y`LCk@A?eqDScyP&;tME)poAS5vLnA}1exJr$n^KZ#U{ zq6Veo^?by;*Ms%H1mtWrR1sz>8KZ6Iw=GT-3;B+N%}(@}OSUjp(L2h$kno$73Qlb5 zA^NcoLw1~gx6Xc=l9+p}X;BLaC1TKcIm7-58&u=mHZVTe7+aYXE}S}^2bx!Fkg!O$ z1dxS3zjA7eE6WM8P?9`?%)Pqb2nTKw_AobG8ryZs0~qS2vHRSO1ZQ68a@zFV&Vx?j zJ0!JS`l@p2EQf}iDMPkI$(EACQhhZ(Spr_X8MpYKu+Bzf-TixClMTms)EHez>C9B{ za(1wZtRkU3{joq#OxR^X`{C^lLV6E`uitTvDM@8C{+&rKxHD)>F2gn{Kv4x0d{n9v z0-u&8YvqKG`NaBTW~}%8DBw0FuIRoX4wvITQEfM)L-(8QqV|W3k-tl%gsTl{qfByS^{f*-Z?&!S)@jUqzVe zZRhU$SUzl?isHjI%-_^wZ-ga8A*<_POA|W^c8fv9<}^<~Dd@$Z3dsmTiisKmlz0CD zRUaOGG?Iqy*gjTC^ds9;eWazcEv3w9gBmV0g{Cr&??$Ebb@cKiwC?!N+nZTYTKN;} zf1vy&JEM8}K;Jjr-wrxR5G3Z*&^xgbaf{KnTAKi;WUAomF{Lh-9U~f%(V&!O&{+Ra z6pbLweg)G=i>?qA$p?kUkZ?d>ZQxg_`o}^k%~lO0y26|pm@)NW&SI@-*{*GQGRi{z z6sgtjb~^_ux_alo5@&H0CxW_9ATmn`jT+*Q(nPZ%@Vq5x+Tn8U4P%L)bZXeE82B5* z!msviCedCL2(_3cCo%W$-Xc?vVX24b%4M8Z;_U`2{SA|`%K_eGa~Xf~ ziex8UEkr@<_0?yRyYZebJu1T{w*|V8Qr~TXNqpWrCV|k4raGa*{60}w7S{ohB!d)L zZHYIa<<^&0Qqgy<`KSybMsHQGDF{w9AeR#cN(tmtLH87KRt-1g1Tf!FhY>I@*8 z`uD`5MG(Z0^7+^jMg?Zf8HyfRKABVY9jf=VSXI$9A#DY2@xMeU_%wih4K!~dPMEE=VaamZ_H`=pc>NPRMqp2`PsFE&oFrBw2brCq$L3 zY_!?0qy@VDw|i<&RNnp_+Wd}~NgD%NHT}DD?=yyP{t?LseU-wpfsBem%Hy-vFTJQO zrkcOKG1(OU^v~1e8&F-x0h-EoJWGYWyDDGfLwKkeJOM;F4RV*_g&WS`vshLM-@^;_ zz9UN8XegGcqjkTaECgg}%aqI|P5LbDCYxVW1LY2ZJLPFOqpY{d7leK5TQZ_~!iT>V zgcn})j*FakYNcp1in-c~&j!r>PAtmo`gFekQhaZa>+%w7$?gy zB^(|N@}9|4Sri`CFx^)~Sg3xKFS7@g0xX7J+L8w*d~q~Jn=nE#G3FLZezUC$zs)o# zeVrR+Abps`TqJek8ArTjKiUg+cDLJ_xdf@uLL0SXvQ5n1m#`{2d$E=qKiEj8~;V$awUH zEA6dZ=GF=jk^eg?@g565>U)(6w$_z*@A*YkZFeF9d3`c}8s5R; zWiPB%(7f4D(R3I$s=4J@N}}l})4tD0!hm=|XLv|KX2HLo3Q21;^bVWuKTYS{A)r)w zyz3?NyPZIf(Tl6qah+{`0^NUhR2v7Y-zR^mXjg1KdaUxjpAc_6t6}m`u8mHL;*gWJtcMH)1C~jr?B$bliVo8fKWH+nXDRon=2vJa}TBn=NS%E8T&S zrIVYzLKNfuFs7PxsK5s`tO`Qy^?P+%v=K7h4~}lm!dupuuOGI$83V9y^N^;VwQOOk z4-ZcX`*5cJ73B~)MTq0FMRvmmhha4Oy9lKqutE|74Ts$JCPp1?za9dtWnu6{@g74R zal$AL9yLP1{&OUq9WjR*2>OhgwsYx;|Mk8N9x||~)E`!{pQO48NcKLNEDs}j6|Yco z5gZ-r@E5E_@H6WY_wvllfR|k~{WD3~ZG!xU3bBWH4Bs5S5oKXlp!#YY>`03zwQLck z*_CeoFipI3mm1%B_&DGyHj9T7=Ow7HC^FnwY;_7pgg6T3850bG8<0Fv*pj9=d0>hP zbgBv(EzUa3zj}o#Qy@O5S(AGz?Y-cLELF=xVakCnf;H}upOg3(Y^q|ct&V{oEoVQK z&hI6^0UUvu%1rF#ru`tKdocEVQL6i8qFBmETetLO2O2tJp=FRU=!#|fiU8-6r61lo zI+_F9PxZF($g=DfZXWYD#@g@)*Y;>u`6(gVD}aJ|R!#&1-tuIFnb*T(S&U^v&4In6 zFw%yQDOUX=S&qyoO6ofzZh;GX)yr{2|6jaV+3{X2flWX6y zl$QY4)~JHkRn~3hqvppaG}&9+OR|hc_CSHt5lW+;+*Fc&o?BRm@e&N){Q0wTNdc!P ztPpOJS1&~VV)QOypHmXqZc>TWuhKD3V7MM6g<~*av_qobyBBAH;AFiaceSA|H=+J5FeoIQ%xD<=nT7DWO@jIaw0n!L#62@xb&=3O$9Z{On zF>>aN_u4yqE}*m=cHnvl626dAKy~5Ss0u1cUK2dZe@5@W3gg)Nt|8>isN+Q}VMNkx z33IXs`eOLdhP_al*M7!s46mi|c>m*p{Zh^J8HwXMg-rjaz)31gUHL%+OYe)as6ypN zRbS|+q(IGjWUzz--)c)_uNBYPVgb(bx^T*}c*JwMmvlQD^^R#0a`HX>)(or^=_>B} zL?w=pBM01*h;qON@y3hSbMOr43Vd2*g`q*zM4oh}+9jV5mIsQs67IMCKe^p_$236j-kNhlD!vX;@H9k2 z3As^IC0~ha^Su*=pT2~94l1>)lvMiDd^F4}buvJNA6P6eM_{d2(D5|EjgIe?YWV36 zR+hdx_&anH$IclsZUnL_RqVqK6)}e)E_-9gAvH#P6rMdr`aos;-Dy5opcf+qv9g}D zLaRNcCY=!?ndGoXrnnJ0gZ7Z!$)?9-=$8VFnZ|v0tS0h5#3(9hXDQfK)U3B2pFP(c z|D5Q&y-GKg1dI+Z-kiNr+i)oh!Gl>`4sP^@qd-5K+d=W#RHmb&1Q0LNaiUrk_O?)xiPn21AY{<>$ ztYn)6)yy@s@L-HPGU@+eTQ5dE9xbo;iouQ-mi{B_Vjg(Bk4qtxYn|jz-TCT2c4P20 zv)c)X?LE>@w5vZHeNCafc1fL-G#jC%KJiEwm>u5%fspH)+jDrodz%t%S;Tvbsr_0C zx80nB;xoSxR?KAwPeGwWbR6%Uq5SgXm$OIw;I3;bY+>9O8Y%%oDZs6jMs^~j8PBDy z!+BEC6GJSgC{k)RD~o@i-n`MEY5DeSRic1LudSbH-xt^yYESi90#_$$c^sIlY%#Ig z%gvmZz0?hOSx)pdwtumk#}X7^=6Wc2PTzWJkUDhgq1Q>X>>Jm;>>AI8`#F!l?CoYl zbi~%M51=dv%6~gD7h1FO=ZuhArjnFBk?h7)#dlCO`FB@yr6ef=rF-D@M-O7`9$#$a z3$TiDhAbX7gbV*yq@c&|=S{LDFQG_wVnty;B!jO%DZw^jx*aT=UYQ0ztjG&M% zvGIVcoRVd$jj;k9H@8#ITl&$cO)0TC%U2(hv-EuG^^xZ2SNt8~8Kx-lbm}TA3^9#= z0gionQP{fKgs7*HBOyJhZsA_O^xqI9(+a;mg}ouk++EMVs0_>HC?lDFpAes+M(t9l zY8t*8uNJ|wekyL?barDgbRP$6x3vmj(j{5n47${?kJmBvnLmmjl-i-bzZ|gq3v>yS zE+DZ9&eNB(ep9Eaw?#Kdt9-A`s3LEyLgX4IoU);@?h0D7LF3IhxH(1Y@sQK6L>aJG zD+OJ^`zJ@@X&^!4!Nx5ZF$=AwJ@kcNq5=LagBRT%Hia=MCYp4H-8V{}}77eu7LpLR^&zIfmUrwa4~hD~?)M z*7MbsJb$5>&()O8#@RIAbi8l5b_6nUKamh9eARRx(6l(l3O`T!F(--6D@wKjsEZWc8w$861~^PAAt^RC%n_Kjp5> zjpjBIC+}Q(P`dG_ebSwc0z3!FwL-TVP9Mc_zjRljApVL=UZ<-H(Fx(Yi4NidW~a+s z@iM|aUxAGE5IKo4Do51CvHVu#BXSv0AhYsy_BgQwQ?7gmSkOR1-vfr_NUufTA{j&W zFtOaZaC>OoKzWA@*C8I2IXzELwD-n^P}EIjxWMIz`7))%`4jCRvn%Gsinq zWqis@OCy_nJwF`wn9sW%;OO;~S6Y$Zs%EQWF||OIH}?Pp*t&q)wXt;xLCD7lIty1G zY7BBr$HWe)#Y}M#_jBL5#+DpG$8|a0Vvfp69NGSrRos7TMGciy(IUxtg^8GUe6udL zy|5Q(mN+&yUub$4_AkxCz|Z-iqC7#6%67cvomjA;=&<+HgEsaarvQXTxf#H>Dt+&O zWtn9y)u^s>VZk3eLXNryv6wp+5I`=r6+i}B1myEoEP*p zW#$N?ejNULo{jT15vdW0kkd!;uBmFmvgPLX-mFmP$S<^E;jGSh0k9@*$?r_^1^GGT zzDQ|qycCX|;yz{q<9lqNnhM&Q;pCky2^hd%qRb_NYSZzyEB#<_^`q!L(D?d|dJ+oJ zHlNKG=JirY$b`(X531kC{4{*8!dE^`UN(V{^t(uNbFJc|aO!(&S&RkJp}~E<&-YHR zC=L*C%z_w)vDtC@C~F@=_uvSTWA@z#=4OwgijlyDFq)G-io=x&Aw=f}Yk#%GHz2x* zk7Rj0{;0ElF=6h!0AvRRG+o0~TYk1^Lni~9B4Tb#pEA!0;ACy8khm41&y&)(Zj5K# zDTY+ezuaIIgJVb1kO{D`4g4RC*fMN-)BPoR`@$BTy)9q`4@KFPLJpf+4h^T~;9ip& z0&RzWnFSY26mig1b!tWMbP8zWiea*KjPb0sg4JZMmUDCkblsTQB7Za*%xt?r1ku^} zQ)`Q0gvO7U>izA{3q@ktAie9Po_F-G)w*}gN?5A21$wYee{jA>8t#D+PA_yAs_F4| zqC7$h{v|(Sdr?N$kBCjXMp9|@ar%JXGMst{6x zUWH(CjO*tgPV(q7d!8MM<-9*%=^oF<}vc=_s1+^N^<9GG6AoI%-}ddG&2h8TI{e8*ul`HHa+Bqq8W9 zNO{E{>{x8f8msULFt%=sdQ;9Q{Cb_qreSX#G)n9Ao$atf z75*weO}ze2$JLIOm&VFFT^1{Ti<~jOK^WWiQbrFgnX_w| zIQ)fZADAAZl)Ly|dn0;o(i%u^bFHI0K)D;V@?V|N+FK?TdfWXvYP&xxMxLyuaPVB& z;IsZ}lgkf_xK-7dE~nlfT$bEkQg4FBrL`UQX60}>nb2uY)o!crxz>WvbcoymrqAD~ zErSvXsWx*|(z2x?6*{L0mASi7*KRpFC_>&T`PYgv-pp^VoFqtTD*2qcgGEzQo^KsJ zp5knpw6$#K^W20D@;B#D8Ns4O`q-P{H*9<(Mz|&*je>=Gup&=|0GPTx>Z<4}QBXLLB85@ByJzhn)H6!#B)C2WJ`%NVulc&wJ1g#~`t%YxmNH=p z)w6QR)`_nYRVVUFxSQK|qs-1k`b4)o0lPc2cdpbX{W5oy8_#2-NAr(M#m`QfDC)K^ zRc&ezlVwPd+BA#+x>g=c;asRHczS~)sf&q;t;m9a@{;VW4|GqZrM2ZBIoNm|_Pl8r zjfR1>aLbwWknnZA_oLbBG&XSQKU%<^qO;kjb&An90sx!O4D#F%Or=$V7_a-fB16Q$u&lw4`@jFG=Gh9KeS(JEB2UhwsAm1nJN3$c&e$ zQ}*)(oEDeOFJh%00t~ILeZENEzsoeq4iH89pbi9%)~D3DhKx|_we?UkEKU@U25tDc zDiMXbsj%HtYzNGxEaeT8O`#;xN^IRaTyIghmfK z8)F#)z!+V{0kXsRe;KWaVAG0r=9oB>R|?{}i{NKZ%DdvKupgJNRImlH3NIb5G^)** zp#UrefgS7nwTr={xt^b{WQLl|y(EthBTWvPPaJ=w%Qbzd zxUL0dLxX1?BXFeuAi_JWk4i8!!~@y^_4jL+XR_Bkem8?kp3&#cd!T

&f)#WWX; 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 literal 0 HcmV?d00001