Skip to content

Commit 751738d

Browse files
committed
- Made Parser use C-files instead of C++, which leads to fewer hacks
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@12958 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 43d8b93 commit 751738d

File tree

5 files changed

+21
-40
lines changed

5 files changed

+21
-40
lines changed

Parser/Makefile.common

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ install: libantlr3.a libomparse.a
1313

1414
libantlr3.a: antlr-3.2/runtime/C/src/* antlr-3.2/runtime/C/include/*
1515
# build the library
16-
$(REAL_CC) ${CFLAGS} ${CPPFLAGS} -c antlr-3.2/runtime/C/src/*.c -Iantlr-3.2/runtime/C/include -Iantlr-3.2/runtime/C
16+
$(CC) ${CFLAGS} ${CPPFLAGS} -c antlr-3.2/runtime/C/src/*.c -Iantlr-3.2/runtime/C/include -Iantlr-3.2/runtime/C
1717
rm -f $@
1818
ar -ru libantlr3.a antlr3*.o
1919
ranlib libantlr3.a

Parser/Makefile.in

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
REAL_CC=@CC@
2-
CC=@CXX@
1+
CC=@CC@
32
CXX=@CXX@
43
CFLAGS=@CFLAGS@
54
CPPFLAGS=@CPPFLAGS@ -I$(COMPILERHOME) $(RMLINC) -I. -Iantlr-3.2/runtime/C -Iantlr-3.2/runtime/C/include $(BUILDINC)

Parser/Modelica.g

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ goto rule ## func ## Ex; }}
9595
#endif
9696
#define token_to_scon(tok) mk_scon((char*)tok->getText(tok)->chars)
9797
#define NYI(void) fprintf(stderr, "NYI \%s \%s:\%d\n", __FUNCTION__, __FILE__, __LINE__); exit(1);
98-
#define INFO(start) Absyn__INFO(ModelicaParser_filename_RML, mk_bcon(isReadOnly), mk_icon(start->line), mk_icon(start->line == 1 ? start->charPosition+2 : start->charPosition+1), mk_icon(LT(1)->line), mk_icon(LT(1)->charPosition+1), Absyn__TIMESTAMP(mk_rcon(0),mk_rcon(0)))
98+
#define PARSER_INFO(start) (void*)Absyn__INFO(ModelicaParser_filename_RML, mk_bcon(isReadOnly), mk_icon(start->line), mk_icon(start->line == 1 ? start->charPosition+2 : start->charPosition+1), mk_icon(LT(1)->line), mk_icon(LT(1)->charPosition+1), Absyn__TIMESTAMP(mk_rcon(0),mk_rcon(0)))
9999
typedef struct fileinfo_struct {
100100
int line1;
101101
int line2;
@@ -149,7 +149,7 @@ class_definition_list returns [void* ast] :
149149
class_definition [int final] returns [void* ast] :
150150
((e=ENCAPSULATED)? (p=PARTIAL)? ct=class_type cs=class_specifier)
151151
{
152-
$ast = Absyn__CLASS($cs.name, mk_bcon(p), mk_bcon(final), mk_bcon(e), ct, $cs.ast, INFO($start));
152+
$ast = Absyn__CLASS($cs.name, mk_bcon(p), mk_bcon(final), mk_bcon(e), ct, $cs.ast, PARSER_INFO($start));
153153
}
154154
;
155155

@@ -364,8 +364,8 @@ element returns [void* ast]
364364
void *redecl;
365365
}
366366
:
367-
ic=import_clause { $ast = Absyn__ELEMENT(RML_FALSE,mk_none(),Absyn__NOT_5fINNER_5fOUTER, ic, INFO($start), mk_none());}
368-
| ec=extends_clause { $ast = Absyn__ELEMENT(RML_FALSE,mk_none(),Absyn__NOT_5fINNER_5fOUTER, ec, INFO($start),mk_none());}
367+
ic=import_clause { $ast = Absyn__ELEMENT(RML_FALSE,mk_none(),Absyn__NOT_5fINNER_5fOUTER, ic, PARSER_INFO($start), mk_none());}
368+
| ec=extends_clause { $ast = Absyn__ELEMENT(RML_FALSE,mk_none(),Absyn__NOT_5fINNER_5fOUTER, ec, PARSER_INFO($start),mk_none());}
369369
| du=defineunit_clause { $ast = du;}
370370
| (r=REDECLARE)? (f=FINAL)? (i=INNER)? (o=T_OUTER)? { final = mk_bcon(f); innerouter = make_inner_outer(i,o); }
371371
( ( cdef=class_definition[f != NULL] | cc=component_clause )
@@ -374,19 +374,19 @@ element returns [void* ast]
374374
$ast = Absyn__ELEMENT(final, r != NULL ? mk_some(make_redeclare_keywords(false,r != NULL)) : mk_none(),
375375
innerouter,
376376
Absyn__CLASSDEF(RML_FALSE, cdef.ast),
377-
INFO($start), mk_none());
377+
PARSER_INFO($start), mk_none());
378378
else
379379
$ast = Absyn__ELEMENT(final, r != NULL ? mk_some(make_redeclare_keywords(false,r != NULL)) : mk_none(), innerouter,
380-
cc, INFO($start), mk_none());
380+
cc, PARSER_INFO($start), mk_none());
381381
}
382382
| (REPLACEABLE ( cdef=class_definition[f != NULL] | cc=component_clause ) constr=constraining_clause_comment? )
383383
{
384384
if (cc)
385385
$ast = Absyn__ELEMENT(final, mk_some(make_redeclare_keywords(true,r != NULL)), innerouter,
386-
cc, INFO($start), mk_some_or_none(constr));
386+
cc, PARSER_INFO($start), mk_some_or_none(constr));
387387
else
388388
$ast = Absyn__ELEMENT(final, mk_some(make_redeclare_keywords(true,r != NULL)), innerouter,
389-
Absyn__CLASSDEF(RML_TRUE, cdef.ast), INFO($start), mk_some_or_none(constr));
389+
Absyn__CLASSDEF(RML_TRUE, cdef.ast), PARSER_INFO($start), mk_some_or_none(constr));
390390
}
391391
)
392392
| conn=CONNECT
@@ -398,7 +398,7 @@ element returns [void* ast]
398398
import_clause returns [void* ast] :
399399
im=IMPORT (imp=explicit_import_name | imp=implicit_import_name) cmt=comment
400400
{
401-
ast = Absyn__IMPORT(imp, mk_some_or_none(cmt), INFO($im));
401+
ast = Absyn__IMPORT(imp, mk_some_or_none(cmt), PARSER_INFO($im));
402402
}
403403
;
404404
defineunit_clause returns [void* ast] :
@@ -543,7 +543,7 @@ modification returns [void* ast] :
543543
| eq=ASSIGN e=expression
544544
)
545545
{
546-
ast = Absyn__CLASSMOD(or_nil(cm), e ? Absyn__EQMOD(e,INFO($eq)) : Absyn__NOMOD);
546+
ast = Absyn__CLASSMOD(or_nil(cm), e ? Absyn__EQMOD(e,PARSER_INFO($eq)) : Absyn__NOMOD);
547547
}
548548
;
549549

@@ -574,7 +574,7 @@ element_modification_or_replaceable returns [void* ast] @init {
574574
element_modification [void *each, void *final] returns [void* ast] @init {
575575
$ast = NULL;
576576
} :
577-
cr=component_reference ( mod=modification )? cmt=string_comment { $ast = Absyn__MODIFICATION(final, each, cr.ast, mk_some_or_none(mod), mk_some_or_none(cmt), INFO($start)); }
577+
cr=component_reference ( mod=modification )? cmt=string_comment { $ast = Absyn__MODIFICATION(final, each, cr.ast, mk_some_or_none(mod), mk_some_or_none(cmt), PARSER_INFO($start)); }
578578
;
579579

580580
element_redeclaration returns [void* ast] @init {
@@ -587,7 +587,7 @@ element_redeclaration returns [void* ast] @init {
587587
if ($er.ast) {
588588
$ast = $er.ast;
589589
} else {
590-
$ast = Absyn__REDECLARATION(mk_bcon(f), make_redeclare_keywords(false,true), e ? Absyn__EACH : Absyn__NON_5fEACH, $cc.ast ? $cc.ast : Absyn__CLASSDEF(RML_FALSE,$cdef.ast), mk_none(), INFO($start));
590+
$ast = Absyn__REDECLARATION(mk_bcon(f), make_redeclare_keywords(false,true), e ? Absyn__EACH : Absyn__NON_5fEACH, $cc.ast ? $cc.ast : Absyn__CLASSDEF(RML_FALSE,$cdef.ast), mk_none(), PARSER_INFO($start));
591591
}
592592
}
593593
;
@@ -599,7 +599,7 @@ element_replaceable [int each, int final, int redeclare] returns [void* ast] @in
599599
{
600600
$ast = Absyn__REDECLARATION(mk_bcon(final), make_redeclare_keywords(true,redeclare),
601601
each ? Absyn__EACH : Absyn__NON_5fEACH, e_spec ? e_spec : Absyn__CLASSDEF(RML_TRUE, $cd.ast),
602-
mk_some_or_none($constr.ast), INFO($start));
602+
mk_some_or_none($constr.ast), PARSER_INFO($start));
603603
}
604604
;
605605

@@ -673,7 +673,7 @@ equation returns [void* ast] :
673673
}
674674
)
675675
cmt=comment
676-
{$ast = Absyn__EQUATIONITEM(e, mk_some_or_none(cmt), INFO($start));}
676+
{$ast = Absyn__EQUATIONITEM(e, mk_some_or_none(cmt), PARSER_INFO($start));}
677677
;
678678

679679
constraint returns [void* ast] :
@@ -712,7 +712,7 @@ algorithm returns [void* ast] :
712712
}
713713
)
714714
cmt=comment
715-
{$ast = Absyn__ALGORITHMITEM(a, mk_some_or_none(cmt), INFO($start));}
715+
{$ast = Absyn__ALGORITHMITEM(a, mk_some_or_none(cmt), PARSER_INFO($start));}
716716
;
717717

718718
assign_clause_a returns [void* ast] @declarations {
@@ -1355,7 +1355,7 @@ top_algorithm returns [void* ast, int isExp] :
13551355
)
13561356
{
13571357
if (!e) {
1358-
$ast = Absyn__ALGORITHMITEM(a, mk_some_or_none(cmt), INFO($start));
1358+
$ast = Absyn__ALGORITHMITEM(a, mk_some_or_none(cmt), PARSER_INFO($start));
13591359
$isExp = 0;
13601360
} else {
13611361
$ast = e;
@@ -1433,7 +1433,7 @@ cases2 returns [void* ast] :
14331433
ModelicaParser_readonly, ModelicaParser_filename_C);
14341434
if ($th) $el = $th;
14351435
if (exp)
1436-
$ast = mk_cons(Absyn__ELSE(or_nil(es),or_nil(eqs),exp,INFO($el),mk_some_or_none(cmt),INFO($start)),mk_nil());
1436+
$ast = mk_cons(Absyn__ELSE(or_nil(es),or_nil(eqs),exp,PARSER_INFO($el),mk_some_or_none(cmt),PARSER_INFO($start)),mk_nil());
14371437
else
14381438
$ast = mk_nil();
14391439
}
@@ -1451,10 +1451,10 @@ onecase returns [void* ast] :
14511451
c_add_source_message(2, ErrorType_syntax, ErrorLevel_warning, "case local declarations are deprecated. Move all case- and else-declarations to the match local declarations.",
14521452
NULL, 0, $start->line, $start->charPosition+1, LT(1)->line, LT(1)->charPosition+1,
14531453
ModelicaParser_readonly, ModelicaParser_filename_C);
1454-
$ast = Absyn__CASE(pat.ast,mk_some_or_none(guard),pat.info,or_nil(es),or_nil(eqs),exp,INFO($th),mk_some_or_none(cmt),INFO($start));
1454+
$ast = Absyn__CASE(pat.ast,mk_some_or_none(guard),pat.info,or_nil(es),or_nil(eqs),exp,PARSER_INFO($th),mk_some_or_none(cmt),PARSER_INFO($start));
14551455
}
14561456
;
14571457
14581458
pattern returns [void* ast, void* info] :
1459-
e=expression {$ast = e; $info = INFO($start);}
1459+
e=expression {$ast = e; $info = PARSER_INFO($start);}
14601460
;

Parser/Parser_omc.cpp renamed to Parser/Parser_omc.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@
2828
*
2929
*/
3030

31-
extern "C" {
32-
3331
#include "meta_modelica.h"
3432
#include "rml_compatibility.h"
3533
#include "parse.c"
@@ -86,5 +84,3 @@ void* ParserExt_parsestringexp(const char* data, const char* filename, int accep
8684
MMC_THROW();
8785
}
8886
}
89-
90-
}

Parser/parse.c

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,7 @@
3434
#include <errno.h>
3535
#include <string.h>
3636

37-
#if !defined(_MSC_VER)
38-
#ifdef __cplusplus
39-
/* Make sure we don't use any C++ features anywhere */
40-
#define __cplusplusend
41-
#undef __cplusplus
42-
#endif
43-
44-
extern "C" {
45-
#else
4637
#define bool int
47-
#endif
4838

4939
#include <MetaModelica_Lexer.h>
5040
#include <Modelica_3_Lexer.h>
@@ -426,7 +416,3 @@ static void* parseFile(const char* fileName, int flags, const char *encoding, in
426416
}
427417
return parseStream(input, runningTestsuite);
428418
}
429-
430-
#ifdef __cplusplusend
431-
}
432-
#endif

0 commit comments

Comments
 (0)