Skip to content

Commit 28909bd

Browse files
committed
- More fixes to the ANTLR3 grammar (~165 working testcases)
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@5982 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 3e3bc2b commit 28909bd

File tree

2 files changed

+32
-27
lines changed

2 files changed

+32
-27
lines changed

Compiler/SCodeUtil.mo

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -986,25 +986,28 @@ algorithm
986986
Absyn.Info info;
987987
Option<Absyn.ConstrainClass> cc;
988988
Absyn.Path p;
989+
Option<String> expOpt;
990+
Option<Real> weightOpt;
991+
list<Absyn.NamedArg> args;
992+
String name;
989993

990994
case (Absyn.ELEMENT(constrainClass = (cc as SOME(Absyn.CONSTRAINCLASS(elementSpec = Absyn.EXTENDS(path=p)))), finalPrefix = f,innerOuter = io, redeclareKeywords = repl,specification = s,info = info),prot)
991995
equation
992996
es = translateElementspec(cc, f, io, repl, prot, s,SOME(info));
993997
then
994998
es;
995999

996-
case (Absyn.ELEMENT(constrainClass = cc,finalPrefix = f,innerOuter = io, redeclareKeywords = repl,specification = s,info = info),prot)
1000+
case (Absyn.ELEMENT(name = name, constrainClass = cc,finalPrefix = f,innerOuter = io, redeclareKeywords = repl,specification = s,info = info),prot)
9971001
equation
9981002
es = translateElementspec(cc, f, io, repl, prot, s,SOME(info));
9991003
then
10001004
es;
10011005

1002-
case(Absyn.DEFINEUNIT(name,args),prot) local Option<String> expOpt; Option<Real> weightOpt;
1003-
list<Absyn.NamedArg> args; String name;
1006+
case(Absyn.DEFINEUNIT(name,args),prot)
10041007
equation
10051008
expOpt = translateDefineunitParam(args,"exp");
10061009
weightOpt = translateDefineunitParam2(args,"weight");
1007-
then {SCode.DEFINEUNIT(name,expOpt,weightOpt)};
1010+
then {SCode.DEFINEUNIT(name,expOpt,weightOpt)};
10081011
end matchcontinue;
10091012
end translateElement;
10101013

Parser/Modelica.g

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ OPERATOR;
230230
#define metamodelica_enabled(void) 0
231231
#define code_expressions_enabled(void) 0
232232
#define NYI(void) 0
233-
#define INFO(start,stop) Absyn__INFO(ModelicaParser_filename, isReadOnly, mk_icon(start->line), mk_icon(start->charPosition), mk_icon(stop->line), mk_icon(stop->charPosition), Absyn__TIMESTAMP(mk_rcon(0),mk_rcon(0)))
233+
#define INFO(start) Absyn__INFO(ModelicaParser_filename, isReadOnly, mk_icon(start->line), mk_icon(start->charPosition), mk_icon(start->line), mk_icon(start->charPosition), Absyn__TIMESTAMP(mk_rcon(0),mk_rcon(0)))
234234
typedef unsigned char bool;
235235
extern void *ModelicaParser_filename;
236236
}
@@ -362,7 +362,7 @@ class_definition_list returns [void* ast] :
362362
class_definition [bool final] returns [void* ast] :
363363
((e=ENCAPSULATED)? (p=PARTIAL)? ct=class_type cs=class_specifier)
364364
{
365-
$ast = Absyn__CLASS($cs.name, mk_bcon(p), mk_bcon(final), mk_bcon(e), ct, $cs.ast, INFO($start,$stop));
365+
$ast = Absyn__CLASS($cs.name, mk_bcon(p), mk_bcon(final), mk_bcon(e), ct, $cs.ast, INFO($start));
366366
}
367367
;
368368

@@ -515,30 +515,29 @@ element returns [void* ast] @declarations {
515515
void *final;
516516
void *innerouter;
517517
} :
518-
ic=import_clause { $ast = Absyn__ELEMENT(RML_FALSE,mk_none(),Absyn__UNSPECIFIED,mk_scon("import"), ic, INFO($start,$stop), mk_none());}
519-
| ec=extends_clause { $ast = Absyn__ELEMENT(RML_FALSE,mk_none(),Absyn__UNSPECIFIED,mk_scon("extends"), ec, INFO($start,$stop),mk_none());}
518+
ic=import_clause { $ast = Absyn__ELEMENT(RML_FALSE,mk_none(),Absyn__UNSPECIFIED,mk_scon("import"), ic, INFO($start), mk_none());}
519+
| ec=extends_clause { $ast = Absyn__ELEMENT(RML_FALSE,mk_none(),Absyn__UNSPECIFIED,mk_scon("extends"), ec, INFO($start),mk_none());}
520520
| du=defineunit_clause { $ast = du;}
521521
| (r=REDECLARE)? (f=FINAL)? (i=INNER)? (o=T_OUTER)? { final = mk_bcon(f); innerouter = make_inner_outer(i,o); }
522-
( ( cdef=class_definition[f != NULL]
522+
( ( cdef=class_definition[f != NULL] | cc=component_clause )
523523
{
524-
$ast = Absyn__ELEMENT(final, mk_some_or_none(make_redeclare_keywords(false,r)),
525-
innerouter, mk_scon("??"),
526-
Absyn__CLASSDEF(RML_FALSE, cdef.ast),
527-
INFO($start,$stop), mk_none());
528-
}
529-
| cc=component_clause)
530-
{
531-
$ast = Absyn__ELEMENT(final, mk_some_or_none(make_redeclare_keywords(false,r)), innerouter,
532-
mk_scon("component"), cc, INFO($start, $stop), mk_none());
524+
if (!cc)
525+
$ast = Absyn__ELEMENT(final, mk_some_or_none(make_redeclare_keywords(false,r)),
526+
innerouter, mk_scon("??"),
527+
Absyn__CLASSDEF(RML_FALSE, cdef.ast),
528+
INFO($start), mk_none());
529+
else
530+
$ast = Absyn__ELEMENT(final, mk_some_or_none(make_redeclare_keywords(false,r)), innerouter,
531+
mk_scon("component"), cc, INFO($start), mk_none());
533532
}
534533
| (REPLACEABLE ( cdef=class_definition[f != NULL] | cc=component_clause ) constr=constraining_clause_comment? )
535534
{
536535
if (cc)
537536
$ast = Absyn__ELEMENT(final, mk_some_or_none(make_redeclare_keywords(true,r)), innerouter,
538-
mk_scon("replaceable component"), cc, INFO($start, $stop), mk_some_or_none(constr));
537+
mk_scon("replaceable component"), cc, INFO($start), mk_some_or_none(constr));
539538
else
540539
$ast = Absyn__ELEMENT(final, mk_some_or_none(make_redeclare_keywords(true,r)), innerouter,
541-
mk_scon("??"), Absyn__CLASSDEF(RML_TRUE, cdef.ast), INFO($start, $stop), mk_some_or_none(constr));
540+
mk_scon("replaceable ??"), Absyn__CLASSDEF(RML_TRUE, cdef.ast), INFO($start), mk_some_or_none(constr));
542541
}
543542
)
544543
;
@@ -578,7 +577,7 @@ extends_clause returns [void* ast] :
578577
;
579578

580579
constraining_clause_comment returns [void* ast] :
581-
constr=constraining_clause cmt=comment {ast = Absyn__CONSTRAINCLASS(constr, mk_some_or_none(cmt));}
580+
constr=constraining_clause cmt=comment {$ast = Absyn__CONSTRAINCLASS(constr, mk_some_or_none(cmt));}
582581
;
583582

584583
constraining_clause returns [void* ast] :
@@ -608,8 +607,11 @@ component_clause returns [void* ast] @declarations {
608607
ar_option = p->data[2]; // get the array option
609608
p->data[2] = mk_none(); // replace the array with nothing
610609
}
611-
if (!arr)
612-
{
610+
else
611+
{
612+
fprintf(stderr, "component_clause error\n");
613+
}
614+
613615
// no arr was set, inspect ar_option and fix it
614616
struct rml_struct *p = (struct rml_struct*)RML_UNTAGPTR(ar_option);
615617
if (RML_GETHDR(ar_option) == RML_STRUCTHDR(0,0)) // is NONE
@@ -620,7 +622,7 @@ component_clause returns [void* ast] @declarations {
620622
{
621623
arr = p->data[0];
622624
}
623-
}
625+
624626
ast = Absyn__COMPONENTS(Absyn__ATTR(tp.flow, tp.stream, tp.variability, tp.direction, arr), path, clst);
625627
}
626628
;
@@ -719,7 +721,7 @@ element_replaceable [bool each, bool final, bool redeclare] returns [void* ast]
719721
{
720722
ast = Absyn__REDECLARATION(mk_bcon(final), make_redeclare_keywords(true,redeclare),
721723
each ? Absyn__EACH : Absyn__NON_5fEACH, cd.ast ? Absyn__CLASSDEF(RML_TRUE, cd.ast) : e_spec,
722-
mk_some_or_none(constr));
724+
mk_some_or_none($constr.ast));
723725
}
724726
;
725727

@@ -779,7 +781,7 @@ equation returns [void* ast] :
779781
}
780782
)
781783
cmt=comment
782-
{$ast = Absyn__EQUATIONITEM(e, mk_some_or_none(cmt), INFO($start,$stop));}
784+
{$ast = Absyn__EQUATIONITEM(e, mk_some_or_none(cmt), INFO($start));}
783785
;
784786

785787
algorithm returns [void* ast] :
@@ -797,7 +799,7 @@ algorithm returns [void* ast] :
797799
}
798800
)
799801
cmt=comment
800-
{$ast = Absyn__ALGORITHMITEM(a, mk_some_or_none(cmt), INFO($start,$stop));}
802+
{$ast = Absyn__ALGORITHMITEM(a, mk_some_or_none(cmt), INFO($start));}
801803
;
802804

803805
assign_clause_a returns [void* ast] :

0 commit comments

Comments
 (0)