Add ParameterList
This commit is contained in:
@@ -8,9 +8,10 @@
|
||||
#include "Token.h"
|
||||
|
||||
#include "AST/ASTElement.h"
|
||||
#include "AST/ParameterList.h"
|
||||
#include "AST/Statement.h"
|
||||
#include "AST/VariableDefinition.h"
|
||||
#include "AST/Type.h"
|
||||
#include "AST/VariableDefinition.h"
|
||||
|
||||
}
|
||||
|
||||
@@ -37,14 +38,14 @@
|
||||
|
||||
%type program {int}
|
||||
program ::= fundefs(F). { std::cout << F << std::endl; }
|
||||
program ::= expr(E). { std::cout << E << std::endl; }
|
||||
//program ::= expr(E). { std::cout << E << std::endl; }
|
||||
|
||||
%type fundefs {int}
|
||||
fundefs(A) ::= . { A = 0; }
|
||||
fundefs(A) ::= fundefs fundef(B). { A = A + B; }
|
||||
|
||||
%type fundef {int}
|
||||
fundef(A) ::= type(T) T_IDENTIFIER(ID) params(P) T_BEGIN statements(S) T_END. { A = 1 + 1 + P + S; /* T ID */ }
|
||||
fundef(A) ::= type(T) T_IDENTIFIER(ID) T_LPAREN params(P) T_RPAREN T_BEGIN statements(S) T_END. { A = 1 + 1 + 1 + S; /* T P ID */ }
|
||||
|
||||
%type type {Type*}
|
||||
type(A) ::= T_BOOL. { A = new Type("bool"); }
|
||||
@@ -52,10 +53,10 @@ type(A) ::= T_INT. { A = new Type("int"); }
|
||||
type(A) ::= T_STRING. { A = new Type("string"); }
|
||||
type(A) ::= T_VOID. { A = new Type("void"); }
|
||||
|
||||
%type params {int}
|
||||
params(A) ::= . { A = 0; }
|
||||
params(A) ::= type(T) T_IDENTIFIER(ID). { A = 1 + 1; /* T ID */ }
|
||||
params(A) ::= params(B) T_COMMA type(T) T_IDENTIFIER(ID). { A = B + 1 + 1; /* T ID */ }
|
||||
%type params {ParameterList*}
|
||||
params(A) ::= . { A = new ParameterList(); }
|
||||
params(A) ::= type(T) T_IDENTIFIER(ID). { A = new ParameterList(); A->addParameter(T, ID->getText()); }
|
||||
params(A) ::= params(B) T_COMMA type(T) T_IDENTIFIER(ID). { B->addParameter(T, ID->getText()); A = B; }
|
||||
|
||||
%type statement {int}
|
||||
statement(A) ::= T_IF T_LPAREN expr(E) T_RPAREN statement(S). { A = E + S; }
|
||||
|
||||
Reference in New Issue
Block a user