Fehler im Parser behoben: castexpression und primitive Typen entfernt

This commit is contained in:
JanUlrich 2015-06-10 13:17:06 +02:00
parent 21cf019ac4
commit aa5bb3c073
2 changed files with 1241 additions and 1363 deletions

File diff suppressed because it is too large Load Diff

View File

@ -44,7 +44,7 @@ void initUsedIdsToCheck() {
} }
//PL 05-07-30 eingefuegt. ENDE //PL 05-07-30 eingefuegt. ENDE
//LUAR 07-05-29 Anfang für Wildcard Test //LUAR 07-05-29 Anfang f<EFBFBD>r Wildcard Test
public Menge<Pair> testPair = new Menge<Pair>(); public Menge<Pair> testPair = new Menge<Pair>();
//LUAR 07-05-29 Ende //LUAR 07-05-29 Ende
%} %}
@ -158,9 +158,11 @@ public Menge<Pair> testPair = new Menge<Pair>();
%type <UsedId> interfacetype %type <UsedId> interfacetype
%type <InterfaceList> interfaces %type <InterfaceList> interfaces
%type <InterfaceList> extendsinterfaces %type <InterfaceList> extendsinterfaces
/*
%type <BaseType> integraltype %type <BaseType> integraltype
%type <BaseType> numerictype %type <BaseType> numerictype
%type <BaseType> primitivetype %type <BaseType> primitivetype
*/
%type <RefType> referencetype %type <RefType> referencetype
%type <RefType> classtypelist %type <RefType> classtypelist
%type <Type> type %type <Type> type
@ -236,7 +238,7 @@ public Menge<Pair> testPair = new Menge<Pair>();
%type <Block> constructorbody %type <Block> constructorbody
%type <Statement> explicitconstructorinvocation %type <Statement> explicitconstructorinvocation
%type <Method> staticinitializer %type <Method> staticinitializer
%type <CastExpr> castexpression // %type <CastExpr> castexpression // auskommentiert von Andreas Stadelmeier
%type <ParaList> paralist %type <ParaList> paralist
%type <Menge> typelist parameter %type <Menge> typelist parameter
%type <WildcardType> wildcardparameter %type <WildcardType> wildcardparameter
@ -712,7 +714,7 @@ classorinterfacetype : name parameter
{ {
if ($2 != null) { if ($2 != null) {
//$1.set_ParaList($2.get_ParaList()); //$1.set_ParaList($2.get_ParaList());
$1.set_ParaList($2);//Änderung von Andreas Stadelmeier. Type statt GenericVarType $1.set_ParaList($2);//<EFBFBD>nderung von Andreas Stadelmeier. Type statt GenericVarType
/* otth: originale (also diese) Parameterliste retten */ /* otth: originale (also diese) Parameterliste retten */
//((UsedId)$1).vParaOrg = new Menge<Type>( $2.get_ParaList() ); //((UsedId)$1).vParaOrg = new Menge<Type>( $2.get_ParaList() );
} }
@ -743,7 +745,7 @@ typelist : type
} }
/* PL 05-07-28 erg<72>nzt, weil jeder classorinterfacetype auch parametrisiert sein kann */ /* PL 05-07-28 erg<72>nzt, weil jeder classorinterfacetype auch parametrisiert sein kann */
//TODO: Das hier ist möglicherweise falsch. Ein Typ hat keine parameterliste, nur eine Liste von RefTypes //TODO: Das hier ist m<EFBFBD>glicherweise falsch. Ein Typ hat keine parameterliste, nur eine Liste von RefTypes
parameter : { $$ = null; } parameter : { $$ = null; }
| '<' typelist '>' //'<'paralist'>'//typelist statt | '<' typelist '>' //'<'paralist'>'//typelist statt
{ {
@ -812,9 +814,9 @@ abstractmethoddeclaration : methodheader ';' ;
/* /*
added by Andreas Stadelmeier, a10023 added by Andreas Stadelmeier, a10023
Bei Lokalen Variablen ist eine initialisierung der Variablen während der Deklarisierung nicht erlaubt. Bei Lokalen Variablen ist eine initialisierung der Variablen w<EFBFBD>hrend der Deklarisierung nicht erlaubt.
Beispiel: var = 2; Beispiel: var = 2;
Bei einer lokalen Variable lässt sich hier nicht ermitteln ob die Variable deklariert werden soll oder bereits deklariert wurde und ihr nur ein Wert zugewiesen werden soll. Bei einer lokalen Variable l<EFBFBD>sst sich hier nicht ermitteln ob die Variable deklariert werden soll oder bereits deklariert wurde und ihr nur ein Wert zugewiesen werden soll.
Dieses Problem ist bei Feldern nicht der Fall. Dieses Problem ist bei Feldern nicht der Fall.
*/ */
fielddeclarator : fielddeclarator :
@ -860,7 +862,7 @@ fielddeclaration : type fielddeclarator ';'
$$=$1; $$=$1;
} }
| genericdeclarationlist type fielddeclarator ';' | genericdeclarationlist type fielddeclarator ';'
{//angefügt von Andreas Stadelmeier {//angef<EFBFBD>gt von Andreas Stadelmeier
$3.setType($2); $3.setType($2);
$3.setGenericParameter($1); $3.setGenericParameter($1);
$$=$3; $$=$3;
@ -1161,15 +1163,7 @@ methodheader :genericdeclarationlist type methoddeclarator
} }
type : primitivetype type : referencetype
{
$$=$1;
}
|primitivetype '[' ']'
{
$1.setArray(true);
}
|referencetype
{ {
$$=$1; $$=$1;
} }
@ -1177,6 +1171,17 @@ type : primitivetype
{ {
$1.setArray(true); $1.setArray(true);
} }
/* auskommentiert von Andreas Stadelmeier
|primitivetype
{
$$=$1;
}
|primitivetype '[' ']'
{
$1.setArray(true);
}
*/
variabledeclarators : variabledeclarator variabledeclarators : variabledeclarator
{ {
FieldDeclaration IVD = new FieldDeclaration($1.getOffset()); FieldDeclaration IVD = new FieldDeclaration($1.getOffset());
@ -1286,20 +1291,18 @@ methoddeclarator :IDENTIFIER '(' ')'
$$ = met_para; $$ = met_para;
} }
/* auskommentiert von Andreas Stadelmeier
primitivetype :BOOLEAN primitivetype :BOOLEAN
{ {
BooleanType BT = new BooleanType(null); BooleanType BT = new BooleanType(null);
/* #JB# 05.04.2005 */
/* ########################################################### */
//BT.setName($1.getLexem());
/* ########################################################### */
$$=BT; $$=BT;
} }
|numerictype |numerictype
{ {
$$=$1; $$=$1;
} }
*/
referencetype :classorinterfacetype referencetype :classorinterfacetype
{ {
@ -1357,7 +1360,7 @@ formalparameter : type variabledeclaratorid
{ {
FormalParameter FP = new FormalParameter($2); FormalParameter FP = new FormalParameter($2);
FP.setType($1); FP.setType($1);
//FP.set_DeclId($2); //auskommentiert von Andreas Stadelmeier. DeclId wird nun dem Konstruktor von FormalParameter übergeben. //FP.set_DeclId($2); //auskommentiert von Andreas Stadelmeier. DeclId wird nun dem Konstruktor von FormalParameter <EFBFBD>bergeben.
$$=FP; $$=FP;
} }
@ -1408,11 +1411,12 @@ argumentlist : expression
$1.expr.addElement($3); $1.expr.addElement($3);
$$=$1; $$=$1;
} }
/* auskommentiert von Andreas Stadelmeier
numerictype :integraltype numerictype :integraltype
{ {
$$=$1; $$=$1;
} }
*/
variabledeclaratorid : IDENTIFIER variabledeclaratorid : IDENTIFIER
{ {
@ -1469,24 +1473,18 @@ expression :assignmentexpression
$$=$1; $$=$1;
} }
/* auskommentiert von Andreas Stadelmeier
integraltype :INT integraltype :INT
{ {
IntegerType IT = new IntegerType(null); IntegerType IT = new IntegerType(null);
/* #JB# 05.04.2005 */
/* ########################################################### */
//IT.setName($1.getLexem());
/* ########################################################### */
$$=IT; $$=IT;
} }
| CHAR | CHAR
{ {
CharacterType CT = new CharacterType(null); CharacterType CT = new CharacterType(null);
/* #JB# 05.04.2005 */
/* ########################################################### */
//CT.setName($1.getLexem());
/* ########################################################### */
$$=CT; $$=CT;
} }
*/
localvariabledeclaration : type variabledeclarators localvariabledeclaration : type variabledeclarators
{ {
@ -1802,7 +1800,7 @@ conditionalorexpression : conditionalandexpression
$$=LogOr; $$=LogOr;
} }
// LambdaExpression eingefügt von Andreas Stadelmeier, a10023: // LambdaExpression eingef<EFBFBD>gt von Andreas Stadelmeier, a10023:
lambdaassignmentoperator : LAMBDAASSIGNMENT lambdaassignmentoperator : LAMBDAASSIGNMENT
{ {
@ -2176,7 +2174,9 @@ unaryexpressionnotplusminus : postfixexpression {$$=$1;}
NE.set_Expr($2); NE.set_Expr($2);
$$=NE; $$=NE;
} }
/* auskommentiert von Andreas Stadelmeier
| castexpression {$$=$1;} | castexpression {$$=$1;}
*/
exclusiveorexpression :andexpression {$$=$1;} exclusiveorexpression :andexpression {$$=$1;}
| exclusiveorexpression '^' andexpression //{ | exclusiveorexpression '^' andexpression //{
@ -2222,13 +2222,17 @@ literal : INTLITERAL {IntLiteral IL = new IntLiteral();
$$=NN; $$=NN;
} }
castexpression : '(' primitivetype ')' unaryexpression /* auskommentiert von Andreas Stadelmeier
//Anmerkung: Ursprünglich Stand hier: "castexpression : '(' primitivetype ')' unaryexpression"
//Dies ist allerdings falsch. Der jetzige Stand führt jedoch zu reduce-Konflikt mit Lambda Expression
castexpression : '(' type ')' unaryexpression
{ {
CastExpr CaEx=new CastExpr($4.getOffset(),$4.getVariableLength()); CastExpr CaEx=new CastExpr($4.getOffset(),$4.getVariableLength());
CaEx.set_Type($2); CaEx.set_Type($2);
CaEx.set_Expr($4); CaEx.set_Expr($4);
$$=CaEx; $$=CaEx;
} }
*/
//| '(' expression ')' unaryexpressionnotplusminus //| '(' expression ')' unaryexpressionnotplusminus
andexpression :equalityexpression andexpression :equalityexpression