From 196281330abefc66aa4949d97f76f22cf4053f7e Mon Sep 17 00:00:00 2001
From: Zizhe Wang <zizhe.wang@tu-dresden.de>
Date: Fri, 28 Jun 2024 17:01:10 +0200
Subject: [PATCH] docs rearrange

---
 .../BouncingBall.mo                           |    0
 .../README.md                                 |    0
 .../Simulate_BouncingBall.py                  |    0
 src/{ => feature_model}/feature_model.py      |    0
 src/{ => feature_model}/modelica.g4           |    0
 src/feature_model/modelicaLexer.py            |  450 ++
 src/feature_model/modelicaListener.py         |  714 ++
 src/feature_model/modelicaParser.py           | 6334 +++++++++++++++++
 src/{ => feature_model}/parse_modelica.py     |    0
 9 files changed, 7498 insertions(+)
 rename src/{Example_BouncingBall => example_bouncing_ball}/BouncingBall.mo (100%)
 rename src/{Example_BouncingBall => example_bouncing_ball}/README.md (100%)
 rename src/{Example_BouncingBall => example_bouncing_ball}/Simulate_BouncingBall.py (100%)
 rename src/{ => feature_model}/feature_model.py (100%)
 rename src/{ => feature_model}/modelica.g4 (100%)
 create mode 100644 src/feature_model/modelicaLexer.py
 create mode 100644 src/feature_model/modelicaListener.py
 create mode 100644 src/feature_model/modelicaParser.py
 rename src/{ => feature_model}/parse_modelica.py (100%)

diff --git a/src/Example_BouncingBall/BouncingBall.mo b/src/example_bouncing_ball/BouncingBall.mo
similarity index 100%
rename from src/Example_BouncingBall/BouncingBall.mo
rename to src/example_bouncing_ball/BouncingBall.mo
diff --git a/src/Example_BouncingBall/README.md b/src/example_bouncing_ball/README.md
similarity index 100%
rename from src/Example_BouncingBall/README.md
rename to src/example_bouncing_ball/README.md
diff --git a/src/Example_BouncingBall/Simulate_BouncingBall.py b/src/example_bouncing_ball/Simulate_BouncingBall.py
similarity index 100%
rename from src/Example_BouncingBall/Simulate_BouncingBall.py
rename to src/example_bouncing_ball/Simulate_BouncingBall.py
diff --git a/src/feature_model.py b/src/feature_model/feature_model.py
similarity index 100%
rename from src/feature_model.py
rename to src/feature_model/feature_model.py
diff --git a/src/modelica.g4 b/src/feature_model/modelica.g4
similarity index 100%
rename from src/modelica.g4
rename to src/feature_model/modelica.g4
diff --git a/src/feature_model/modelicaLexer.py b/src/feature_model/modelicaLexer.py
new file mode 100644
index 0000000..bd4ab23
--- /dev/null
+++ b/src/feature_model/modelicaLexer.py
@@ -0,0 +1,450 @@
+# Generated from modelica.g4 by ANTLR 4.13.1
+from antlr4 import *
+from io import StringIO
+import sys
+if sys.version_info[1] > 5:
+    from typing import TextIO
+else:
+    from typing.io import TextIO
+
+
+def serializedATN():
+    return [
+        4,0,94,797,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,
+        2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,
+        13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,
+        19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,
+        26,7,26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,
+        32,2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,
+        39,7,39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,
+        45,2,46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51,2,
+        52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,
+        58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,2,
+        65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71,7,
+        71,2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,2,
+        78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84,7,
+        84,2,85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2,
+        91,7,91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97,7,
+        97,2,98,7,98,2,99,7,99,2,100,7,100,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
+        1,1,1,1,2,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,
+        3,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,
+        5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,
+        7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9,1,10,1,
+        10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1,
+        11,1,11,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,13,1,
+        13,1,13,1,13,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,15,1,
+        15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,
+        16,1,16,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,
+        18,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,
+        20,1,20,1,21,1,21,1,22,1,22,1,23,1,23,1,24,1,24,1,24,1,24,1,25,1,
+        25,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,
+        27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,
+        28,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,
+        30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,
+        32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,
+        33,1,33,1,33,1,34,1,34,1,34,1,35,1,35,1,35,1,36,1,36,1,37,1,37,1,
+        37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,38,1,
+        38,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,40,1,40,1,
+        40,1,40,1,40,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,41,1,
+        41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,
+        43,1,43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,
+        45,1,45,1,45,1,46,1,46,1,46,1,47,1,47,1,47,1,47,1,47,1,48,1,48,1,
+        48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,
+        49,1,49,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,51,1,
+        51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,53,1,
+        53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,
+        55,1,55,1,55,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57,1,58,1,
+        58,1,58,1,59,1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,
+        61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,
+        62,1,62,1,62,1,62,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,65,1,65,1,
+        65,1,65,1,66,1,66,1,67,1,67,1,67,1,68,1,68,1,69,1,69,1,69,1,70,1,
+        70,1,70,1,71,1,71,1,71,1,72,1,72,1,73,1,73,1,74,1,74,1,74,1,75,1,
+        75,1,75,1,76,1,76,1,77,1,77,1,78,1,78,1,78,1,79,1,79,1,80,1,80,1,
+        80,1,81,1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,83,1,
+        83,1,84,1,84,1,85,1,85,1,86,1,86,1,87,1,87,1,87,1,87,1,87,1,87,1,
+        87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,5,88,699,8,88,10,88,12,88,
+        702,9,88,1,88,3,88,705,8,88,1,89,1,89,1,89,3,89,710,8,89,1,89,1,
+        89,5,89,714,8,89,10,89,12,89,717,9,89,1,89,1,89,1,90,1,90,1,91,1,
+        91,1,92,1,92,1,92,5,92,728,8,92,10,92,12,92,731,9,92,1,92,1,92,1,
+        93,1,93,1,93,3,93,738,8,93,1,94,1,94,1,94,1,95,1,95,1,96,1,96,5,
+        96,747,8,96,10,96,12,96,750,9,96,1,97,1,97,1,97,3,97,755,8,97,3,
+        97,757,8,97,1,97,1,97,3,97,761,8,97,1,97,3,97,764,8,97,1,98,4,98,
+        767,8,98,11,98,12,98,768,1,98,1,98,1,99,1,99,1,99,1,99,5,99,777,
+        8,99,10,99,12,99,780,9,99,1,99,1,99,1,99,1,99,1,99,1,100,1,100,1,
+        100,1,100,5,100,791,8,100,10,100,12,100,794,9,100,1,100,1,100,1,
+        778,0,101,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,
+        12,25,13,27,14,29,15,31,16,33,17,35,18,37,19,39,20,41,21,43,22,45,
+        23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61,31,63,32,65,33,67,
+        34,69,35,71,36,73,37,75,38,77,39,79,40,81,41,83,42,85,43,87,44,89,
+        45,91,46,93,47,95,48,97,49,99,50,101,51,103,52,105,53,107,54,109,
+        55,111,56,113,57,115,58,117,59,119,60,121,61,123,62,125,63,127,64,
+        129,65,131,66,133,67,135,68,137,69,139,70,141,71,143,72,145,73,147,
+        74,149,75,151,76,153,77,155,78,157,79,159,80,161,81,163,82,165,83,
+        167,84,169,85,171,86,173,87,175,88,177,89,179,0,181,0,183,0,185,
+        90,187,0,189,0,191,0,193,0,195,91,197,92,199,93,201,94,1,0,8,2,0,
+        34,34,92,92,3,0,65,90,95,95,97,122,7,0,33,33,35,38,40,47,58,64,91,
+        91,93,94,123,126,11,0,34,34,39,39,63,63,92,92,97,98,102,102,110,
+        110,114,114,116,116,118,118,8217,8217,2,0,69,69,101,101,2,0,43,43,
+        45,45,3,0,9,10,13,13,32,32,2,0,10,10,13,13,807,0,1,1,0,0,0,0,3,1,
+        0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,
+        0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,
+        0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,
+        0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,
+        0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,
+        0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,
+        0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,
+        0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,
+        0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,
+        0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,
+        0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,
+        113,1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,
+        0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0,0,0,0,129,1,0,0,0,0,131,
+        1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0,139,1,0,0,0,
+        0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,1,0,0,0,0,149,1,
+        0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157,1,0,0,0,0,
+        159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0,0,167,1,0,
+        0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1,0,0,0,0,177,
+        1,0,0,0,0,185,1,0,0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199,1,0,0,0,
+        0,201,1,0,0,0,1,203,1,0,0,0,3,210,1,0,0,0,5,212,1,0,0,0,7,218,1,
+        0,0,0,9,231,1,0,0,0,11,239,1,0,0,0,13,245,1,0,0,0,15,251,1,0,0,0,
+        17,260,1,0,0,0,19,267,1,0,0,0,21,273,1,0,0,0,23,284,1,0,0,0,25,294,
+        1,0,0,0,27,299,1,0,0,0,29,307,1,0,0,0,31,312,1,0,0,0,33,319,1,0,
+        0,0,35,328,1,0,0,0,37,332,1,0,0,0,39,340,1,0,0,0,41,342,1,0,0,0,
+        43,354,1,0,0,0,45,356,1,0,0,0,47,358,1,0,0,0,49,360,1,0,0,0,51,364,
+        1,0,0,0,53,366,1,0,0,0,55,373,1,0,0,0,57,383,1,0,0,0,59,392,1,0,
+        0,0,61,402,1,0,0,0,63,408,1,0,0,0,65,414,1,0,0,0,67,426,1,0,0,0,
+        69,433,1,0,0,0,71,436,1,0,0,0,73,439,1,0,0,0,75,441,1,0,0,0,77,455,
+        1,0,0,0,79,460,1,0,0,0,81,467,1,0,0,0,83,476,1,0,0,0,85,486,1,0,
+        0,0,87,495,1,0,0,0,89,501,1,0,0,0,91,508,1,0,0,0,93,511,1,0,0,0,
+        95,514,1,0,0,0,97,519,1,0,0,0,99,527,1,0,0,0,101,536,1,0,0,0,103,
+        546,1,0,0,0,105,552,1,0,0,0,107,559,1,0,0,0,109,564,1,0,0,0,111,
+        571,1,0,0,0,113,576,1,0,0,0,115,580,1,0,0,0,117,585,1,0,0,0,119,
+        588,1,0,0,0,121,594,1,0,0,0,123,599,1,0,0,0,125,608,1,0,0,0,127,
+        616,1,0,0,0,129,619,1,0,0,0,131,623,1,0,0,0,133,627,1,0,0,0,135,
+        629,1,0,0,0,137,632,1,0,0,0,139,634,1,0,0,0,141,637,1,0,0,0,143,
+        640,1,0,0,0,145,643,1,0,0,0,147,645,1,0,0,0,149,647,1,0,0,0,151,
+        650,1,0,0,0,153,653,1,0,0,0,155,655,1,0,0,0,157,657,1,0,0,0,159,
+        660,1,0,0,0,161,662,1,0,0,0,163,665,1,0,0,0,165,671,1,0,0,0,167,
+        676,1,0,0,0,169,678,1,0,0,0,171,680,1,0,0,0,173,682,1,0,0,0,175,
+        684,1,0,0,0,177,704,1,0,0,0,179,706,1,0,0,0,181,720,1,0,0,0,183,
+        722,1,0,0,0,185,724,1,0,0,0,187,737,1,0,0,0,189,739,1,0,0,0,191,
+        742,1,0,0,0,193,744,1,0,0,0,195,751,1,0,0,0,197,766,1,0,0,0,199,
+        772,1,0,0,0,201,786,1,0,0,0,203,204,5,119,0,0,204,205,5,105,0,0,
+        205,206,5,116,0,0,206,207,5,104,0,0,207,208,5,105,0,0,208,209,5,
+        110,0,0,209,2,1,0,0,0,210,211,5,59,0,0,211,4,1,0,0,0,212,213,5,102,
+        0,0,213,214,5,105,0,0,214,215,5,110,0,0,215,216,5,97,0,0,216,217,
+        5,108,0,0,217,6,1,0,0,0,218,219,5,101,0,0,219,220,5,110,0,0,220,
+        221,5,99,0,0,221,222,5,97,0,0,222,223,5,112,0,0,223,224,5,115,0,
+        0,224,225,5,117,0,0,225,226,5,108,0,0,226,227,5,97,0,0,227,228,5,
+        116,0,0,228,229,5,101,0,0,229,230,5,100,0,0,230,8,1,0,0,0,231,232,
+        5,112,0,0,232,233,5,97,0,0,233,234,5,114,0,0,234,235,5,116,0,0,235,
+        236,5,105,0,0,236,237,5,97,0,0,237,238,5,108,0,0,238,10,1,0,0,0,
+        239,240,5,99,0,0,240,241,5,108,0,0,241,242,5,97,0,0,242,243,5,115,
+        0,0,243,244,5,115,0,0,244,12,1,0,0,0,245,246,5,109,0,0,246,247,5,
+        111,0,0,247,248,5,100,0,0,248,249,5,101,0,0,249,250,5,108,0,0,250,
+        14,1,0,0,0,251,252,5,111,0,0,252,253,5,112,0,0,253,254,5,101,0,0,
+        254,255,5,114,0,0,255,256,5,97,0,0,256,257,5,116,0,0,257,258,5,111,
+        0,0,258,259,5,114,0,0,259,16,1,0,0,0,260,261,5,114,0,0,261,262,5,
+        101,0,0,262,263,5,99,0,0,263,264,5,111,0,0,264,265,5,114,0,0,265,
+        266,5,100,0,0,266,18,1,0,0,0,267,268,5,98,0,0,268,269,5,108,0,0,
+        269,270,5,111,0,0,270,271,5,99,0,0,271,272,5,107,0,0,272,20,1,0,
+        0,0,273,274,5,101,0,0,274,275,5,120,0,0,275,276,5,112,0,0,276,277,
+        5,97,0,0,277,278,5,110,0,0,278,279,5,100,0,0,279,280,5,97,0,0,280,
+        281,5,98,0,0,281,282,5,108,0,0,282,283,5,101,0,0,283,22,1,0,0,0,
+        284,285,5,99,0,0,285,286,5,111,0,0,286,287,5,110,0,0,287,288,5,110,
+        0,0,288,289,5,101,0,0,289,290,5,99,0,0,290,291,5,116,0,0,291,292,
+        5,111,0,0,292,293,5,114,0,0,293,24,1,0,0,0,294,295,5,116,0,0,295,
+        296,5,121,0,0,296,297,5,112,0,0,297,298,5,101,0,0,298,26,1,0,0,0,
+        299,300,5,112,0,0,300,301,5,97,0,0,301,302,5,99,0,0,302,303,5,107,
+        0,0,303,304,5,97,0,0,304,305,5,103,0,0,305,306,5,101,0,0,306,28,
+        1,0,0,0,307,308,5,112,0,0,308,309,5,117,0,0,309,310,5,114,0,0,310,
+        311,5,101,0,0,311,30,1,0,0,0,312,313,5,105,0,0,313,314,5,109,0,0,
+        314,315,5,112,0,0,315,316,5,117,0,0,316,317,5,114,0,0,317,318,5,
+        101,0,0,318,32,1,0,0,0,319,320,5,102,0,0,320,321,5,117,0,0,321,322,
+        5,110,0,0,322,323,5,99,0,0,323,324,5,116,0,0,324,325,5,105,0,0,325,
+        326,5,111,0,0,326,327,5,110,0,0,327,34,1,0,0,0,328,329,5,101,0,0,
+        329,330,5,110,0,0,330,331,5,100,0,0,331,36,1,0,0,0,332,333,5,101,
+        0,0,333,334,5,120,0,0,334,335,5,116,0,0,335,336,5,101,0,0,336,337,
+        5,110,0,0,337,338,5,100,0,0,338,339,5,115,0,0,339,38,1,0,0,0,340,
+        341,5,61,0,0,341,40,1,0,0,0,342,343,5,101,0,0,343,344,5,110,0,0,
+        344,345,5,117,0,0,345,346,5,109,0,0,346,347,5,101,0,0,347,348,5,
+        114,0,0,348,349,5,97,0,0,349,350,5,116,0,0,350,351,5,105,0,0,351,
+        352,5,111,0,0,352,353,5,110,0,0,353,42,1,0,0,0,354,355,5,40,0,0,
+        355,44,1,0,0,0,356,357,5,58,0,0,357,46,1,0,0,0,358,359,5,41,0,0,
+        359,48,1,0,0,0,360,361,5,100,0,0,361,362,5,101,0,0,362,363,5,114,
+        0,0,363,50,1,0,0,0,364,365,5,44,0,0,365,52,1,0,0,0,366,367,5,112,
+        0,0,367,368,5,117,0,0,368,369,5,98,0,0,369,370,5,108,0,0,370,371,
+        5,105,0,0,371,372,5,99,0,0,372,54,1,0,0,0,373,374,5,112,0,0,374,
+        375,5,114,0,0,375,376,5,111,0,0,376,377,5,116,0,0,377,378,5,101,
+        0,0,378,379,5,99,0,0,379,380,5,116,0,0,380,381,5,101,0,0,381,382,
+        5,100,0,0,382,56,1,0,0,0,383,384,5,101,0,0,384,385,5,120,0,0,385,
+        386,5,116,0,0,386,387,5,101,0,0,387,388,5,114,0,0,388,389,5,110,
+        0,0,389,390,5,97,0,0,390,391,5,108,0,0,391,58,1,0,0,0,392,393,5,
+        114,0,0,393,394,5,101,0,0,394,395,5,100,0,0,395,396,5,101,0,0,396,
+        397,5,99,0,0,397,398,5,108,0,0,398,399,5,97,0,0,399,400,5,114,0,
+        0,400,401,5,101,0,0,401,60,1,0,0,0,402,403,5,105,0,0,403,404,5,110,
+        0,0,404,405,5,110,0,0,405,406,5,101,0,0,406,407,5,114,0,0,407,62,
+        1,0,0,0,408,409,5,111,0,0,409,410,5,117,0,0,410,411,5,116,0,0,411,
+        412,5,101,0,0,412,413,5,114,0,0,413,64,1,0,0,0,414,415,5,114,0,0,
+        415,416,5,101,0,0,416,417,5,112,0,0,417,418,5,108,0,0,418,419,5,
+        97,0,0,419,420,5,99,0,0,420,421,5,101,0,0,421,422,5,97,0,0,422,423,
+        5,98,0,0,423,424,5,108,0,0,424,425,5,101,0,0,425,66,1,0,0,0,426,
+        427,5,105,0,0,427,428,5,109,0,0,428,429,5,112,0,0,429,430,5,111,
+        0,0,430,431,5,114,0,0,431,432,5,116,0,0,432,68,1,0,0,0,433,434,5,
+        46,0,0,434,435,5,42,0,0,435,70,1,0,0,0,436,437,5,46,0,0,437,438,
+        5,123,0,0,438,72,1,0,0,0,439,440,5,125,0,0,440,74,1,0,0,0,441,442,
+        5,99,0,0,442,443,5,111,0,0,443,444,5,110,0,0,444,445,5,115,0,0,445,
+        446,5,116,0,0,446,447,5,114,0,0,447,448,5,97,0,0,448,449,5,105,0,
+        0,449,450,5,110,0,0,450,451,5,101,0,0,451,452,5,100,0,0,452,453,
+        5,98,0,0,453,454,5,121,0,0,454,76,1,0,0,0,455,456,5,102,0,0,456,
+        457,5,108,0,0,457,458,5,111,0,0,458,459,5,119,0,0,459,78,1,0,0,0,
+        460,461,5,115,0,0,461,462,5,116,0,0,462,463,5,114,0,0,463,464,5,
+        101,0,0,464,465,5,97,0,0,465,466,5,109,0,0,466,80,1,0,0,0,467,468,
+        5,100,0,0,468,469,5,105,0,0,469,470,5,115,0,0,470,471,5,99,0,0,471,
+        472,5,114,0,0,472,473,5,101,0,0,473,474,5,116,0,0,474,475,5,101,
+        0,0,475,82,1,0,0,0,476,477,5,112,0,0,477,478,5,97,0,0,478,479,5,
+        114,0,0,479,480,5,97,0,0,480,481,5,109,0,0,481,482,5,101,0,0,482,
+        483,5,116,0,0,483,484,5,101,0,0,484,485,5,114,0,0,485,84,1,0,0,0,
+        486,487,5,99,0,0,487,488,5,111,0,0,488,489,5,110,0,0,489,490,5,115,
+        0,0,490,491,5,116,0,0,491,492,5,97,0,0,492,493,5,110,0,0,493,494,
+        5,116,0,0,494,86,1,0,0,0,495,496,5,105,0,0,496,497,5,110,0,0,497,
+        498,5,112,0,0,498,499,5,117,0,0,499,500,5,116,0,0,500,88,1,0,0,0,
+        501,502,5,111,0,0,502,503,5,117,0,0,503,504,5,116,0,0,504,505,5,
+        112,0,0,505,506,5,117,0,0,506,507,5,116,0,0,507,90,1,0,0,0,508,509,
+        5,105,0,0,509,510,5,102,0,0,510,92,1,0,0,0,511,512,5,58,0,0,512,
+        513,5,61,0,0,513,94,1,0,0,0,514,515,5,101,0,0,515,516,5,97,0,0,516,
+        517,5,99,0,0,517,518,5,104,0,0,518,96,1,0,0,0,519,520,5,105,0,0,
+        520,521,5,110,0,0,521,522,5,105,0,0,522,523,5,116,0,0,523,524,5,
+        105,0,0,524,525,5,97,0,0,525,526,5,108,0,0,526,98,1,0,0,0,527,528,
+        5,101,0,0,528,529,5,113,0,0,529,530,5,117,0,0,530,531,5,97,0,0,531,
+        532,5,116,0,0,532,533,5,105,0,0,533,534,5,111,0,0,534,535,5,110,
+        0,0,535,100,1,0,0,0,536,537,5,97,0,0,537,538,5,108,0,0,538,539,5,
+        103,0,0,539,540,5,111,0,0,540,541,5,114,0,0,541,542,5,105,0,0,542,
+        543,5,116,0,0,543,544,5,104,0,0,544,545,5,109,0,0,545,102,1,0,0,
+        0,546,547,5,98,0,0,547,548,5,114,0,0,548,549,5,101,0,0,549,550,5,
+        97,0,0,550,551,5,107,0,0,551,104,1,0,0,0,552,553,5,114,0,0,553,554,
+        5,101,0,0,554,555,5,116,0,0,555,556,5,117,0,0,556,557,5,114,0,0,
+        557,558,5,110,0,0,558,106,1,0,0,0,559,560,5,116,0,0,560,561,5,104,
+        0,0,561,562,5,101,0,0,562,563,5,110,0,0,563,108,1,0,0,0,564,565,
+        5,101,0,0,565,566,5,108,0,0,566,567,5,115,0,0,567,568,5,101,0,0,
+        568,569,5,105,0,0,569,570,5,102,0,0,570,110,1,0,0,0,571,572,5,101,
+        0,0,572,573,5,108,0,0,573,574,5,115,0,0,574,575,5,101,0,0,575,112,
+        1,0,0,0,576,577,5,102,0,0,577,578,5,111,0,0,578,579,5,114,0,0,579,
+        114,1,0,0,0,580,581,5,108,0,0,581,582,5,111,0,0,582,583,5,111,0,
+        0,583,584,5,112,0,0,584,116,1,0,0,0,585,586,5,105,0,0,586,587,5,
+        110,0,0,587,118,1,0,0,0,588,589,5,119,0,0,589,590,5,104,0,0,590,
+        591,5,105,0,0,591,592,5,108,0,0,592,593,5,101,0,0,593,120,1,0,0,
+        0,594,595,5,119,0,0,595,596,5,104,0,0,596,597,5,101,0,0,597,598,
+        5,110,0,0,598,122,1,0,0,0,599,600,5,101,0,0,600,601,5,108,0,0,601,
+        602,5,115,0,0,602,603,5,101,0,0,603,604,5,119,0,0,604,605,5,104,
+        0,0,605,606,5,101,0,0,606,607,5,110,0,0,607,124,1,0,0,0,608,609,
+        5,99,0,0,609,610,5,111,0,0,610,611,5,110,0,0,611,612,5,110,0,0,612,
+        613,5,101,0,0,613,614,5,99,0,0,614,615,5,116,0,0,615,126,1,0,0,0,
+        616,617,5,111,0,0,617,618,5,114,0,0,618,128,1,0,0,0,619,620,5,97,
+        0,0,620,621,5,110,0,0,621,622,5,100,0,0,622,130,1,0,0,0,623,624,
+        5,110,0,0,624,625,5,111,0,0,625,626,5,116,0,0,626,132,1,0,0,0,627,
+        628,5,60,0,0,628,134,1,0,0,0,629,630,5,60,0,0,630,631,5,61,0,0,631,
+        136,1,0,0,0,632,633,5,62,0,0,633,138,1,0,0,0,634,635,5,62,0,0,635,
+        636,5,61,0,0,636,140,1,0,0,0,637,638,5,61,0,0,638,639,5,61,0,0,639,
+        142,1,0,0,0,640,641,5,60,0,0,641,642,5,62,0,0,642,144,1,0,0,0,643,
+        644,5,43,0,0,644,146,1,0,0,0,645,646,5,45,0,0,646,148,1,0,0,0,647,
+        648,5,46,0,0,648,649,5,43,0,0,649,150,1,0,0,0,650,651,5,46,0,0,651,
+        652,5,45,0,0,652,152,1,0,0,0,653,654,5,42,0,0,654,154,1,0,0,0,655,
+        656,5,47,0,0,656,156,1,0,0,0,657,658,5,46,0,0,658,659,5,47,0,0,659,
+        158,1,0,0,0,660,661,5,94,0,0,661,160,1,0,0,0,662,663,5,46,0,0,663,
+        664,5,94,0,0,664,162,1,0,0,0,665,666,5,102,0,0,666,667,5,97,0,0,
+        667,668,5,108,0,0,668,669,5,115,0,0,669,670,5,101,0,0,670,164,1,
+        0,0,0,671,672,5,116,0,0,672,673,5,114,0,0,673,674,5,117,0,0,674,
+        675,5,101,0,0,675,166,1,0,0,0,676,677,5,91,0,0,677,168,1,0,0,0,678,
+        679,5,93,0,0,679,170,1,0,0,0,680,681,5,123,0,0,681,172,1,0,0,0,682,
+        683,5,46,0,0,683,174,1,0,0,0,684,685,5,97,0,0,685,686,5,110,0,0,
+        686,687,5,110,0,0,687,688,5,111,0,0,688,689,5,116,0,0,689,690,5,
+        97,0,0,690,691,5,116,0,0,691,692,5,105,0,0,692,693,5,111,0,0,693,
+        694,5,110,0,0,694,176,1,0,0,0,695,700,3,183,91,0,696,699,3,191,95,
+        0,697,699,3,183,91,0,698,696,1,0,0,0,698,697,1,0,0,0,699,702,1,0,
+        0,0,700,698,1,0,0,0,700,701,1,0,0,0,701,705,1,0,0,0,702,700,1,0,
+        0,0,703,705,3,179,89,0,704,695,1,0,0,0,704,703,1,0,0,0,705,178,1,
+        0,0,0,706,709,5,39,0,0,707,710,3,187,93,0,708,710,3,189,94,0,709,
+        707,1,0,0,0,709,708,1,0,0,0,710,715,1,0,0,0,711,714,3,187,93,0,712,
+        714,3,189,94,0,713,711,1,0,0,0,713,712,1,0,0,0,714,717,1,0,0,0,715,
+        713,1,0,0,0,715,716,1,0,0,0,716,718,1,0,0,0,717,715,1,0,0,0,718,
+        719,5,39,0,0,719,180,1,0,0,0,720,721,8,0,0,0,721,182,1,0,0,0,722,
+        723,7,1,0,0,723,184,1,0,0,0,724,729,5,34,0,0,725,728,3,181,90,0,
+        726,728,3,189,94,0,727,725,1,0,0,0,727,726,1,0,0,0,728,731,1,0,0,
+        0,729,727,1,0,0,0,729,730,1,0,0,0,730,732,1,0,0,0,731,729,1,0,0,
+        0,732,733,5,34,0,0,733,186,1,0,0,0,734,738,3,183,91,0,735,738,3,
+        191,95,0,736,738,7,2,0,0,737,734,1,0,0,0,737,735,1,0,0,0,737,736,
+        1,0,0,0,738,188,1,0,0,0,739,740,5,92,0,0,740,741,7,3,0,0,741,190,
+        1,0,0,0,742,743,2,48,57,0,743,192,1,0,0,0,744,748,3,191,95,0,745,
+        747,3,191,95,0,746,745,1,0,0,0,747,750,1,0,0,0,748,746,1,0,0,0,748,
+        749,1,0,0,0,749,194,1,0,0,0,750,748,1,0,0,0,751,756,3,193,96,0,752,
+        754,5,46,0,0,753,755,3,193,96,0,754,753,1,0,0,0,754,755,1,0,0,0,
+        755,757,1,0,0,0,756,752,1,0,0,0,756,757,1,0,0,0,757,763,1,0,0,0,
+        758,760,7,4,0,0,759,761,7,5,0,0,760,759,1,0,0,0,760,761,1,0,0,0,
+        761,762,1,0,0,0,762,764,3,193,96,0,763,758,1,0,0,0,763,764,1,0,0,
+        0,764,196,1,0,0,0,765,767,7,6,0,0,766,765,1,0,0,0,767,768,1,0,0,
+        0,768,766,1,0,0,0,768,769,1,0,0,0,769,770,1,0,0,0,770,771,6,98,0,
+        0,771,198,1,0,0,0,772,773,5,47,0,0,773,774,5,42,0,0,774,778,1,0,
+        0,0,775,777,9,0,0,0,776,775,1,0,0,0,777,780,1,0,0,0,778,779,1,0,
+        0,0,778,776,1,0,0,0,779,781,1,0,0,0,780,778,1,0,0,0,781,782,5,42,
+        0,0,782,783,5,47,0,0,783,784,1,0,0,0,784,785,6,99,0,0,785,200,1,
+        0,0,0,786,787,5,47,0,0,787,788,5,47,0,0,788,792,1,0,0,0,789,791,
+        8,7,0,0,790,789,1,0,0,0,791,794,1,0,0,0,792,790,1,0,0,0,792,793,
+        1,0,0,0,793,795,1,0,0,0,794,792,1,0,0,0,795,796,6,100,0,0,796,202,
+        1,0,0,0,18,0,698,700,704,709,713,715,727,729,737,748,754,756,760,
+        763,768,778,792,1,0,1,0
+    ]
+
+class modelicaLexer(Lexer):
+
+    atn = ATNDeserializer().deserialize(serializedATN())
+
+    decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ]
+
+    T__0 = 1
+    T__1 = 2
+    T__2 = 3
+    T__3 = 4
+    T__4 = 5
+    T__5 = 6
+    T__6 = 7
+    T__7 = 8
+    T__8 = 9
+    T__9 = 10
+    T__10 = 11
+    T__11 = 12
+    T__12 = 13
+    T__13 = 14
+    T__14 = 15
+    T__15 = 16
+    T__16 = 17
+    T__17 = 18
+    T__18 = 19
+    T__19 = 20
+    T__20 = 21
+    T__21 = 22
+    T__22 = 23
+    T__23 = 24
+    T__24 = 25
+    T__25 = 26
+    T__26 = 27
+    T__27 = 28
+    T__28 = 29
+    T__29 = 30
+    T__30 = 31
+    T__31 = 32
+    T__32 = 33
+    T__33 = 34
+    T__34 = 35
+    T__35 = 36
+    T__36 = 37
+    T__37 = 38
+    T__38 = 39
+    T__39 = 40
+    T__40 = 41
+    T__41 = 42
+    T__42 = 43
+    T__43 = 44
+    T__44 = 45
+    T__45 = 46
+    T__46 = 47
+    T__47 = 48
+    T__48 = 49
+    T__49 = 50
+    T__50 = 51
+    T__51 = 52
+    T__52 = 53
+    T__53 = 54
+    T__54 = 55
+    T__55 = 56
+    T__56 = 57
+    T__57 = 58
+    T__58 = 59
+    T__59 = 60
+    T__60 = 61
+    T__61 = 62
+    T__62 = 63
+    T__63 = 64
+    T__64 = 65
+    T__65 = 66
+    T__66 = 67
+    T__67 = 68
+    T__68 = 69
+    T__69 = 70
+    T__70 = 71
+    T__71 = 72
+    T__72 = 73
+    T__73 = 74
+    T__74 = 75
+    T__75 = 76
+    T__76 = 77
+    T__77 = 78
+    T__78 = 79
+    T__79 = 80
+    T__80 = 81
+    T__81 = 82
+    T__82 = 83
+    T__83 = 84
+    T__84 = 85
+    T__85 = 86
+    T__86 = 87
+    T__87 = 88
+    IDENT = 89
+    STRING = 90
+    UNSIGNED_NUMBER = 91
+    WS = 92
+    COMMENT = 93
+    LINE_COMMENT = 94
+
+    channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ]
+
+    modeNames = [ "DEFAULT_MODE" ]
+
+    literalNames = [ "<INVALID>",
+            "'within'", "';'", "'final'", "'encapsulated'", "'partial'", 
+            "'class'", "'model'", "'operator'", "'record'", "'block'", "'expandable'", 
+            "'connector'", "'type'", "'package'", "'pure'", "'impure'", 
+            "'function'", "'end'", "'extends'", "'='", "'enumeration'", 
+            "'('", "':'", "')'", "'der'", "','", "'public'", "'protected'", 
+            "'external'", "'redeclare'", "'inner'", "'outer'", "'replaceable'", 
+            "'import'", "'.*'", "'.{'", "'}'", "'constrainedby'", "'flow'", 
+            "'stream'", "'discrete'", "'parameter'", "'constant'", "'input'", 
+            "'output'", "'if'", "':='", "'each'", "'initial'", "'equation'", 
+            "'algorithm'", "'break'", "'return'", "'then'", "'elseif'", 
+            "'else'", "'for'", "'loop'", "'in'", "'while'", "'when'", "'elsewhen'", 
+            "'connect'", "'or'", "'and'", "'not'", "'<'", "'<='", "'>'", 
+            "'>='", "'=='", "'<>'", "'+'", "'-'", "'.+'", "'.-'", "'*'", 
+            "'/'", "'./'", "'^'", "'.^'", "'false'", "'true'", "'['", "']'", 
+            "'{'", "'.'", "'annotation'" ]
+
+    symbolicNames = [ "<INVALID>",
+            "IDENT", "STRING", "UNSIGNED_NUMBER", "WS", "COMMENT", "LINE_COMMENT" ]
+
+    ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", 
+                  "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", 
+                  "T__14", "T__15", "T__16", "T__17", "T__18", "T__19", 
+                  "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", 
+                  "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", 
+                  "T__32", "T__33", "T__34", "T__35", "T__36", "T__37", 
+                  "T__38", "T__39", "T__40", "T__41", "T__42", "T__43", 
+                  "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", 
+                  "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", 
+                  "T__56", "T__57", "T__58", "T__59", "T__60", "T__61", 
+                  "T__62", "T__63", "T__64", "T__65", "T__66", "T__67", 
+                  "T__68", "T__69", "T__70", "T__71", "T__72", "T__73", 
+                  "T__74", "T__75", "T__76", "T__77", "T__78", "T__79", 
+                  "T__80", "T__81", "T__82", "T__83", "T__84", "T__85", 
+                  "T__86", "T__87", "IDENT", "Q_IDENT", "S_CHAR", "NONDIGIT", 
+                  "STRING", "Q_CHAR", "S_ESCAPE", "DIGIT", "UNSIGNED_INTEGER", 
+                  "UNSIGNED_NUMBER", "WS", "COMMENT", "LINE_COMMENT" ]
+
+    grammarFileName = "modelica.g4"
+
+    def __init__(self, input=None, output:TextIO = sys.stdout):
+        super().__init__(input, output)
+        self.checkVersion("4.13.1")
+        self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache())
+        self._actions = None
+        self._predicates = None
+
+
diff --git a/src/feature_model/modelicaListener.py b/src/feature_model/modelicaListener.py
new file mode 100644
index 0000000..a5ce594
--- /dev/null
+++ b/src/feature_model/modelicaListener.py
@@ -0,0 +1,714 @@
+# Generated from modelica.g4 by ANTLR 4.13.1
+from antlr4 import *
+if "." in __name__:
+    from .modelicaParser import modelicaParser
+else:
+    from modelicaParser import modelicaParser
+
+# This class defines a complete listener for a parse tree produced by modelicaParser.
+class modelicaListener(ParseTreeListener):
+
+    # Enter a parse tree produced by modelicaParser#stored_definition.
+    def enterStored_definition(self, ctx:modelicaParser.Stored_definitionContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#stored_definition.
+    def exitStored_definition(self, ctx:modelicaParser.Stored_definitionContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#class_definition.
+    def enterClass_definition(self, ctx:modelicaParser.Class_definitionContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#class_definition.
+    def exitClass_definition(self, ctx:modelicaParser.Class_definitionContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#class_specifier.
+    def enterClass_specifier(self, ctx:modelicaParser.Class_specifierContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#class_specifier.
+    def exitClass_specifier(self, ctx:modelicaParser.Class_specifierContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#class_prefixes.
+    def enterClass_prefixes(self, ctx:modelicaParser.Class_prefixesContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#class_prefixes.
+    def exitClass_prefixes(self, ctx:modelicaParser.Class_prefixesContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#long_class_specifier.
+    def enterLong_class_specifier(self, ctx:modelicaParser.Long_class_specifierContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#long_class_specifier.
+    def exitLong_class_specifier(self, ctx:modelicaParser.Long_class_specifierContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#short_class_specifier.
+    def enterShort_class_specifier(self, ctx:modelicaParser.Short_class_specifierContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#short_class_specifier.
+    def exitShort_class_specifier(self, ctx:modelicaParser.Short_class_specifierContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#der_class_specifier.
+    def enterDer_class_specifier(self, ctx:modelicaParser.Der_class_specifierContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#der_class_specifier.
+    def exitDer_class_specifier(self, ctx:modelicaParser.Der_class_specifierContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#base_prefix.
+    def enterBase_prefix(self, ctx:modelicaParser.Base_prefixContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#base_prefix.
+    def exitBase_prefix(self, ctx:modelicaParser.Base_prefixContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#enum_list.
+    def enterEnum_list(self, ctx:modelicaParser.Enum_listContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#enum_list.
+    def exitEnum_list(self, ctx:modelicaParser.Enum_listContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#enumeration_literal.
+    def enterEnumeration_literal(self, ctx:modelicaParser.Enumeration_literalContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#enumeration_literal.
+    def exitEnumeration_literal(self, ctx:modelicaParser.Enumeration_literalContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#composition.
+    def enterComposition(self, ctx:modelicaParser.CompositionContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#composition.
+    def exitComposition(self, ctx:modelicaParser.CompositionContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#language_specification.
+    def enterLanguage_specification(self, ctx:modelicaParser.Language_specificationContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#language_specification.
+    def exitLanguage_specification(self, ctx:modelicaParser.Language_specificationContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#external_function_call.
+    def enterExternal_function_call(self, ctx:modelicaParser.External_function_callContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#external_function_call.
+    def exitExternal_function_call(self, ctx:modelicaParser.External_function_callContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#element_list.
+    def enterElement_list(self, ctx:modelicaParser.Element_listContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#element_list.
+    def exitElement_list(self, ctx:modelicaParser.Element_listContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#element.
+    def enterElement(self, ctx:modelicaParser.ElementContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#element.
+    def exitElement(self, ctx:modelicaParser.ElementContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#import_clause.
+    def enterImport_clause(self, ctx:modelicaParser.Import_clauseContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#import_clause.
+    def exitImport_clause(self, ctx:modelicaParser.Import_clauseContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#import_list.
+    def enterImport_list(self, ctx:modelicaParser.Import_listContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#import_list.
+    def exitImport_list(self, ctx:modelicaParser.Import_listContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#extends_clause.
+    def enterExtends_clause(self, ctx:modelicaParser.Extends_clauseContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#extends_clause.
+    def exitExtends_clause(self, ctx:modelicaParser.Extends_clauseContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#constraining_clause.
+    def enterConstraining_clause(self, ctx:modelicaParser.Constraining_clauseContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#constraining_clause.
+    def exitConstraining_clause(self, ctx:modelicaParser.Constraining_clauseContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#component_clause.
+    def enterComponent_clause(self, ctx:modelicaParser.Component_clauseContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#component_clause.
+    def exitComponent_clause(self, ctx:modelicaParser.Component_clauseContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#type_prefix.
+    def enterType_prefix(self, ctx:modelicaParser.Type_prefixContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#type_prefix.
+    def exitType_prefix(self, ctx:modelicaParser.Type_prefixContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#type_specifier.
+    def enterType_specifier(self, ctx:modelicaParser.Type_specifierContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#type_specifier.
+    def exitType_specifier(self, ctx:modelicaParser.Type_specifierContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#component_list.
+    def enterComponent_list(self, ctx:modelicaParser.Component_listContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#component_list.
+    def exitComponent_list(self, ctx:modelicaParser.Component_listContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#component_declaration.
+    def enterComponent_declaration(self, ctx:modelicaParser.Component_declarationContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#component_declaration.
+    def exitComponent_declaration(self, ctx:modelicaParser.Component_declarationContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#condition_attribute.
+    def enterCondition_attribute(self, ctx:modelicaParser.Condition_attributeContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#condition_attribute.
+    def exitCondition_attribute(self, ctx:modelicaParser.Condition_attributeContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#declaration.
+    def enterDeclaration(self, ctx:modelicaParser.DeclarationContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#declaration.
+    def exitDeclaration(self, ctx:modelicaParser.DeclarationContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#modification.
+    def enterModification(self, ctx:modelicaParser.ModificationContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#modification.
+    def exitModification(self, ctx:modelicaParser.ModificationContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#class_modification.
+    def enterClass_modification(self, ctx:modelicaParser.Class_modificationContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#class_modification.
+    def exitClass_modification(self, ctx:modelicaParser.Class_modificationContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#argument_list.
+    def enterArgument_list(self, ctx:modelicaParser.Argument_listContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#argument_list.
+    def exitArgument_list(self, ctx:modelicaParser.Argument_listContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#argument.
+    def enterArgument(self, ctx:modelicaParser.ArgumentContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#argument.
+    def exitArgument(self, ctx:modelicaParser.ArgumentContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#element_modification_or_replaceable.
+    def enterElement_modification_or_replaceable(self, ctx:modelicaParser.Element_modification_or_replaceableContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#element_modification_or_replaceable.
+    def exitElement_modification_or_replaceable(self, ctx:modelicaParser.Element_modification_or_replaceableContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#element_modification.
+    def enterElement_modification(self, ctx:modelicaParser.Element_modificationContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#element_modification.
+    def exitElement_modification(self, ctx:modelicaParser.Element_modificationContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#element_redeclaration.
+    def enterElement_redeclaration(self, ctx:modelicaParser.Element_redeclarationContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#element_redeclaration.
+    def exitElement_redeclaration(self, ctx:modelicaParser.Element_redeclarationContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#element_replaceable.
+    def enterElement_replaceable(self, ctx:modelicaParser.Element_replaceableContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#element_replaceable.
+    def exitElement_replaceable(self, ctx:modelicaParser.Element_replaceableContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#component_clause1.
+    def enterComponent_clause1(self, ctx:modelicaParser.Component_clause1Context):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#component_clause1.
+    def exitComponent_clause1(self, ctx:modelicaParser.Component_clause1Context):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#component_declaration1.
+    def enterComponent_declaration1(self, ctx:modelicaParser.Component_declaration1Context):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#component_declaration1.
+    def exitComponent_declaration1(self, ctx:modelicaParser.Component_declaration1Context):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#short_class_definition.
+    def enterShort_class_definition(self, ctx:modelicaParser.Short_class_definitionContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#short_class_definition.
+    def exitShort_class_definition(self, ctx:modelicaParser.Short_class_definitionContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#equation_section.
+    def enterEquation_section(self, ctx:modelicaParser.Equation_sectionContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#equation_section.
+    def exitEquation_section(self, ctx:modelicaParser.Equation_sectionContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#algorithm_section.
+    def enterAlgorithm_section(self, ctx:modelicaParser.Algorithm_sectionContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#algorithm_section.
+    def exitAlgorithm_section(self, ctx:modelicaParser.Algorithm_sectionContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#equation.
+    def enterEquation(self, ctx:modelicaParser.EquationContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#equation.
+    def exitEquation(self, ctx:modelicaParser.EquationContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#statement.
+    def enterStatement(self, ctx:modelicaParser.StatementContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#statement.
+    def exitStatement(self, ctx:modelicaParser.StatementContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#if_equation.
+    def enterIf_equation(self, ctx:modelicaParser.If_equationContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#if_equation.
+    def exitIf_equation(self, ctx:modelicaParser.If_equationContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#if_statement.
+    def enterIf_statement(self, ctx:modelicaParser.If_statementContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#if_statement.
+    def exitIf_statement(self, ctx:modelicaParser.If_statementContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#for_equation.
+    def enterFor_equation(self, ctx:modelicaParser.For_equationContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#for_equation.
+    def exitFor_equation(self, ctx:modelicaParser.For_equationContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#for_statement.
+    def enterFor_statement(self, ctx:modelicaParser.For_statementContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#for_statement.
+    def exitFor_statement(self, ctx:modelicaParser.For_statementContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#for_indices.
+    def enterFor_indices(self, ctx:modelicaParser.For_indicesContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#for_indices.
+    def exitFor_indices(self, ctx:modelicaParser.For_indicesContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#for_index.
+    def enterFor_index(self, ctx:modelicaParser.For_indexContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#for_index.
+    def exitFor_index(self, ctx:modelicaParser.For_indexContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#while_statement.
+    def enterWhile_statement(self, ctx:modelicaParser.While_statementContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#while_statement.
+    def exitWhile_statement(self, ctx:modelicaParser.While_statementContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#when_equation.
+    def enterWhen_equation(self, ctx:modelicaParser.When_equationContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#when_equation.
+    def exitWhen_equation(self, ctx:modelicaParser.When_equationContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#when_statement.
+    def enterWhen_statement(self, ctx:modelicaParser.When_statementContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#when_statement.
+    def exitWhen_statement(self, ctx:modelicaParser.When_statementContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#connect_clause.
+    def enterConnect_clause(self, ctx:modelicaParser.Connect_clauseContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#connect_clause.
+    def exitConnect_clause(self, ctx:modelicaParser.Connect_clauseContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#expression.
+    def enterExpression(self, ctx:modelicaParser.ExpressionContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#expression.
+    def exitExpression(self, ctx:modelicaParser.ExpressionContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#simple_expression.
+    def enterSimple_expression(self, ctx:modelicaParser.Simple_expressionContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#simple_expression.
+    def exitSimple_expression(self, ctx:modelicaParser.Simple_expressionContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#logical_expression.
+    def enterLogical_expression(self, ctx:modelicaParser.Logical_expressionContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#logical_expression.
+    def exitLogical_expression(self, ctx:modelicaParser.Logical_expressionContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#logical_term.
+    def enterLogical_term(self, ctx:modelicaParser.Logical_termContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#logical_term.
+    def exitLogical_term(self, ctx:modelicaParser.Logical_termContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#logical_factor.
+    def enterLogical_factor(self, ctx:modelicaParser.Logical_factorContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#logical_factor.
+    def exitLogical_factor(self, ctx:modelicaParser.Logical_factorContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#relation.
+    def enterRelation(self, ctx:modelicaParser.RelationContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#relation.
+    def exitRelation(self, ctx:modelicaParser.RelationContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#rel_op.
+    def enterRel_op(self, ctx:modelicaParser.Rel_opContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#rel_op.
+    def exitRel_op(self, ctx:modelicaParser.Rel_opContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#arithmetic_expression.
+    def enterArithmetic_expression(self, ctx:modelicaParser.Arithmetic_expressionContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#arithmetic_expression.
+    def exitArithmetic_expression(self, ctx:modelicaParser.Arithmetic_expressionContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#add_op.
+    def enterAdd_op(self, ctx:modelicaParser.Add_opContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#add_op.
+    def exitAdd_op(self, ctx:modelicaParser.Add_opContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#term.
+    def enterTerm(self, ctx:modelicaParser.TermContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#term.
+    def exitTerm(self, ctx:modelicaParser.TermContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#mul_op.
+    def enterMul_op(self, ctx:modelicaParser.Mul_opContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#mul_op.
+    def exitMul_op(self, ctx:modelicaParser.Mul_opContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#factor.
+    def enterFactor(self, ctx:modelicaParser.FactorContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#factor.
+    def exitFactor(self, ctx:modelicaParser.FactorContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#primary.
+    def enterPrimary(self, ctx:modelicaParser.PrimaryContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#primary.
+    def exitPrimary(self, ctx:modelicaParser.PrimaryContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#name.
+    def enterName(self, ctx:modelicaParser.NameContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#name.
+    def exitName(self, ctx:modelicaParser.NameContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#component_reference.
+    def enterComponent_reference(self, ctx:modelicaParser.Component_referenceContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#component_reference.
+    def exitComponent_reference(self, ctx:modelicaParser.Component_referenceContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#function_call_args.
+    def enterFunction_call_args(self, ctx:modelicaParser.Function_call_argsContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#function_call_args.
+    def exitFunction_call_args(self, ctx:modelicaParser.Function_call_argsContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#function_arguments.
+    def enterFunction_arguments(self, ctx:modelicaParser.Function_argumentsContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#function_arguments.
+    def exitFunction_arguments(self, ctx:modelicaParser.Function_argumentsContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#named_arguments.
+    def enterNamed_arguments(self, ctx:modelicaParser.Named_argumentsContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#named_arguments.
+    def exitNamed_arguments(self, ctx:modelicaParser.Named_argumentsContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#named_argument.
+    def enterNamed_argument(self, ctx:modelicaParser.Named_argumentContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#named_argument.
+    def exitNamed_argument(self, ctx:modelicaParser.Named_argumentContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#function_argument.
+    def enterFunction_argument(self, ctx:modelicaParser.Function_argumentContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#function_argument.
+    def exitFunction_argument(self, ctx:modelicaParser.Function_argumentContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#output_expression_list.
+    def enterOutput_expression_list(self, ctx:modelicaParser.Output_expression_listContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#output_expression_list.
+    def exitOutput_expression_list(self, ctx:modelicaParser.Output_expression_listContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#expression_list.
+    def enterExpression_list(self, ctx:modelicaParser.Expression_listContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#expression_list.
+    def exitExpression_list(self, ctx:modelicaParser.Expression_listContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#array_subscripts.
+    def enterArray_subscripts(self, ctx:modelicaParser.Array_subscriptsContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#array_subscripts.
+    def exitArray_subscripts(self, ctx:modelicaParser.Array_subscriptsContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#subscript_.
+    def enterSubscript_(self, ctx:modelicaParser.Subscript_Context):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#subscript_.
+    def exitSubscript_(self, ctx:modelicaParser.Subscript_Context):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#comment.
+    def enterComment(self, ctx:modelicaParser.CommentContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#comment.
+    def exitComment(self, ctx:modelicaParser.CommentContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#string_comment.
+    def enterString_comment(self, ctx:modelicaParser.String_commentContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#string_comment.
+    def exitString_comment(self, ctx:modelicaParser.String_commentContext):
+        pass
+
+
+    # Enter a parse tree produced by modelicaParser#annotation.
+    def enterAnnotation(self, ctx:modelicaParser.AnnotationContext):
+        pass
+
+    # Exit a parse tree produced by modelicaParser#annotation.
+    def exitAnnotation(self, ctx:modelicaParser.AnnotationContext):
+        pass
+
+
+
+del modelicaParser
\ No newline at end of file
diff --git a/src/feature_model/modelicaParser.py b/src/feature_model/modelicaParser.py
new file mode 100644
index 0000000..493af1a
--- /dev/null
+++ b/src/feature_model/modelicaParser.py
@@ -0,0 +1,6334 @@
+# Generated from modelica.g4 by ANTLR 4.13.1
+# encoding: utf-8
+from antlr4 import *
+from io import StringIO
+import sys
+if sys.version_info[1] > 5:
+	from typing import TextIO
+else:
+	from typing.io import TextIO
+
+def serializedATN():
+    return [
+        4,1,94,1035,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,
+        7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,
+        13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,
+        20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,
+        26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,2,
+        33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,7,
+        39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,45,2,
+        46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51,2,52,7,
+        52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,58,2,
+        59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,2,65,7,
+        65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71,7,71,2,
+        72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,1,0,1,
+        0,3,0,159,8,0,1,0,5,0,162,8,0,10,0,12,0,165,9,0,1,0,3,0,168,8,0,
+        1,0,1,0,1,0,5,0,173,8,0,10,0,12,0,176,9,0,1,0,1,0,1,1,3,1,181,8,
+        1,1,1,1,1,1,1,1,2,1,2,1,2,3,2,189,8,2,1,3,3,3,192,8,3,1,3,1,3,1,
+        3,3,3,197,8,3,1,3,1,3,1,3,3,3,202,8,3,1,3,1,3,1,3,1,3,3,3,208,8,
+        3,1,3,3,3,211,8,3,1,3,1,3,3,3,215,8,3,1,4,1,4,1,4,1,4,1,4,1,4,1,
+        4,1,4,1,4,3,4,226,8,4,1,4,1,4,1,4,1,4,1,4,3,4,233,8,4,1,5,1,5,1,
+        5,1,5,1,5,3,5,240,8,5,1,5,3,5,243,8,5,1,5,1,5,1,5,1,5,1,5,1,5,1,
+        5,3,5,252,8,5,1,5,3,5,255,8,5,1,5,1,5,3,5,259,8,5,1,6,1,6,1,6,1,
+        6,1,6,1,6,1,6,1,6,1,6,5,6,270,8,6,10,6,12,6,273,9,6,1,6,1,6,1,6,
+        1,7,1,7,1,8,1,8,1,8,5,8,283,8,8,10,8,12,8,286,9,8,1,9,1,9,1,9,1,
+        10,1,10,1,10,1,10,1,10,1,10,1,10,5,10,298,8,10,10,10,12,10,301,9,
+        10,1,10,1,10,3,10,305,8,10,1,10,3,10,308,8,10,1,10,3,10,311,8,10,
+        1,10,3,10,314,8,10,1,10,1,10,1,10,3,10,319,8,10,1,11,1,11,1,12,1,
+        12,1,12,3,12,326,8,12,1,12,1,12,1,12,3,12,331,8,12,1,12,1,12,1,13,
+        1,13,1,13,5,13,338,8,13,10,13,12,13,341,9,13,1,14,1,14,1,14,3,14,
+        346,8,14,1,14,3,14,349,8,14,1,14,3,14,352,8,14,1,14,3,14,355,8,14,
+        1,14,1,14,3,14,359,8,14,1,14,1,14,1,14,3,14,364,8,14,1,14,1,14,1,
+        14,3,14,369,8,14,3,14,371,8,14,3,14,373,8,14,1,15,1,15,1,15,1,15,
+        1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,3,15,388,8,15,1,15,
+        1,15,1,16,1,16,1,16,5,16,395,8,16,10,16,12,16,398,9,16,1,17,1,17,
+        1,17,3,17,403,8,17,1,17,3,17,406,8,17,1,18,1,18,1,18,3,18,411,8,
+        18,1,19,1,19,1,19,3,19,416,8,19,1,19,1,19,1,20,3,20,421,8,20,1,20,
+        3,20,424,8,20,1,20,3,20,427,8,20,1,21,1,21,1,22,1,22,1,22,5,22,434,
+        8,22,10,22,12,22,437,9,22,1,23,1,23,3,23,441,8,23,1,23,1,23,1,24,
+        1,24,1,24,1,25,1,25,3,25,450,8,25,1,25,3,25,453,8,25,1,26,1,26,1,
+        26,3,26,458,8,26,1,26,1,26,1,26,1,26,3,26,464,8,26,1,27,1,27,3,27,
+        468,8,27,1,27,1,27,1,28,1,28,1,28,5,28,475,8,28,10,28,12,28,478,
+        9,28,1,29,1,29,3,29,482,8,29,1,30,3,30,485,8,30,1,30,3,30,488,8,
+        30,1,30,1,30,3,30,492,8,30,1,31,1,31,3,31,496,8,31,1,31,1,31,1,32,
+        1,32,3,32,502,8,32,1,32,3,32,505,8,32,1,32,1,32,3,32,509,8,32,1,
+        32,3,32,512,8,32,1,33,1,33,1,33,3,33,517,8,33,1,33,3,33,520,8,33,
+        1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,36,1,36,1,36,1,37,3,37,533,
+        8,37,1,37,1,37,1,37,1,37,5,37,539,8,37,10,37,12,37,542,9,37,1,38,
+        3,38,545,8,38,1,38,1,38,1,38,1,38,5,38,551,8,38,10,38,12,38,554,
+        9,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,3,39,
+        567,8,39,1,39,1,39,1,40,1,40,1,40,1,40,3,40,575,8,40,1,40,1,40,1,
+        40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,3,40,590,8,
+        40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,41,5,41,600,8,41,10,41,12,
+        41,603,9,41,1,41,1,41,1,41,1,41,1,41,1,41,5,41,611,8,41,10,41,12,
+        41,614,9,41,5,41,616,8,41,10,41,12,41,619,9,41,1,41,1,41,1,41,1,
+        41,5,41,625,8,41,10,41,12,41,628,9,41,3,41,630,8,41,1,41,1,41,1,
+        41,1,42,1,42,1,42,1,42,1,42,1,42,5,42,641,8,42,10,42,12,42,644,9,
+        42,1,42,1,42,1,42,1,42,1,42,1,42,5,42,652,8,42,10,42,12,42,655,9,
+        42,5,42,657,8,42,10,42,12,42,660,9,42,1,42,1,42,1,42,1,42,5,42,666,
+        8,42,10,42,12,42,669,9,42,3,42,671,8,42,1,42,1,42,1,42,1,43,1,43,
+        1,43,1,43,1,43,1,43,5,43,682,8,43,10,43,12,43,685,9,43,1,43,1,43,
+        1,43,1,44,1,44,1,44,1,44,1,44,1,44,5,44,696,8,44,10,44,12,44,699,
+        9,44,1,44,1,44,1,44,1,45,1,45,1,45,5,45,707,8,45,10,45,12,45,710,
+        9,45,1,46,1,46,1,46,3,46,715,8,46,1,47,1,47,1,47,1,47,1,47,1,47,
+        5,47,723,8,47,10,47,12,47,726,9,47,1,47,1,47,1,47,1,48,1,48,1,48,
+        1,48,1,48,1,48,5,48,737,8,48,10,48,12,48,740,9,48,1,48,1,48,1,48,
+        1,48,1,48,1,48,5,48,748,8,48,10,48,12,48,751,9,48,5,48,753,8,48,
+        10,48,12,48,756,9,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49,1,49,
+        5,49,767,8,49,10,49,12,49,770,9,49,1,49,1,49,1,49,1,49,1,49,1,49,
+        5,49,778,8,49,10,49,12,49,781,9,49,5,49,783,8,49,10,49,12,49,786,
+        9,49,1,49,1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,51,1,51,
+        1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,5,51,808,8,51,10,51,12,51,
+        811,9,51,1,51,1,51,1,51,3,51,816,8,51,1,52,1,52,1,52,1,52,1,52,3,
+        52,823,8,52,3,52,825,8,52,1,53,1,53,1,53,5,53,830,8,53,10,53,12,
+        53,833,9,53,1,54,1,54,1,54,5,54,838,8,54,10,54,12,54,841,9,54,1,
+        55,3,55,844,8,55,1,55,1,55,1,56,1,56,1,56,1,56,3,56,852,8,56,1,57,
+        1,57,1,58,3,58,857,8,58,1,58,1,58,1,58,1,58,5,58,863,8,58,10,58,
+        12,58,866,9,58,1,59,1,59,1,60,1,60,1,60,1,60,5,60,874,8,60,10,60,
+        12,60,877,9,60,1,61,1,61,1,62,1,62,1,62,3,62,884,8,62,1,63,1,63,
+        1,63,1,63,1,63,1,63,1,63,3,63,893,8,63,1,63,1,63,1,63,1,63,1,63,
+        1,63,1,63,1,63,1,63,1,63,5,63,905,8,63,10,63,12,63,908,9,63,1,63,
+        1,63,1,63,1,63,1,63,1,63,1,63,3,63,917,8,63,1,64,3,64,920,8,64,1,
+        64,1,64,1,64,5,64,925,8,64,10,64,12,64,928,9,64,1,65,3,65,931,8,
+        65,1,65,1,65,3,65,935,8,65,1,65,1,65,1,65,3,65,940,8,65,5,65,942,
+        8,65,10,65,12,65,945,9,65,1,66,1,66,3,66,949,8,66,1,66,1,66,1,67,
+        1,67,1,67,1,67,1,67,3,67,958,8,67,1,67,3,67,961,8,67,1,68,1,68,1,
+        68,3,68,966,8,68,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,3,70,976,
+        8,70,1,70,1,70,1,70,3,70,981,8,70,1,71,3,71,984,8,71,1,71,1,71,3,
+        71,988,8,71,5,71,990,8,71,10,71,12,71,993,9,71,1,72,1,72,1,72,5,
+        72,998,8,72,10,72,12,72,1001,9,72,1,73,1,73,1,73,1,73,5,73,1007,
+        8,73,10,73,12,73,1010,9,73,1,73,1,73,1,74,1,74,3,74,1016,8,74,1,
+        75,1,75,3,75,1020,8,75,1,76,1,76,1,76,5,76,1025,8,76,10,76,12,76,
+        1028,9,76,3,76,1030,8,76,1,77,1,77,1,77,1,77,0,0,78,0,2,4,6,8,10,
+        12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,
+        56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,
+        100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,
+        132,134,136,138,140,142,144,146,148,150,152,154,0,8,1,0,15,16,1,
+        0,39,40,1,0,41,43,1,0,44,45,1,0,67,72,1,0,73,76,2,0,35,35,77,79,
+        1,0,80,81,1122,0,163,1,0,0,0,2,180,1,0,0,0,4,188,1,0,0,0,6,191,1,
+        0,0,0,8,232,1,0,0,0,10,258,1,0,0,0,12,260,1,0,0,0,14,277,1,0,0,0,
+        16,279,1,0,0,0,18,287,1,0,0,0,20,290,1,0,0,0,22,320,1,0,0,0,24,325,
+        1,0,0,0,26,339,1,0,0,0,28,372,1,0,0,0,30,374,1,0,0,0,32,391,1,0,
+        0,0,34,399,1,0,0,0,36,407,1,0,0,0,38,412,1,0,0,0,40,420,1,0,0,0,
+        42,428,1,0,0,0,44,430,1,0,0,0,46,438,1,0,0,0,48,444,1,0,0,0,50,447,
+        1,0,0,0,52,463,1,0,0,0,54,465,1,0,0,0,56,471,1,0,0,0,58,481,1,0,
+        0,0,60,484,1,0,0,0,62,493,1,0,0,0,64,499,1,0,0,0,66,513,1,0,0,0,
+        68,521,1,0,0,0,70,525,1,0,0,0,72,528,1,0,0,0,74,532,1,0,0,0,76,544,
+        1,0,0,0,78,566,1,0,0,0,80,589,1,0,0,0,82,593,1,0,0,0,84,634,1,0,
+        0,0,86,675,1,0,0,0,88,689,1,0,0,0,90,703,1,0,0,0,92,711,1,0,0,0,
+        94,716,1,0,0,0,96,730,1,0,0,0,98,760,1,0,0,0,100,790,1,0,0,0,102,
+        815,1,0,0,0,104,817,1,0,0,0,106,826,1,0,0,0,108,834,1,0,0,0,110,
+        843,1,0,0,0,112,847,1,0,0,0,114,853,1,0,0,0,116,856,1,0,0,0,118,
+        867,1,0,0,0,120,869,1,0,0,0,122,878,1,0,0,0,124,880,1,0,0,0,126,
+        916,1,0,0,0,128,919,1,0,0,0,130,930,1,0,0,0,132,946,1,0,0,0,134,
+        960,1,0,0,0,136,962,1,0,0,0,138,967,1,0,0,0,140,980,1,0,0,0,142,
+        983,1,0,0,0,144,994,1,0,0,0,146,1002,1,0,0,0,148,1015,1,0,0,0,150,
+        1017,1,0,0,0,152,1029,1,0,0,0,154,1031,1,0,0,0,156,158,5,1,0,0,157,
+        159,3,128,64,0,158,157,1,0,0,0,158,159,1,0,0,0,159,160,1,0,0,0,160,
+        162,5,2,0,0,161,156,1,0,0,0,162,165,1,0,0,0,163,161,1,0,0,0,163,
+        164,1,0,0,0,164,174,1,0,0,0,165,163,1,0,0,0,166,168,5,3,0,0,167,
+        166,1,0,0,0,167,168,1,0,0,0,168,169,1,0,0,0,169,170,3,2,1,0,170,
+        171,5,2,0,0,171,173,1,0,0,0,172,167,1,0,0,0,173,176,1,0,0,0,174,
+        172,1,0,0,0,174,175,1,0,0,0,175,177,1,0,0,0,176,174,1,0,0,0,177,
+        178,5,0,0,1,178,1,1,0,0,0,179,181,5,4,0,0,180,179,1,0,0,0,180,181,
+        1,0,0,0,181,182,1,0,0,0,182,183,3,6,3,0,183,184,3,4,2,0,184,3,1,
+        0,0,0,185,189,3,8,4,0,186,189,3,10,5,0,187,189,3,12,6,0,188,185,
+        1,0,0,0,188,186,1,0,0,0,188,187,1,0,0,0,189,5,1,0,0,0,190,192,5,
+        5,0,0,191,190,1,0,0,0,191,192,1,0,0,0,192,214,1,0,0,0,193,215,5,
+        6,0,0,194,215,5,7,0,0,195,197,5,8,0,0,196,195,1,0,0,0,196,197,1,
+        0,0,0,197,198,1,0,0,0,198,215,5,9,0,0,199,215,5,10,0,0,200,202,5,
+        11,0,0,201,200,1,0,0,0,201,202,1,0,0,0,202,203,1,0,0,0,203,215,5,
+        12,0,0,204,215,5,13,0,0,205,215,5,14,0,0,206,208,7,0,0,0,207,206,
+        1,0,0,0,207,208,1,0,0,0,208,210,1,0,0,0,209,211,5,8,0,0,210,209,
+        1,0,0,0,210,211,1,0,0,0,211,212,1,0,0,0,212,215,5,17,0,0,213,215,
+        5,8,0,0,214,193,1,0,0,0,214,194,1,0,0,0,214,196,1,0,0,0,214,199,
+        1,0,0,0,214,201,1,0,0,0,214,204,1,0,0,0,214,205,1,0,0,0,214,207,
+        1,0,0,0,214,213,1,0,0,0,215,7,1,0,0,0,216,217,5,89,0,0,217,218,3,
+        152,76,0,218,219,3,20,10,0,219,220,5,18,0,0,220,221,5,89,0,0,221,
+        233,1,0,0,0,222,223,5,19,0,0,223,225,5,89,0,0,224,226,3,54,27,0,
+        225,224,1,0,0,0,225,226,1,0,0,0,226,227,1,0,0,0,227,228,3,152,76,
+        0,228,229,3,20,10,0,229,230,5,18,0,0,230,231,5,89,0,0,231,233,1,
+        0,0,0,232,216,1,0,0,0,232,222,1,0,0,0,233,9,1,0,0,0,234,235,5,89,
+        0,0,235,236,5,20,0,0,236,237,3,14,7,0,237,239,3,128,64,0,238,240,
+        3,146,73,0,239,238,1,0,0,0,239,240,1,0,0,0,240,242,1,0,0,0,241,243,
+        3,54,27,0,242,241,1,0,0,0,242,243,1,0,0,0,243,244,1,0,0,0,244,245,
+        3,150,75,0,245,259,1,0,0,0,246,247,5,89,0,0,247,248,5,20,0,0,248,
+        249,5,21,0,0,249,254,5,22,0,0,250,252,3,16,8,0,251,250,1,0,0,0,251,
+        252,1,0,0,0,252,255,1,0,0,0,253,255,5,23,0,0,254,251,1,0,0,0,254,
+        253,1,0,0,0,255,256,1,0,0,0,256,257,5,24,0,0,257,259,3,150,75,0,
+        258,234,1,0,0,0,258,246,1,0,0,0,259,11,1,0,0,0,260,261,5,89,0,0,
+        261,262,5,20,0,0,262,263,5,25,0,0,263,264,5,22,0,0,264,265,3,128,
+        64,0,265,266,5,26,0,0,266,271,5,89,0,0,267,268,5,26,0,0,268,270,
+        5,89,0,0,269,267,1,0,0,0,270,273,1,0,0,0,271,269,1,0,0,0,271,272,
+        1,0,0,0,272,274,1,0,0,0,273,271,1,0,0,0,274,275,5,24,0,0,275,276,
+        3,150,75,0,276,13,1,0,0,0,277,278,3,40,20,0,278,15,1,0,0,0,279,284,
+        3,18,9,0,280,281,5,26,0,0,281,283,3,18,9,0,282,280,1,0,0,0,283,286,
+        1,0,0,0,284,282,1,0,0,0,284,285,1,0,0,0,285,17,1,0,0,0,286,284,1,
+        0,0,0,287,288,5,89,0,0,288,289,3,150,75,0,289,19,1,0,0,0,290,299,
+        3,26,13,0,291,292,5,27,0,0,292,298,3,26,13,0,293,294,5,28,0,0,294,
+        298,3,26,13,0,295,298,3,74,37,0,296,298,3,76,38,0,297,291,1,0,0,
+        0,297,293,1,0,0,0,297,295,1,0,0,0,297,296,1,0,0,0,298,301,1,0,0,
+        0,299,297,1,0,0,0,299,300,1,0,0,0,300,313,1,0,0,0,301,299,1,0,0,
+        0,302,304,5,29,0,0,303,305,3,22,11,0,304,303,1,0,0,0,304,305,1,0,
+        0,0,305,307,1,0,0,0,306,308,3,24,12,0,307,306,1,0,0,0,307,308,1,
+        0,0,0,308,310,1,0,0,0,309,311,3,154,77,0,310,309,1,0,0,0,310,311,
+        1,0,0,0,311,312,1,0,0,0,312,314,5,2,0,0,313,302,1,0,0,0,313,314,
+        1,0,0,0,314,318,1,0,0,0,315,316,3,154,77,0,316,317,5,2,0,0,317,319,
+        1,0,0,0,318,315,1,0,0,0,318,319,1,0,0,0,319,21,1,0,0,0,320,321,5,
+        90,0,0,321,23,1,0,0,0,322,323,3,130,65,0,323,324,5,20,0,0,324,326,
+        1,0,0,0,325,322,1,0,0,0,325,326,1,0,0,0,326,327,1,0,0,0,327,328,
+        5,89,0,0,328,330,5,22,0,0,329,331,3,144,72,0,330,329,1,0,0,0,330,
+        331,1,0,0,0,331,332,1,0,0,0,332,333,5,24,0,0,333,25,1,0,0,0,334,
+        335,3,28,14,0,335,336,5,2,0,0,336,338,1,0,0,0,337,334,1,0,0,0,338,
+        341,1,0,0,0,339,337,1,0,0,0,339,340,1,0,0,0,340,27,1,0,0,0,341,339,
+        1,0,0,0,342,373,3,30,15,0,343,373,3,34,17,0,344,346,5,30,0,0,345,
+        344,1,0,0,0,345,346,1,0,0,0,346,348,1,0,0,0,347,349,5,3,0,0,348,
+        347,1,0,0,0,348,349,1,0,0,0,349,351,1,0,0,0,350,352,5,31,0,0,351,
+        350,1,0,0,0,351,352,1,0,0,0,352,354,1,0,0,0,353,355,5,32,0,0,354,
+        353,1,0,0,0,354,355,1,0,0,0,355,370,1,0,0,0,356,359,3,2,1,0,357,
+        359,3,38,19,0,358,356,1,0,0,0,358,357,1,0,0,0,359,371,1,0,0,0,360,
+        363,5,33,0,0,361,364,3,2,1,0,362,364,3,38,19,0,363,361,1,0,0,0,363,
+        362,1,0,0,0,364,368,1,0,0,0,365,366,3,36,18,0,366,367,3,150,75,0,
+        367,369,1,0,0,0,368,365,1,0,0,0,368,369,1,0,0,0,369,371,1,0,0,0,
+        370,358,1,0,0,0,370,360,1,0,0,0,371,373,1,0,0,0,372,342,1,0,0,0,
+        372,343,1,0,0,0,372,345,1,0,0,0,373,29,1,0,0,0,374,387,5,34,0,0,
+        375,376,5,89,0,0,376,377,5,20,0,0,377,388,3,128,64,0,378,379,3,128,
+        64,0,379,380,5,35,0,0,380,388,1,0,0,0,381,382,3,128,64,0,382,383,
+        5,36,0,0,383,384,3,32,16,0,384,385,5,37,0,0,385,388,1,0,0,0,386,
+        388,3,128,64,0,387,375,1,0,0,0,387,378,1,0,0,0,387,381,1,0,0,0,387,
+        386,1,0,0,0,388,389,1,0,0,0,389,390,3,150,75,0,390,31,1,0,0,0,391,
+        396,5,89,0,0,392,393,5,26,0,0,393,395,5,89,0,0,394,392,1,0,0,0,395,
+        398,1,0,0,0,396,394,1,0,0,0,396,397,1,0,0,0,397,33,1,0,0,0,398,396,
+        1,0,0,0,399,400,5,19,0,0,400,402,3,128,64,0,401,403,3,54,27,0,402,
+        401,1,0,0,0,402,403,1,0,0,0,403,405,1,0,0,0,404,406,3,154,77,0,405,
+        404,1,0,0,0,405,406,1,0,0,0,406,35,1,0,0,0,407,408,5,38,0,0,408,
+        410,3,128,64,0,409,411,3,54,27,0,410,409,1,0,0,0,410,411,1,0,0,0,
+        411,37,1,0,0,0,412,413,3,40,20,0,413,415,3,42,21,0,414,416,3,146,
+        73,0,415,414,1,0,0,0,415,416,1,0,0,0,416,417,1,0,0,0,417,418,3,44,
+        22,0,418,39,1,0,0,0,419,421,7,1,0,0,420,419,1,0,0,0,420,421,1,0,
+        0,0,421,423,1,0,0,0,422,424,7,2,0,0,423,422,1,0,0,0,423,424,1,0,
+        0,0,424,426,1,0,0,0,425,427,7,3,0,0,426,425,1,0,0,0,426,427,1,0,
+        0,0,427,41,1,0,0,0,428,429,3,128,64,0,429,43,1,0,0,0,430,435,3,46,
+        23,0,431,432,5,26,0,0,432,434,3,46,23,0,433,431,1,0,0,0,434,437,
+        1,0,0,0,435,433,1,0,0,0,435,436,1,0,0,0,436,45,1,0,0,0,437,435,1,
+        0,0,0,438,440,3,50,25,0,439,441,3,48,24,0,440,439,1,0,0,0,440,441,
+        1,0,0,0,441,442,1,0,0,0,442,443,3,150,75,0,443,47,1,0,0,0,444,445,
+        5,46,0,0,445,446,3,102,51,0,446,49,1,0,0,0,447,449,5,89,0,0,448,
+        450,3,146,73,0,449,448,1,0,0,0,449,450,1,0,0,0,450,452,1,0,0,0,451,
+        453,3,52,26,0,452,451,1,0,0,0,452,453,1,0,0,0,453,51,1,0,0,0,454,
+        457,3,54,27,0,455,456,5,20,0,0,456,458,3,102,51,0,457,455,1,0,0,
+        0,457,458,1,0,0,0,458,464,1,0,0,0,459,460,5,20,0,0,460,464,3,102,
+        51,0,461,462,5,47,0,0,462,464,3,102,51,0,463,454,1,0,0,0,463,459,
+        1,0,0,0,463,461,1,0,0,0,464,53,1,0,0,0,465,467,5,22,0,0,466,468,
+        3,56,28,0,467,466,1,0,0,0,467,468,1,0,0,0,468,469,1,0,0,0,469,470,
+        5,24,0,0,470,55,1,0,0,0,471,476,3,58,29,0,472,473,5,26,0,0,473,475,
+        3,58,29,0,474,472,1,0,0,0,475,478,1,0,0,0,476,474,1,0,0,0,476,477,
+        1,0,0,0,477,57,1,0,0,0,478,476,1,0,0,0,479,482,3,60,30,0,480,482,
+        3,64,32,0,481,479,1,0,0,0,481,480,1,0,0,0,482,59,1,0,0,0,483,485,
+        5,48,0,0,484,483,1,0,0,0,484,485,1,0,0,0,485,487,1,0,0,0,486,488,
+        5,3,0,0,487,486,1,0,0,0,487,488,1,0,0,0,488,491,1,0,0,0,489,492,
+        3,62,31,0,490,492,3,66,33,0,491,489,1,0,0,0,491,490,1,0,0,0,492,
+        61,1,0,0,0,493,495,3,128,64,0,494,496,3,52,26,0,495,494,1,0,0,0,
+        495,496,1,0,0,0,496,497,1,0,0,0,497,498,3,152,76,0,498,63,1,0,0,
+        0,499,501,5,30,0,0,500,502,5,48,0,0,501,500,1,0,0,0,501,502,1,0,
+        0,0,502,504,1,0,0,0,503,505,5,3,0,0,504,503,1,0,0,0,504,505,1,0,
+        0,0,505,511,1,0,0,0,506,509,3,72,36,0,507,509,3,68,34,0,508,506,
+        1,0,0,0,508,507,1,0,0,0,509,512,1,0,0,0,510,512,3,66,33,0,511,508,
+        1,0,0,0,511,510,1,0,0,0,512,65,1,0,0,0,513,516,5,33,0,0,514,517,
+        3,72,36,0,515,517,3,68,34,0,516,514,1,0,0,0,516,515,1,0,0,0,517,
+        519,1,0,0,0,518,520,3,36,18,0,519,518,1,0,0,0,519,520,1,0,0,0,520,
+        67,1,0,0,0,521,522,3,40,20,0,522,523,3,42,21,0,523,524,3,70,35,0,
+        524,69,1,0,0,0,525,526,3,50,25,0,526,527,3,150,75,0,527,71,1,0,0,
+        0,528,529,3,6,3,0,529,530,3,10,5,0,530,73,1,0,0,0,531,533,5,49,0,
+        0,532,531,1,0,0,0,532,533,1,0,0,0,533,534,1,0,0,0,534,540,5,50,0,
+        0,535,536,3,78,39,0,536,537,5,2,0,0,537,539,1,0,0,0,538,535,1,0,
+        0,0,539,542,1,0,0,0,540,538,1,0,0,0,540,541,1,0,0,0,541,75,1,0,0,
+        0,542,540,1,0,0,0,543,545,5,49,0,0,544,543,1,0,0,0,544,545,1,0,0,
+        0,545,546,1,0,0,0,546,552,5,51,0,0,547,548,3,80,40,0,548,549,5,2,
+        0,0,549,551,1,0,0,0,550,547,1,0,0,0,551,554,1,0,0,0,552,550,1,0,
+        0,0,552,553,1,0,0,0,553,77,1,0,0,0,554,552,1,0,0,0,555,556,3,104,
+        52,0,556,557,5,20,0,0,557,558,3,102,51,0,558,567,1,0,0,0,559,567,
+        3,82,41,0,560,567,3,86,43,0,561,567,3,100,50,0,562,567,3,96,48,0,
+        563,564,3,128,64,0,564,565,3,132,66,0,565,567,1,0,0,0,566,555,1,
+        0,0,0,566,559,1,0,0,0,566,560,1,0,0,0,566,561,1,0,0,0,566,562,1,
+        0,0,0,566,563,1,0,0,0,567,568,1,0,0,0,568,569,3,150,75,0,569,79,
+        1,0,0,0,570,574,3,130,65,0,571,572,5,47,0,0,572,575,3,102,51,0,573,
+        575,3,132,66,0,574,571,1,0,0,0,574,573,1,0,0,0,575,590,1,0,0,0,576,
+        577,5,22,0,0,577,578,3,142,71,0,578,579,5,24,0,0,579,580,5,47,0,
+        0,580,581,3,130,65,0,581,582,3,132,66,0,582,590,1,0,0,0,583,590,
+        5,52,0,0,584,590,5,53,0,0,585,590,3,84,42,0,586,590,3,88,44,0,587,
+        590,3,94,47,0,588,590,3,98,49,0,589,570,1,0,0,0,589,576,1,0,0,0,
+        589,583,1,0,0,0,589,584,1,0,0,0,589,585,1,0,0,0,589,586,1,0,0,0,
+        589,587,1,0,0,0,589,588,1,0,0,0,590,591,1,0,0,0,591,592,3,150,75,
+        0,592,81,1,0,0,0,593,594,5,46,0,0,594,595,3,102,51,0,595,601,5,54,
+        0,0,596,597,3,78,39,0,597,598,5,2,0,0,598,600,1,0,0,0,599,596,1,
+        0,0,0,600,603,1,0,0,0,601,599,1,0,0,0,601,602,1,0,0,0,602,617,1,
+        0,0,0,603,601,1,0,0,0,604,605,5,55,0,0,605,606,3,102,51,0,606,612,
+        5,54,0,0,607,608,3,78,39,0,608,609,5,2,0,0,609,611,1,0,0,0,610,607,
+        1,0,0,0,611,614,1,0,0,0,612,610,1,0,0,0,612,613,1,0,0,0,613,616,
+        1,0,0,0,614,612,1,0,0,0,615,604,1,0,0,0,616,619,1,0,0,0,617,615,
+        1,0,0,0,617,618,1,0,0,0,618,629,1,0,0,0,619,617,1,0,0,0,620,626,
+        5,56,0,0,621,622,3,78,39,0,622,623,5,2,0,0,623,625,1,0,0,0,624,621,
+        1,0,0,0,625,628,1,0,0,0,626,624,1,0,0,0,626,627,1,0,0,0,627,630,
+        1,0,0,0,628,626,1,0,0,0,629,620,1,0,0,0,629,630,1,0,0,0,630,631,
+        1,0,0,0,631,632,5,18,0,0,632,633,5,46,0,0,633,83,1,0,0,0,634,635,
+        5,46,0,0,635,636,3,102,51,0,636,642,5,54,0,0,637,638,3,80,40,0,638,
+        639,5,2,0,0,639,641,1,0,0,0,640,637,1,0,0,0,641,644,1,0,0,0,642,
+        640,1,0,0,0,642,643,1,0,0,0,643,658,1,0,0,0,644,642,1,0,0,0,645,
+        646,5,55,0,0,646,647,3,102,51,0,647,653,5,54,0,0,648,649,3,80,40,
+        0,649,650,5,2,0,0,650,652,1,0,0,0,651,648,1,0,0,0,652,655,1,0,0,
+        0,653,651,1,0,0,0,653,654,1,0,0,0,654,657,1,0,0,0,655,653,1,0,0,
+        0,656,645,1,0,0,0,657,660,1,0,0,0,658,656,1,0,0,0,658,659,1,0,0,
+        0,659,670,1,0,0,0,660,658,1,0,0,0,661,667,5,56,0,0,662,663,3,80,
+        40,0,663,664,5,2,0,0,664,666,1,0,0,0,665,662,1,0,0,0,666,669,1,0,
+        0,0,667,665,1,0,0,0,667,668,1,0,0,0,668,671,1,0,0,0,669,667,1,0,
+        0,0,670,661,1,0,0,0,670,671,1,0,0,0,671,672,1,0,0,0,672,673,5,18,
+        0,0,673,674,5,46,0,0,674,85,1,0,0,0,675,676,5,57,0,0,676,677,3,90,
+        45,0,677,683,5,58,0,0,678,679,3,78,39,0,679,680,5,2,0,0,680,682,
+        1,0,0,0,681,678,1,0,0,0,682,685,1,0,0,0,683,681,1,0,0,0,683,684,
+        1,0,0,0,684,686,1,0,0,0,685,683,1,0,0,0,686,687,5,18,0,0,687,688,
+        5,57,0,0,688,87,1,0,0,0,689,690,5,57,0,0,690,691,3,90,45,0,691,697,
+        5,58,0,0,692,693,3,80,40,0,693,694,5,2,0,0,694,696,1,0,0,0,695,692,
+        1,0,0,0,696,699,1,0,0,0,697,695,1,0,0,0,697,698,1,0,0,0,698,700,
+        1,0,0,0,699,697,1,0,0,0,700,701,5,18,0,0,701,702,5,57,0,0,702,89,
+        1,0,0,0,703,708,3,92,46,0,704,705,5,26,0,0,705,707,3,92,46,0,706,
+        704,1,0,0,0,707,710,1,0,0,0,708,706,1,0,0,0,708,709,1,0,0,0,709,
+        91,1,0,0,0,710,708,1,0,0,0,711,714,5,89,0,0,712,713,5,59,0,0,713,
+        715,3,102,51,0,714,712,1,0,0,0,714,715,1,0,0,0,715,93,1,0,0,0,716,
+        717,5,60,0,0,717,718,3,102,51,0,718,724,5,58,0,0,719,720,3,80,40,
+        0,720,721,5,2,0,0,721,723,1,0,0,0,722,719,1,0,0,0,723,726,1,0,0,
+        0,724,722,1,0,0,0,724,725,1,0,0,0,725,727,1,0,0,0,726,724,1,0,0,
+        0,727,728,5,18,0,0,728,729,5,60,0,0,729,95,1,0,0,0,730,731,5,61,
+        0,0,731,732,3,102,51,0,732,738,5,54,0,0,733,734,3,78,39,0,734,735,
+        5,2,0,0,735,737,1,0,0,0,736,733,1,0,0,0,737,740,1,0,0,0,738,736,
+        1,0,0,0,738,739,1,0,0,0,739,754,1,0,0,0,740,738,1,0,0,0,741,742,
+        5,62,0,0,742,743,3,102,51,0,743,749,5,54,0,0,744,745,3,78,39,0,745,
+        746,5,2,0,0,746,748,1,0,0,0,747,744,1,0,0,0,748,751,1,0,0,0,749,
+        747,1,0,0,0,749,750,1,0,0,0,750,753,1,0,0,0,751,749,1,0,0,0,752,
+        741,1,0,0,0,753,756,1,0,0,0,754,752,1,0,0,0,754,755,1,0,0,0,755,
+        757,1,0,0,0,756,754,1,0,0,0,757,758,5,18,0,0,758,759,5,61,0,0,759,
+        97,1,0,0,0,760,761,5,61,0,0,761,762,3,102,51,0,762,768,5,54,0,0,
+        763,764,3,80,40,0,764,765,5,2,0,0,765,767,1,0,0,0,766,763,1,0,0,
+        0,767,770,1,0,0,0,768,766,1,0,0,0,768,769,1,0,0,0,769,784,1,0,0,
+        0,770,768,1,0,0,0,771,772,5,62,0,0,772,773,3,102,51,0,773,779,5,
+        54,0,0,774,775,3,80,40,0,775,776,5,2,0,0,776,778,1,0,0,0,777,774,
+        1,0,0,0,778,781,1,0,0,0,779,777,1,0,0,0,779,780,1,0,0,0,780,783,
+        1,0,0,0,781,779,1,0,0,0,782,771,1,0,0,0,783,786,1,0,0,0,784,782,
+        1,0,0,0,784,785,1,0,0,0,785,787,1,0,0,0,786,784,1,0,0,0,787,788,
+        5,18,0,0,788,789,5,61,0,0,789,99,1,0,0,0,790,791,5,63,0,0,791,792,
+        5,22,0,0,792,793,3,130,65,0,793,794,5,26,0,0,794,795,3,130,65,0,
+        795,796,5,24,0,0,796,101,1,0,0,0,797,816,3,104,52,0,798,799,5,46,
+        0,0,799,800,3,102,51,0,800,801,5,54,0,0,801,809,3,102,51,0,802,803,
+        5,55,0,0,803,804,3,102,51,0,804,805,5,54,0,0,805,806,3,102,51,0,
+        806,808,1,0,0,0,807,802,1,0,0,0,808,811,1,0,0,0,809,807,1,0,0,0,
+        809,810,1,0,0,0,810,812,1,0,0,0,811,809,1,0,0,0,812,813,5,56,0,0,
+        813,814,3,102,51,0,814,816,1,0,0,0,815,797,1,0,0,0,815,798,1,0,0,
+        0,816,103,1,0,0,0,817,824,3,106,53,0,818,819,5,23,0,0,819,822,3,
+        106,53,0,820,821,5,23,0,0,821,823,3,106,53,0,822,820,1,0,0,0,822,
+        823,1,0,0,0,823,825,1,0,0,0,824,818,1,0,0,0,824,825,1,0,0,0,825,
+        105,1,0,0,0,826,831,3,108,54,0,827,828,5,64,0,0,828,830,3,108,54,
+        0,829,827,1,0,0,0,830,833,1,0,0,0,831,829,1,0,0,0,831,832,1,0,0,
+        0,832,107,1,0,0,0,833,831,1,0,0,0,834,839,3,110,55,0,835,836,5,65,
+        0,0,836,838,3,110,55,0,837,835,1,0,0,0,838,841,1,0,0,0,839,837,1,
+        0,0,0,839,840,1,0,0,0,840,109,1,0,0,0,841,839,1,0,0,0,842,844,5,
+        66,0,0,843,842,1,0,0,0,843,844,1,0,0,0,844,845,1,0,0,0,845,846,3,
+        112,56,0,846,111,1,0,0,0,847,851,3,116,58,0,848,849,3,114,57,0,849,
+        850,3,116,58,0,850,852,1,0,0,0,851,848,1,0,0,0,851,852,1,0,0,0,852,
+        113,1,0,0,0,853,854,7,4,0,0,854,115,1,0,0,0,855,857,3,118,59,0,856,
+        855,1,0,0,0,856,857,1,0,0,0,857,858,1,0,0,0,858,864,3,120,60,0,859,
+        860,3,118,59,0,860,861,3,120,60,0,861,863,1,0,0,0,862,859,1,0,0,
+        0,863,866,1,0,0,0,864,862,1,0,0,0,864,865,1,0,0,0,865,117,1,0,0,
+        0,866,864,1,0,0,0,867,868,7,5,0,0,868,119,1,0,0,0,869,875,3,124,
+        62,0,870,871,3,122,61,0,871,872,3,124,62,0,872,874,1,0,0,0,873,870,
+        1,0,0,0,874,877,1,0,0,0,875,873,1,0,0,0,875,876,1,0,0,0,876,121,
+        1,0,0,0,877,875,1,0,0,0,878,879,7,6,0,0,879,123,1,0,0,0,880,883,
+        3,126,63,0,881,882,7,7,0,0,882,884,3,126,63,0,883,881,1,0,0,0,883,
+        884,1,0,0,0,884,125,1,0,0,0,885,917,5,91,0,0,886,917,5,90,0,0,887,
+        917,5,82,0,0,888,917,5,83,0,0,889,893,3,128,64,0,890,893,5,25,0,
+        0,891,893,5,49,0,0,892,889,1,0,0,0,892,890,1,0,0,0,892,891,1,0,0,
+        0,893,894,1,0,0,0,894,917,3,132,66,0,895,917,3,130,65,0,896,897,
+        5,22,0,0,897,898,3,142,71,0,898,899,5,24,0,0,899,917,1,0,0,0,900,
+        901,5,84,0,0,901,906,3,144,72,0,902,903,5,2,0,0,903,905,3,144,72,
+        0,904,902,1,0,0,0,905,908,1,0,0,0,906,904,1,0,0,0,906,907,1,0,0,
+        0,907,909,1,0,0,0,908,906,1,0,0,0,909,910,5,85,0,0,910,917,1,0,0,
+        0,911,912,5,86,0,0,912,913,3,134,67,0,913,914,5,37,0,0,914,917,1,
+        0,0,0,915,917,5,18,0,0,916,885,1,0,0,0,916,886,1,0,0,0,916,887,1,
+        0,0,0,916,888,1,0,0,0,916,892,1,0,0,0,916,895,1,0,0,0,916,896,1,
+        0,0,0,916,900,1,0,0,0,916,911,1,0,0,0,916,915,1,0,0,0,917,127,1,
+        0,0,0,918,920,5,87,0,0,919,918,1,0,0,0,919,920,1,0,0,0,920,921,1,
+        0,0,0,921,926,5,89,0,0,922,923,5,87,0,0,923,925,5,89,0,0,924,922,
+        1,0,0,0,925,928,1,0,0,0,926,924,1,0,0,0,926,927,1,0,0,0,927,129,
+        1,0,0,0,928,926,1,0,0,0,929,931,5,87,0,0,930,929,1,0,0,0,930,931,
+        1,0,0,0,931,932,1,0,0,0,932,934,5,89,0,0,933,935,3,146,73,0,934,
+        933,1,0,0,0,934,935,1,0,0,0,935,943,1,0,0,0,936,937,5,87,0,0,937,
+        939,5,89,0,0,938,940,3,146,73,0,939,938,1,0,0,0,939,940,1,0,0,0,
+        940,942,1,0,0,0,941,936,1,0,0,0,942,945,1,0,0,0,943,941,1,0,0,0,
+        943,944,1,0,0,0,944,131,1,0,0,0,945,943,1,0,0,0,946,948,5,22,0,0,
+        947,949,3,134,67,0,948,947,1,0,0,0,948,949,1,0,0,0,949,950,1,0,0,
+        0,950,951,5,24,0,0,951,133,1,0,0,0,952,957,3,140,70,0,953,954,5,
+        26,0,0,954,958,3,134,67,0,955,956,5,57,0,0,956,958,3,90,45,0,957,
+        953,1,0,0,0,957,955,1,0,0,0,957,958,1,0,0,0,958,961,1,0,0,0,959,
+        961,3,136,68,0,960,952,1,0,0,0,960,959,1,0,0,0,961,135,1,0,0,0,962,
+        965,3,138,69,0,963,964,5,26,0,0,964,966,3,136,68,0,965,963,1,0,0,
+        0,965,966,1,0,0,0,966,137,1,0,0,0,967,968,5,89,0,0,968,969,5,20,
+        0,0,969,970,3,140,70,0,970,139,1,0,0,0,971,972,5,17,0,0,972,973,
+        3,128,64,0,973,975,5,22,0,0,974,976,3,136,68,0,975,974,1,0,0,0,975,
+        976,1,0,0,0,976,977,1,0,0,0,977,978,5,24,0,0,978,981,1,0,0,0,979,
+        981,3,102,51,0,980,971,1,0,0,0,980,979,1,0,0,0,981,141,1,0,0,0,982,
+        984,3,102,51,0,983,982,1,0,0,0,983,984,1,0,0,0,984,991,1,0,0,0,985,
+        987,5,26,0,0,986,988,3,102,51,0,987,986,1,0,0,0,987,988,1,0,0,0,
+        988,990,1,0,0,0,989,985,1,0,0,0,990,993,1,0,0,0,991,989,1,0,0,0,
+        991,992,1,0,0,0,992,143,1,0,0,0,993,991,1,0,0,0,994,999,3,102,51,
+        0,995,996,5,26,0,0,996,998,3,102,51,0,997,995,1,0,0,0,998,1001,1,
+        0,0,0,999,997,1,0,0,0,999,1000,1,0,0,0,1000,145,1,0,0,0,1001,999,
+        1,0,0,0,1002,1003,5,84,0,0,1003,1008,3,148,74,0,1004,1005,5,26,0,
+        0,1005,1007,3,148,74,0,1006,1004,1,0,0,0,1007,1010,1,0,0,0,1008,
+        1006,1,0,0,0,1008,1009,1,0,0,0,1009,1011,1,0,0,0,1010,1008,1,0,0,
+        0,1011,1012,5,85,0,0,1012,147,1,0,0,0,1013,1016,5,23,0,0,1014,1016,
+        3,102,51,0,1015,1013,1,0,0,0,1015,1014,1,0,0,0,1016,149,1,0,0,0,
+        1017,1019,3,152,76,0,1018,1020,3,154,77,0,1019,1018,1,0,0,0,1019,
+        1020,1,0,0,0,1020,151,1,0,0,0,1021,1026,5,90,0,0,1022,1023,5,73,
+        0,0,1023,1025,5,90,0,0,1024,1022,1,0,0,0,1025,1028,1,0,0,0,1026,
+        1024,1,0,0,0,1026,1027,1,0,0,0,1027,1030,1,0,0,0,1028,1026,1,0,0,
+        0,1029,1021,1,0,0,0,1029,1030,1,0,0,0,1030,153,1,0,0,0,1031,1032,
+        5,88,0,0,1032,1033,3,54,27,0,1033,155,1,0,0,0,132,158,163,167,174,
+        180,188,191,196,201,207,210,214,225,232,239,242,251,254,258,271,
+        284,297,299,304,307,310,313,318,325,330,339,345,348,351,354,358,
+        363,368,370,372,387,396,402,405,410,415,420,423,426,435,440,449,
+        452,457,463,467,476,481,484,487,491,495,501,504,508,511,516,519,
+        532,540,544,552,566,574,589,601,612,617,626,629,642,653,658,667,
+        670,683,697,708,714,724,738,749,754,768,779,784,809,815,822,824,
+        831,839,843,851,856,864,875,883,892,906,916,919,926,930,934,939,
+        943,948,957,960,965,975,980,983,987,991,999,1008,1015,1019,1026,
+        1029
+    ]
+
+class modelicaParser ( Parser ):
+
+    grammarFileName = "modelica.g4"
+
+    atn = ATNDeserializer().deserialize(serializedATN())
+
+    decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ]
+
+    sharedContextCache = PredictionContextCache()
+
+    literalNames = [ "<INVALID>", "'within'", "';'", "'final'", "'encapsulated'", 
+                     "'partial'", "'class'", "'model'", "'operator'", "'record'", 
+                     "'block'", "'expandable'", "'connector'", "'type'", 
+                     "'package'", "'pure'", "'impure'", "'function'", "'end'", 
+                     "'extends'", "'='", "'enumeration'", "'('", "':'", 
+                     "')'", "'der'", "','", "'public'", "'protected'", "'external'", 
+                     "'redeclare'", "'inner'", "'outer'", "'replaceable'", 
+                     "'import'", "'.*'", "'.{'", "'}'", "'constrainedby'", 
+                     "'flow'", "'stream'", "'discrete'", "'parameter'", 
+                     "'constant'", "'input'", "'output'", "'if'", "':='", 
+                     "'each'", "'initial'", "'equation'", "'algorithm'", 
+                     "'break'", "'return'", "'then'", "'elseif'", "'else'", 
+                     "'for'", "'loop'", "'in'", "'while'", "'when'", "'elsewhen'", 
+                     "'connect'", "'or'", "'and'", "'not'", "'<'", "'<='", 
+                     "'>'", "'>='", "'=='", "'<>'", "'+'", "'-'", "'.+'", 
+                     "'.-'", "'*'", "'/'", "'./'", "'^'", "'.^'", "'false'", 
+                     "'true'", "'['", "']'", "'{'", "'.'", "'annotation'" ]
+
+    symbolicNames = [ "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
+                      "<INVALID>", "IDENT", "STRING", "UNSIGNED_NUMBER", 
+                      "WS", "COMMENT", "LINE_COMMENT" ]
+
+    RULE_stored_definition = 0
+    RULE_class_definition = 1
+    RULE_class_specifier = 2
+    RULE_class_prefixes = 3
+    RULE_long_class_specifier = 4
+    RULE_short_class_specifier = 5
+    RULE_der_class_specifier = 6
+    RULE_base_prefix = 7
+    RULE_enum_list = 8
+    RULE_enumeration_literal = 9
+    RULE_composition = 10
+    RULE_language_specification = 11
+    RULE_external_function_call = 12
+    RULE_element_list = 13
+    RULE_element = 14
+    RULE_import_clause = 15
+    RULE_import_list = 16
+    RULE_extends_clause = 17
+    RULE_constraining_clause = 18
+    RULE_component_clause = 19
+    RULE_type_prefix = 20
+    RULE_type_specifier = 21
+    RULE_component_list = 22
+    RULE_component_declaration = 23
+    RULE_condition_attribute = 24
+    RULE_declaration = 25
+    RULE_modification = 26
+    RULE_class_modification = 27
+    RULE_argument_list = 28
+    RULE_argument = 29
+    RULE_element_modification_or_replaceable = 30
+    RULE_element_modification = 31
+    RULE_element_redeclaration = 32
+    RULE_element_replaceable = 33
+    RULE_component_clause1 = 34
+    RULE_component_declaration1 = 35
+    RULE_short_class_definition = 36
+    RULE_equation_section = 37
+    RULE_algorithm_section = 38
+    RULE_equation = 39
+    RULE_statement = 40
+    RULE_if_equation = 41
+    RULE_if_statement = 42
+    RULE_for_equation = 43
+    RULE_for_statement = 44
+    RULE_for_indices = 45
+    RULE_for_index = 46
+    RULE_while_statement = 47
+    RULE_when_equation = 48
+    RULE_when_statement = 49
+    RULE_connect_clause = 50
+    RULE_expression = 51
+    RULE_simple_expression = 52
+    RULE_logical_expression = 53
+    RULE_logical_term = 54
+    RULE_logical_factor = 55
+    RULE_relation = 56
+    RULE_rel_op = 57
+    RULE_arithmetic_expression = 58
+    RULE_add_op = 59
+    RULE_term = 60
+    RULE_mul_op = 61
+    RULE_factor = 62
+    RULE_primary = 63
+    RULE_name = 64
+    RULE_component_reference = 65
+    RULE_function_call_args = 66
+    RULE_function_arguments = 67
+    RULE_named_arguments = 68
+    RULE_named_argument = 69
+    RULE_function_argument = 70
+    RULE_output_expression_list = 71
+    RULE_expression_list = 72
+    RULE_array_subscripts = 73
+    RULE_subscript_ = 74
+    RULE_comment = 75
+    RULE_string_comment = 76
+    RULE_annotation = 77
+
+    ruleNames =  [ "stored_definition", "class_definition", "class_specifier", 
+                   "class_prefixes", "long_class_specifier", "short_class_specifier", 
+                   "der_class_specifier", "base_prefix", "enum_list", "enumeration_literal", 
+                   "composition", "language_specification", "external_function_call", 
+                   "element_list", "element", "import_clause", "import_list", 
+                   "extends_clause", "constraining_clause", "component_clause", 
+                   "type_prefix", "type_specifier", "component_list", "component_declaration", 
+                   "condition_attribute", "declaration", "modification", 
+                   "class_modification", "argument_list", "argument", "element_modification_or_replaceable", 
+                   "element_modification", "element_redeclaration", "element_replaceable", 
+                   "component_clause1", "component_declaration1", "short_class_definition", 
+                   "equation_section", "algorithm_section", "equation", 
+                   "statement", "if_equation", "if_statement", "for_equation", 
+                   "for_statement", "for_indices", "for_index", "while_statement", 
+                   "when_equation", "when_statement", "connect_clause", 
+                   "expression", "simple_expression", "logical_expression", 
+                   "logical_term", "logical_factor", "relation", "rel_op", 
+                   "arithmetic_expression", "add_op", "term", "mul_op", 
+                   "factor", "primary", "name", "component_reference", "function_call_args", 
+                   "function_arguments", "named_arguments", "named_argument", 
+                   "function_argument", "output_expression_list", "expression_list", 
+                   "array_subscripts", "subscript_", "comment", "string_comment", 
+                   "annotation" ]
+
+    EOF = Token.EOF
+    T__0=1
+    T__1=2
+    T__2=3
+    T__3=4
+    T__4=5
+    T__5=6
+    T__6=7
+    T__7=8
+    T__8=9
+    T__9=10
+    T__10=11
+    T__11=12
+    T__12=13
+    T__13=14
+    T__14=15
+    T__15=16
+    T__16=17
+    T__17=18
+    T__18=19
+    T__19=20
+    T__20=21
+    T__21=22
+    T__22=23
+    T__23=24
+    T__24=25
+    T__25=26
+    T__26=27
+    T__27=28
+    T__28=29
+    T__29=30
+    T__30=31
+    T__31=32
+    T__32=33
+    T__33=34
+    T__34=35
+    T__35=36
+    T__36=37
+    T__37=38
+    T__38=39
+    T__39=40
+    T__40=41
+    T__41=42
+    T__42=43
+    T__43=44
+    T__44=45
+    T__45=46
+    T__46=47
+    T__47=48
+    T__48=49
+    T__49=50
+    T__50=51
+    T__51=52
+    T__52=53
+    T__53=54
+    T__54=55
+    T__55=56
+    T__56=57
+    T__57=58
+    T__58=59
+    T__59=60
+    T__60=61
+    T__61=62
+    T__62=63
+    T__63=64
+    T__64=65
+    T__65=66
+    T__66=67
+    T__67=68
+    T__68=69
+    T__69=70
+    T__70=71
+    T__71=72
+    T__72=73
+    T__73=74
+    T__74=75
+    T__75=76
+    T__76=77
+    T__77=78
+    T__78=79
+    T__79=80
+    T__80=81
+    T__81=82
+    T__82=83
+    T__83=84
+    T__84=85
+    T__85=86
+    T__86=87
+    T__87=88
+    IDENT=89
+    STRING=90
+    UNSIGNED_NUMBER=91
+    WS=92
+    COMMENT=93
+    LINE_COMMENT=94
+
+    def __init__(self, input:TokenStream, output:TextIO = sys.stdout):
+        super().__init__(input, output)
+        self.checkVersion("4.13.1")
+        self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache)
+        self._predicates = None
+
+
+
+
+    class Stored_definitionContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def EOF(self):
+            return self.getToken(modelicaParser.EOF, 0)
+
+        def class_definition(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.Class_definitionContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.Class_definitionContext,i)
+
+
+        def name(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.NameContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.NameContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_stored_definition
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterStored_definition" ):
+                listener.enterStored_definition(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitStored_definition" ):
+                listener.exitStored_definition(self)
+
+
+
+
+    def stored_definition(self):
+
+        localctx = modelicaParser.Stored_definitionContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 0, self.RULE_stored_definition)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 163
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while _la==1:
+                self.state = 156
+                self.match(modelicaParser.T__0)
+                self.state = 158
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==87 or _la==89:
+                    self.state = 157
+                    self.name()
+
+
+                self.state = 160
+                self.match(modelicaParser.T__1)
+                self.state = 165
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+            self.state = 174
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while (((_la) & ~0x3f) == 0 and ((1 << _la) & 262136) != 0):
+                self.state = 167
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==3:
+                    self.state = 166
+                    self.match(modelicaParser.T__2)
+
+
+                self.state = 169
+                self.class_definition()
+                self.state = 170
+                self.match(modelicaParser.T__1)
+                self.state = 176
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+            self.state = 177
+            self.match(modelicaParser.EOF)
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Class_definitionContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def class_prefixes(self):
+            return self.getTypedRuleContext(modelicaParser.Class_prefixesContext,0)
+
+
+        def class_specifier(self):
+            return self.getTypedRuleContext(modelicaParser.Class_specifierContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_class_definition
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterClass_definition" ):
+                listener.enterClass_definition(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitClass_definition" ):
+                listener.exitClass_definition(self)
+
+
+
+
+    def class_definition(self):
+
+        localctx = modelicaParser.Class_definitionContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 2, self.RULE_class_definition)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 180
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==4:
+                self.state = 179
+                self.match(modelicaParser.T__3)
+
+
+            self.state = 182
+            self.class_prefixes()
+            self.state = 183
+            self.class_specifier()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Class_specifierContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def long_class_specifier(self):
+            return self.getTypedRuleContext(modelicaParser.Long_class_specifierContext,0)
+
+
+        def short_class_specifier(self):
+            return self.getTypedRuleContext(modelicaParser.Short_class_specifierContext,0)
+
+
+        def der_class_specifier(self):
+            return self.getTypedRuleContext(modelicaParser.Der_class_specifierContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_class_specifier
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterClass_specifier" ):
+                listener.enterClass_specifier(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitClass_specifier" ):
+                listener.exitClass_specifier(self)
+
+
+
+
+    def class_specifier(self):
+
+        localctx = modelicaParser.Class_specifierContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 4, self.RULE_class_specifier)
+        try:
+            self.state = 188
+            self._errHandler.sync(self)
+            la_ = self._interp.adaptivePredict(self._input,5,self._ctx)
+            if la_ == 1:
+                self.enterOuterAlt(localctx, 1)
+                self.state = 185
+                self.long_class_specifier()
+                pass
+
+            elif la_ == 2:
+                self.enterOuterAlt(localctx, 2)
+                self.state = 186
+                self.short_class_specifier()
+                pass
+
+            elif la_ == 3:
+                self.enterOuterAlt(localctx, 3)
+                self.state = 187
+                self.der_class_specifier()
+                pass
+
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Class_prefixesContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_class_prefixes
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterClass_prefixes" ):
+                listener.enterClass_prefixes(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitClass_prefixes" ):
+                listener.exitClass_prefixes(self)
+
+
+
+
+    def class_prefixes(self):
+
+        localctx = modelicaParser.Class_prefixesContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 6, self.RULE_class_prefixes)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 191
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==5:
+                self.state = 190
+                self.match(modelicaParser.T__4)
+
+
+            self.state = 214
+            self._errHandler.sync(self)
+            la_ = self._interp.adaptivePredict(self._input,11,self._ctx)
+            if la_ == 1:
+                self.state = 193
+                self.match(modelicaParser.T__5)
+                pass
+
+            elif la_ == 2:
+                self.state = 194
+                self.match(modelicaParser.T__6)
+                pass
+
+            elif la_ == 3:
+                self.state = 196
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==8:
+                    self.state = 195
+                    self.match(modelicaParser.T__7)
+
+
+                self.state = 198
+                self.match(modelicaParser.T__8)
+                pass
+
+            elif la_ == 4:
+                self.state = 199
+                self.match(modelicaParser.T__9)
+                pass
+
+            elif la_ == 5:
+                self.state = 201
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==11:
+                    self.state = 200
+                    self.match(modelicaParser.T__10)
+
+
+                self.state = 203
+                self.match(modelicaParser.T__11)
+                pass
+
+            elif la_ == 6:
+                self.state = 204
+                self.match(modelicaParser.T__12)
+                pass
+
+            elif la_ == 7:
+                self.state = 205
+                self.match(modelicaParser.T__13)
+                pass
+
+            elif la_ == 8:
+                self.state = 207
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==15 or _la==16:
+                    self.state = 206
+                    _la = self._input.LA(1)
+                    if not(_la==15 or _la==16):
+                        self._errHandler.recoverInline(self)
+                    else:
+                        self._errHandler.reportMatch(self)
+                        self.consume()
+
+
+                self.state = 210
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==8:
+                    self.state = 209
+                    self.match(modelicaParser.T__7)
+
+
+                self.state = 212
+                self.match(modelicaParser.T__16)
+                pass
+
+            elif la_ == 9:
+                self.state = 213
+                self.match(modelicaParser.T__7)
+                pass
+
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Long_class_specifierContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def IDENT(self, i:int=None):
+            if i is None:
+                return self.getTokens(modelicaParser.IDENT)
+            else:
+                return self.getToken(modelicaParser.IDENT, i)
+
+        def string_comment(self):
+            return self.getTypedRuleContext(modelicaParser.String_commentContext,0)
+
+
+        def composition(self):
+            return self.getTypedRuleContext(modelicaParser.CompositionContext,0)
+
+
+        def class_modification(self):
+            return self.getTypedRuleContext(modelicaParser.Class_modificationContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_long_class_specifier
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterLong_class_specifier" ):
+                listener.enterLong_class_specifier(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitLong_class_specifier" ):
+                listener.exitLong_class_specifier(self)
+
+
+
+
+    def long_class_specifier(self):
+
+        localctx = modelicaParser.Long_class_specifierContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 8, self.RULE_long_class_specifier)
+        self._la = 0 # Token type
+        try:
+            self.state = 232
+            self._errHandler.sync(self)
+            token = self._input.LA(1)
+            if token in [89]:
+                self.enterOuterAlt(localctx, 1)
+                self.state = 216
+                self.match(modelicaParser.IDENT)
+                self.state = 217
+                self.string_comment()
+                self.state = 218
+                self.composition()
+                self.state = 219
+                self.match(modelicaParser.T__17)
+                self.state = 220
+                self.match(modelicaParser.IDENT)
+                pass
+            elif token in [19]:
+                self.enterOuterAlt(localctx, 2)
+                self.state = 222
+                self.match(modelicaParser.T__18)
+                self.state = 223
+                self.match(modelicaParser.IDENT)
+                self.state = 225
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==22:
+                    self.state = 224
+                    self.class_modification()
+
+
+                self.state = 227
+                self.string_comment()
+                self.state = 228
+                self.composition()
+                self.state = 229
+                self.match(modelicaParser.T__17)
+                self.state = 230
+                self.match(modelicaParser.IDENT)
+                pass
+            else:
+                raise NoViableAltException(self)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Short_class_specifierContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def IDENT(self):
+            return self.getToken(modelicaParser.IDENT, 0)
+
+        def base_prefix(self):
+            return self.getTypedRuleContext(modelicaParser.Base_prefixContext,0)
+
+
+        def name(self):
+            return self.getTypedRuleContext(modelicaParser.NameContext,0)
+
+
+        def comment(self):
+            return self.getTypedRuleContext(modelicaParser.CommentContext,0)
+
+
+        def array_subscripts(self):
+            return self.getTypedRuleContext(modelicaParser.Array_subscriptsContext,0)
+
+
+        def class_modification(self):
+            return self.getTypedRuleContext(modelicaParser.Class_modificationContext,0)
+
+
+        def enum_list(self):
+            return self.getTypedRuleContext(modelicaParser.Enum_listContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_short_class_specifier
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterShort_class_specifier" ):
+                listener.enterShort_class_specifier(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitShort_class_specifier" ):
+                listener.exitShort_class_specifier(self)
+
+
+
+
+    def short_class_specifier(self):
+
+        localctx = modelicaParser.Short_class_specifierContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 10, self.RULE_short_class_specifier)
+        self._la = 0 # Token type
+        try:
+            self.state = 258
+            self._errHandler.sync(self)
+            la_ = self._interp.adaptivePredict(self._input,18,self._ctx)
+            if la_ == 1:
+                self.enterOuterAlt(localctx, 1)
+                self.state = 234
+                self.match(modelicaParser.IDENT)
+                self.state = 235
+                self.match(modelicaParser.T__19)
+                self.state = 236
+                self.base_prefix()
+                self.state = 237
+                self.name()
+                self.state = 239
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==84:
+                    self.state = 238
+                    self.array_subscripts()
+
+
+                self.state = 242
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==22:
+                    self.state = 241
+                    self.class_modification()
+
+
+                self.state = 244
+                self.comment()
+                pass
+
+            elif la_ == 2:
+                self.enterOuterAlt(localctx, 2)
+                self.state = 246
+                self.match(modelicaParser.IDENT)
+                self.state = 247
+                self.match(modelicaParser.T__19)
+                self.state = 248
+                self.match(modelicaParser.T__20)
+                self.state = 249
+                self.match(modelicaParser.T__21)
+                self.state = 254
+                self._errHandler.sync(self)
+                token = self._input.LA(1)
+                if token in [24, 89]:
+                    self.state = 251
+                    self._errHandler.sync(self)
+                    _la = self._input.LA(1)
+                    if _la==89:
+                        self.state = 250
+                        self.enum_list()
+
+
+                    pass
+                elif token in [23]:
+                    self.state = 253
+                    self.match(modelicaParser.T__22)
+                    pass
+                else:
+                    raise NoViableAltException(self)
+
+                self.state = 256
+                self.match(modelicaParser.T__23)
+                self.state = 257
+                self.comment()
+                pass
+
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Der_class_specifierContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def IDENT(self, i:int=None):
+            if i is None:
+                return self.getTokens(modelicaParser.IDENT)
+            else:
+                return self.getToken(modelicaParser.IDENT, i)
+
+        def name(self):
+            return self.getTypedRuleContext(modelicaParser.NameContext,0)
+
+
+        def comment(self):
+            return self.getTypedRuleContext(modelicaParser.CommentContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_der_class_specifier
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterDer_class_specifier" ):
+                listener.enterDer_class_specifier(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitDer_class_specifier" ):
+                listener.exitDer_class_specifier(self)
+
+
+
+
+    def der_class_specifier(self):
+
+        localctx = modelicaParser.Der_class_specifierContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 12, self.RULE_der_class_specifier)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 260
+            self.match(modelicaParser.IDENT)
+            self.state = 261
+            self.match(modelicaParser.T__19)
+            self.state = 262
+            self.match(modelicaParser.T__24)
+            self.state = 263
+            self.match(modelicaParser.T__21)
+            self.state = 264
+            self.name()
+            self.state = 265
+            self.match(modelicaParser.T__25)
+            self.state = 266
+            self.match(modelicaParser.IDENT)
+            self.state = 271
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while _la==26:
+                self.state = 267
+                self.match(modelicaParser.T__25)
+                self.state = 268
+                self.match(modelicaParser.IDENT)
+                self.state = 273
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+            self.state = 274
+            self.match(modelicaParser.T__23)
+            self.state = 275
+            self.comment()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Base_prefixContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def type_prefix(self):
+            return self.getTypedRuleContext(modelicaParser.Type_prefixContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_base_prefix
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterBase_prefix" ):
+                listener.enterBase_prefix(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitBase_prefix" ):
+                listener.exitBase_prefix(self)
+
+
+
+
+    def base_prefix(self):
+
+        localctx = modelicaParser.Base_prefixContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 14, self.RULE_base_prefix)
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 277
+            self.type_prefix()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Enum_listContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def enumeration_literal(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.Enumeration_literalContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.Enumeration_literalContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_enum_list
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterEnum_list" ):
+                listener.enterEnum_list(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitEnum_list" ):
+                listener.exitEnum_list(self)
+
+
+
+
+    def enum_list(self):
+
+        localctx = modelicaParser.Enum_listContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 16, self.RULE_enum_list)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 279
+            self.enumeration_literal()
+            self.state = 284
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while _la==26:
+                self.state = 280
+                self.match(modelicaParser.T__25)
+                self.state = 281
+                self.enumeration_literal()
+                self.state = 286
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Enumeration_literalContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def IDENT(self):
+            return self.getToken(modelicaParser.IDENT, 0)
+
+        def comment(self):
+            return self.getTypedRuleContext(modelicaParser.CommentContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_enumeration_literal
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterEnumeration_literal" ):
+                listener.enterEnumeration_literal(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitEnumeration_literal" ):
+                listener.exitEnumeration_literal(self)
+
+
+
+
+    def enumeration_literal(self):
+
+        localctx = modelicaParser.Enumeration_literalContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 18, self.RULE_enumeration_literal)
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 287
+            self.match(modelicaParser.IDENT)
+            self.state = 288
+            self.comment()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class CompositionContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def element_list(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.Element_listContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.Element_listContext,i)
+
+
+        def equation_section(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.Equation_sectionContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.Equation_sectionContext,i)
+
+
+        def algorithm_section(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.Algorithm_sectionContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.Algorithm_sectionContext,i)
+
+
+        def annotation(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.AnnotationContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.AnnotationContext,i)
+
+
+        def language_specification(self):
+            return self.getTypedRuleContext(modelicaParser.Language_specificationContext,0)
+
+
+        def external_function_call(self):
+            return self.getTypedRuleContext(modelicaParser.External_function_callContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_composition
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterComposition" ):
+                listener.enterComposition(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitComposition" ):
+                listener.exitComposition(self)
+
+
+
+
+    def composition(self):
+
+        localctx = modelicaParser.CompositionContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 20, self.RULE_composition)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 290
+            self.element_list()
+            self.state = 299
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while (((_la) & ~0x3f) == 0 and ((1 << _la) & 3940650076602368) != 0):
+                self.state = 297
+                self._errHandler.sync(self)
+                la_ = self._interp.adaptivePredict(self._input,21,self._ctx)
+                if la_ == 1:
+                    self.state = 291
+                    self.match(modelicaParser.T__26)
+                    self.state = 292
+                    self.element_list()
+                    pass
+
+                elif la_ == 2:
+                    self.state = 293
+                    self.match(modelicaParser.T__27)
+                    self.state = 294
+                    self.element_list()
+                    pass
+
+                elif la_ == 3:
+                    self.state = 295
+                    self.equation_section()
+                    pass
+
+                elif la_ == 4:
+                    self.state = 296
+                    self.algorithm_section()
+                    pass
+
+
+                self.state = 301
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+            self.state = 313
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==29:
+                self.state = 302
+                self.match(modelicaParser.T__28)
+                self.state = 304
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==90:
+                    self.state = 303
+                    self.language_specification()
+
+
+                self.state = 307
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==87 or _la==89:
+                    self.state = 306
+                    self.external_function_call()
+
+
+                self.state = 310
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==88:
+                    self.state = 309
+                    self.annotation()
+
+
+                self.state = 312
+                self.match(modelicaParser.T__1)
+
+
+            self.state = 318
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==88:
+                self.state = 315
+                self.annotation()
+                self.state = 316
+                self.match(modelicaParser.T__1)
+
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Language_specificationContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def STRING(self):
+            return self.getToken(modelicaParser.STRING, 0)
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_language_specification
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterLanguage_specification" ):
+                listener.enterLanguage_specification(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitLanguage_specification" ):
+                listener.exitLanguage_specification(self)
+
+
+
+
+    def language_specification(self):
+
+        localctx = modelicaParser.Language_specificationContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 22, self.RULE_language_specification)
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 320
+            self.match(modelicaParser.STRING)
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class External_function_callContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def IDENT(self):
+            return self.getToken(modelicaParser.IDENT, 0)
+
+        def component_reference(self):
+            return self.getTypedRuleContext(modelicaParser.Component_referenceContext,0)
+
+
+        def expression_list(self):
+            return self.getTypedRuleContext(modelicaParser.Expression_listContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_external_function_call
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterExternal_function_call" ):
+                listener.enterExternal_function_call(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitExternal_function_call" ):
+                listener.exitExternal_function_call(self)
+
+
+
+
+    def external_function_call(self):
+
+        localctx = modelicaParser.External_function_callContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 24, self.RULE_external_function_call)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 325
+            self._errHandler.sync(self)
+            la_ = self._interp.adaptivePredict(self._input,28,self._ctx)
+            if la_ == 1:
+                self.state = 322
+                self.component_reference()
+                self.state = 323
+                self.match(modelicaParser.T__19)
+
+
+            self.state = 327
+            self.match(modelicaParser.IDENT)
+            self.state = 328
+            self.match(modelicaParser.T__21)
+            self.state = 330
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if (((_la) & ~0x3f) == 0 and ((1 << _la) & 633318735609856) != 0) or ((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & 62326657) != 0):
+                self.state = 329
+                self.expression_list()
+
+
+            self.state = 332
+            self.match(modelicaParser.T__23)
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Element_listContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def element(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.ElementContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.ElementContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_element_list
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterElement_list" ):
+                listener.enterElement_list(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitElement_list" ):
+                listener.exitElement_list(self)
+
+
+
+
+    def element_list(self):
+
+        localctx = modelicaParser.Element_listContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 26, self.RULE_element_list)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 339
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while (((_la) & ~0x3f) == 0 and ((1 << _la) & 69852275146744) != 0) or _la==87 or _la==89:
+                self.state = 334
+                self.element()
+                self.state = 335
+                self.match(modelicaParser.T__1)
+                self.state = 341
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class ElementContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def import_clause(self):
+            return self.getTypedRuleContext(modelicaParser.Import_clauseContext,0)
+
+
+        def extends_clause(self):
+            return self.getTypedRuleContext(modelicaParser.Extends_clauseContext,0)
+
+
+        def class_definition(self):
+            return self.getTypedRuleContext(modelicaParser.Class_definitionContext,0)
+
+
+        def component_clause(self):
+            return self.getTypedRuleContext(modelicaParser.Component_clauseContext,0)
+
+
+        def constraining_clause(self):
+            return self.getTypedRuleContext(modelicaParser.Constraining_clauseContext,0)
+
+
+        def comment(self):
+            return self.getTypedRuleContext(modelicaParser.CommentContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_element
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterElement" ):
+                listener.enterElement(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitElement" ):
+                listener.exitElement(self)
+
+
+
+
+    def element(self):
+
+        localctx = modelicaParser.ElementContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 28, self.RULE_element)
+        self._la = 0 # Token type
+        try:
+            self.state = 372
+            self._errHandler.sync(self)
+            token = self._input.LA(1)
+            if token in [34]:
+                self.enterOuterAlt(localctx, 1)
+                self.state = 342
+                self.import_clause()
+                pass
+            elif token in [19]:
+                self.enterOuterAlt(localctx, 2)
+                self.state = 343
+                self.extends_clause()
+                pass
+            elif token in [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 30, 31, 32, 33, 39, 40, 41, 42, 43, 44, 45, 87, 89]:
+                self.enterOuterAlt(localctx, 3)
+                self.state = 345
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==30:
+                    self.state = 344
+                    self.match(modelicaParser.T__29)
+
+
+                self.state = 348
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==3:
+                    self.state = 347
+                    self.match(modelicaParser.T__2)
+
+
+                self.state = 351
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==31:
+                    self.state = 350
+                    self.match(modelicaParser.T__30)
+
+
+                self.state = 354
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==32:
+                    self.state = 353
+                    self.match(modelicaParser.T__31)
+
+
+                self.state = 370
+                self._errHandler.sync(self)
+                token = self._input.LA(1)
+                if token in [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 39, 40, 41, 42, 43, 44, 45, 87, 89]:
+                    self.state = 358
+                    self._errHandler.sync(self)
+                    token = self._input.LA(1)
+                    if token in [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]:
+                        self.state = 356
+                        self.class_definition()
+                        pass
+                    elif token in [39, 40, 41, 42, 43, 44, 45, 87, 89]:
+                        self.state = 357
+                        self.component_clause()
+                        pass
+                    else:
+                        raise NoViableAltException(self)
+
+                    pass
+                elif token in [33]:
+                    self.state = 360
+                    self.match(modelicaParser.T__32)
+                    self.state = 363
+                    self._errHandler.sync(self)
+                    token = self._input.LA(1)
+                    if token in [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]:
+                        self.state = 361
+                        self.class_definition()
+                        pass
+                    elif token in [39, 40, 41, 42, 43, 44, 45, 87, 89]:
+                        self.state = 362
+                        self.component_clause()
+                        pass
+                    else:
+                        raise NoViableAltException(self)
+
+                    self.state = 368
+                    self._errHandler.sync(self)
+                    _la = self._input.LA(1)
+                    if _la==38:
+                        self.state = 365
+                        self.constraining_clause()
+                        self.state = 366
+                        self.comment()
+
+
+                    pass
+                else:
+                    raise NoViableAltException(self)
+
+                pass
+            else:
+                raise NoViableAltException(self)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Import_clauseContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def comment(self):
+            return self.getTypedRuleContext(modelicaParser.CommentContext,0)
+
+
+        def IDENT(self):
+            return self.getToken(modelicaParser.IDENT, 0)
+
+        def name(self):
+            return self.getTypedRuleContext(modelicaParser.NameContext,0)
+
+
+        def import_list(self):
+            return self.getTypedRuleContext(modelicaParser.Import_listContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_import_clause
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterImport_clause" ):
+                listener.enterImport_clause(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitImport_clause" ):
+                listener.exitImport_clause(self)
+
+
+
+
+    def import_clause(self):
+
+        localctx = modelicaParser.Import_clauseContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 30, self.RULE_import_clause)
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 374
+            self.match(modelicaParser.T__33)
+            self.state = 387
+            self._errHandler.sync(self)
+            la_ = self._interp.adaptivePredict(self._input,40,self._ctx)
+            if la_ == 1:
+                self.state = 375
+                self.match(modelicaParser.IDENT)
+                self.state = 376
+                self.match(modelicaParser.T__19)
+                self.state = 377
+                self.name()
+                pass
+
+            elif la_ == 2:
+                self.state = 378
+                self.name()
+                self.state = 379
+                self.match(modelicaParser.T__34)
+                pass
+
+            elif la_ == 3:
+                self.state = 381
+                self.name()
+                self.state = 382
+                self.match(modelicaParser.T__35)
+                self.state = 383
+                self.import_list()
+                self.state = 384
+                self.match(modelicaParser.T__36)
+                pass
+
+            elif la_ == 4:
+                self.state = 386
+                self.name()
+                pass
+
+
+            self.state = 389
+            self.comment()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Import_listContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def IDENT(self, i:int=None):
+            if i is None:
+                return self.getTokens(modelicaParser.IDENT)
+            else:
+                return self.getToken(modelicaParser.IDENT, i)
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_import_list
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterImport_list" ):
+                listener.enterImport_list(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitImport_list" ):
+                listener.exitImport_list(self)
+
+
+
+
+    def import_list(self):
+
+        localctx = modelicaParser.Import_listContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 32, self.RULE_import_list)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 391
+            self.match(modelicaParser.IDENT)
+            self.state = 396
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while _la==26:
+                self.state = 392
+                self.match(modelicaParser.T__25)
+                self.state = 393
+                self.match(modelicaParser.IDENT)
+                self.state = 398
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Extends_clauseContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def name(self):
+            return self.getTypedRuleContext(modelicaParser.NameContext,0)
+
+
+        def class_modification(self):
+            return self.getTypedRuleContext(modelicaParser.Class_modificationContext,0)
+
+
+        def annotation(self):
+            return self.getTypedRuleContext(modelicaParser.AnnotationContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_extends_clause
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterExtends_clause" ):
+                listener.enterExtends_clause(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitExtends_clause" ):
+                listener.exitExtends_clause(self)
+
+
+
+
+    def extends_clause(self):
+
+        localctx = modelicaParser.Extends_clauseContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 34, self.RULE_extends_clause)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 399
+            self.match(modelicaParser.T__18)
+            self.state = 400
+            self.name()
+            self.state = 402
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==22:
+                self.state = 401
+                self.class_modification()
+
+
+            self.state = 405
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==88:
+                self.state = 404
+                self.annotation()
+
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Constraining_clauseContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def name(self):
+            return self.getTypedRuleContext(modelicaParser.NameContext,0)
+
+
+        def class_modification(self):
+            return self.getTypedRuleContext(modelicaParser.Class_modificationContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_constraining_clause
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterConstraining_clause" ):
+                listener.enterConstraining_clause(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitConstraining_clause" ):
+                listener.exitConstraining_clause(self)
+
+
+
+
+    def constraining_clause(self):
+
+        localctx = modelicaParser.Constraining_clauseContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 36, self.RULE_constraining_clause)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 407
+            self.match(modelicaParser.T__37)
+            self.state = 408
+            self.name()
+            self.state = 410
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==22:
+                self.state = 409
+                self.class_modification()
+
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Component_clauseContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def type_prefix(self):
+            return self.getTypedRuleContext(modelicaParser.Type_prefixContext,0)
+
+
+        def type_specifier(self):
+            return self.getTypedRuleContext(modelicaParser.Type_specifierContext,0)
+
+
+        def component_list(self):
+            return self.getTypedRuleContext(modelicaParser.Component_listContext,0)
+
+
+        def array_subscripts(self):
+            return self.getTypedRuleContext(modelicaParser.Array_subscriptsContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_component_clause
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterComponent_clause" ):
+                listener.enterComponent_clause(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitComponent_clause" ):
+                listener.exitComponent_clause(self)
+
+
+
+
+    def component_clause(self):
+
+        localctx = modelicaParser.Component_clauseContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 38, self.RULE_component_clause)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 412
+            self.type_prefix()
+            self.state = 413
+            self.type_specifier()
+            self.state = 415
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==84:
+                self.state = 414
+                self.array_subscripts()
+
+
+            self.state = 417
+            self.component_list()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Type_prefixContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_type_prefix
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterType_prefix" ):
+                listener.enterType_prefix(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitType_prefix" ):
+                listener.exitType_prefix(self)
+
+
+
+
+    def type_prefix(self):
+
+        localctx = modelicaParser.Type_prefixContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 40, self.RULE_type_prefix)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 420
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==39 or _la==40:
+                self.state = 419
+                _la = self._input.LA(1)
+                if not(_la==39 or _la==40):
+                    self._errHandler.recoverInline(self)
+                else:
+                    self._errHandler.reportMatch(self)
+                    self.consume()
+
+
+            self.state = 423
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if (((_la) & ~0x3f) == 0 and ((1 << _la) & 15393162788864) != 0):
+                self.state = 422
+                _la = self._input.LA(1)
+                if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 15393162788864) != 0)):
+                    self._errHandler.recoverInline(self)
+                else:
+                    self._errHandler.reportMatch(self)
+                    self.consume()
+
+
+            self.state = 426
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==44 or _la==45:
+                self.state = 425
+                _la = self._input.LA(1)
+                if not(_la==44 or _la==45):
+                    self._errHandler.recoverInline(self)
+                else:
+                    self._errHandler.reportMatch(self)
+                    self.consume()
+
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Type_specifierContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def name(self):
+            return self.getTypedRuleContext(modelicaParser.NameContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_type_specifier
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterType_specifier" ):
+                listener.enterType_specifier(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitType_specifier" ):
+                listener.exitType_specifier(self)
+
+
+
+
+    def type_specifier(self):
+
+        localctx = modelicaParser.Type_specifierContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 42, self.RULE_type_specifier)
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 428
+            self.name()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Component_listContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def component_declaration(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.Component_declarationContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.Component_declarationContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_component_list
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterComponent_list" ):
+                listener.enterComponent_list(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitComponent_list" ):
+                listener.exitComponent_list(self)
+
+
+
+
+    def component_list(self):
+
+        localctx = modelicaParser.Component_listContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 44, self.RULE_component_list)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 430
+            self.component_declaration()
+            self.state = 435
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while _la==26:
+                self.state = 431
+                self.match(modelicaParser.T__25)
+                self.state = 432
+                self.component_declaration()
+                self.state = 437
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Component_declarationContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def declaration(self):
+            return self.getTypedRuleContext(modelicaParser.DeclarationContext,0)
+
+
+        def comment(self):
+            return self.getTypedRuleContext(modelicaParser.CommentContext,0)
+
+
+        def condition_attribute(self):
+            return self.getTypedRuleContext(modelicaParser.Condition_attributeContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_component_declaration
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterComponent_declaration" ):
+                listener.enterComponent_declaration(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitComponent_declaration" ):
+                listener.exitComponent_declaration(self)
+
+
+
+
+    def component_declaration(self):
+
+        localctx = modelicaParser.Component_declarationContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 46, self.RULE_component_declaration)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 438
+            self.declaration()
+            self.state = 440
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==46:
+                self.state = 439
+                self.condition_attribute()
+
+
+            self.state = 442
+            self.comment()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Condition_attributeContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def expression(self):
+            return self.getTypedRuleContext(modelicaParser.ExpressionContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_condition_attribute
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterCondition_attribute" ):
+                listener.enterCondition_attribute(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitCondition_attribute" ):
+                listener.exitCondition_attribute(self)
+
+
+
+
+    def condition_attribute(self):
+
+        localctx = modelicaParser.Condition_attributeContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 48, self.RULE_condition_attribute)
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 444
+            self.match(modelicaParser.T__45)
+            self.state = 445
+            self.expression()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class DeclarationContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def IDENT(self):
+            return self.getToken(modelicaParser.IDENT, 0)
+
+        def array_subscripts(self):
+            return self.getTypedRuleContext(modelicaParser.Array_subscriptsContext,0)
+
+
+        def modification(self):
+            return self.getTypedRuleContext(modelicaParser.ModificationContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_declaration
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterDeclaration" ):
+                listener.enterDeclaration(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitDeclaration" ):
+                listener.exitDeclaration(self)
+
+
+
+
+    def declaration(self):
+
+        localctx = modelicaParser.DeclarationContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 50, self.RULE_declaration)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 447
+            self.match(modelicaParser.IDENT)
+            self.state = 449
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==84:
+                self.state = 448
+                self.array_subscripts()
+
+
+            self.state = 452
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if (((_la) & ~0x3f) == 0 and ((1 << _la) & 140737493598208) != 0):
+                self.state = 451
+                self.modification()
+
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class ModificationContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def class_modification(self):
+            return self.getTypedRuleContext(modelicaParser.Class_modificationContext,0)
+
+
+        def expression(self):
+            return self.getTypedRuleContext(modelicaParser.ExpressionContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_modification
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterModification" ):
+                listener.enterModification(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitModification" ):
+                listener.exitModification(self)
+
+
+
+
+    def modification(self):
+
+        localctx = modelicaParser.ModificationContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 52, self.RULE_modification)
+        self._la = 0 # Token type
+        try:
+            self.state = 463
+            self._errHandler.sync(self)
+            token = self._input.LA(1)
+            if token in [22]:
+                self.enterOuterAlt(localctx, 1)
+                self.state = 454
+                self.class_modification()
+                self.state = 457
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==20:
+                    self.state = 455
+                    self.match(modelicaParser.T__19)
+                    self.state = 456
+                    self.expression()
+
+
+                pass
+            elif token in [20]:
+                self.enterOuterAlt(localctx, 2)
+                self.state = 459
+                self.match(modelicaParser.T__19)
+                self.state = 460
+                self.expression()
+                pass
+            elif token in [47]:
+                self.enterOuterAlt(localctx, 3)
+                self.state = 461
+                self.match(modelicaParser.T__46)
+                self.state = 462
+                self.expression()
+                pass
+            else:
+                raise NoViableAltException(self)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Class_modificationContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def argument_list(self):
+            return self.getTypedRuleContext(modelicaParser.Argument_listContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_class_modification
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterClass_modification" ):
+                listener.enterClass_modification(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitClass_modification" ):
+                listener.exitClass_modification(self)
+
+
+
+
+    def class_modification(self):
+
+        localctx = modelicaParser.Class_modificationContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 54, self.RULE_class_modification)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 465
+            self.match(modelicaParser.T__21)
+            self.state = 467
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if (((_la) & ~0x3f) == 0 and ((1 << _la) & 281484640387080) != 0) or _la==87 or _la==89:
+                self.state = 466
+                self.argument_list()
+
+
+            self.state = 469
+            self.match(modelicaParser.T__23)
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Argument_listContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def argument(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.ArgumentContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.ArgumentContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_argument_list
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterArgument_list" ):
+                listener.enterArgument_list(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitArgument_list" ):
+                listener.exitArgument_list(self)
+
+
+
+
+    def argument_list(self):
+
+        localctx = modelicaParser.Argument_listContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 56, self.RULE_argument_list)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 471
+            self.argument()
+            self.state = 476
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while _la==26:
+                self.state = 472
+                self.match(modelicaParser.T__25)
+                self.state = 473
+                self.argument()
+                self.state = 478
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class ArgumentContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def element_modification_or_replaceable(self):
+            return self.getTypedRuleContext(modelicaParser.Element_modification_or_replaceableContext,0)
+
+
+        def element_redeclaration(self):
+            return self.getTypedRuleContext(modelicaParser.Element_redeclarationContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_argument
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterArgument" ):
+                listener.enterArgument(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitArgument" ):
+                listener.exitArgument(self)
+
+
+
+
+    def argument(self):
+
+        localctx = modelicaParser.ArgumentContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 58, self.RULE_argument)
+        try:
+            self.state = 481
+            self._errHandler.sync(self)
+            token = self._input.LA(1)
+            if token in [3, 33, 48, 87, 89]:
+                self.enterOuterAlt(localctx, 1)
+                self.state = 479
+                self.element_modification_or_replaceable()
+                pass
+            elif token in [30]:
+                self.enterOuterAlt(localctx, 2)
+                self.state = 480
+                self.element_redeclaration()
+                pass
+            else:
+                raise NoViableAltException(self)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Element_modification_or_replaceableContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def element_modification(self):
+            return self.getTypedRuleContext(modelicaParser.Element_modificationContext,0)
+
+
+        def element_replaceable(self):
+            return self.getTypedRuleContext(modelicaParser.Element_replaceableContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_element_modification_or_replaceable
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterElement_modification_or_replaceable" ):
+                listener.enterElement_modification_or_replaceable(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitElement_modification_or_replaceable" ):
+                listener.exitElement_modification_or_replaceable(self)
+
+
+
+
+    def element_modification_or_replaceable(self):
+
+        localctx = modelicaParser.Element_modification_or_replaceableContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 60, self.RULE_element_modification_or_replaceable)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 484
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==48:
+                self.state = 483
+                self.match(modelicaParser.T__47)
+
+
+            self.state = 487
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==3:
+                self.state = 486
+                self.match(modelicaParser.T__2)
+
+
+            self.state = 491
+            self._errHandler.sync(self)
+            token = self._input.LA(1)
+            if token in [87, 89]:
+                self.state = 489
+                self.element_modification()
+                pass
+            elif token in [33]:
+                self.state = 490
+                self.element_replaceable()
+                pass
+            else:
+                raise NoViableAltException(self)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Element_modificationContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def name(self):
+            return self.getTypedRuleContext(modelicaParser.NameContext,0)
+
+
+        def string_comment(self):
+            return self.getTypedRuleContext(modelicaParser.String_commentContext,0)
+
+
+        def modification(self):
+            return self.getTypedRuleContext(modelicaParser.ModificationContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_element_modification
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterElement_modification" ):
+                listener.enterElement_modification(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitElement_modification" ):
+                listener.exitElement_modification(self)
+
+
+
+
+    def element_modification(self):
+
+        localctx = modelicaParser.Element_modificationContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 62, self.RULE_element_modification)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 493
+            self.name()
+            self.state = 495
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if (((_la) & ~0x3f) == 0 and ((1 << _la) & 140737493598208) != 0):
+                self.state = 494
+                self.modification()
+
+
+            self.state = 497
+            self.string_comment()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Element_redeclarationContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def element_replaceable(self):
+            return self.getTypedRuleContext(modelicaParser.Element_replaceableContext,0)
+
+
+        def short_class_definition(self):
+            return self.getTypedRuleContext(modelicaParser.Short_class_definitionContext,0)
+
+
+        def component_clause1(self):
+            return self.getTypedRuleContext(modelicaParser.Component_clause1Context,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_element_redeclaration
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterElement_redeclaration" ):
+                listener.enterElement_redeclaration(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitElement_redeclaration" ):
+                listener.exitElement_redeclaration(self)
+
+
+
+
+    def element_redeclaration(self):
+
+        localctx = modelicaParser.Element_redeclarationContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 64, self.RULE_element_redeclaration)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 499
+            self.match(modelicaParser.T__29)
+            self.state = 501
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==48:
+                self.state = 500
+                self.match(modelicaParser.T__47)
+
+
+            self.state = 504
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==3:
+                self.state = 503
+                self.match(modelicaParser.T__2)
+
+
+            self.state = 511
+            self._errHandler.sync(self)
+            token = self._input.LA(1)
+            if token in [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 39, 40, 41, 42, 43, 44, 45, 87, 89]:
+                self.state = 508
+                self._errHandler.sync(self)
+                token = self._input.LA(1)
+                if token in [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]:
+                    self.state = 506
+                    self.short_class_definition()
+                    pass
+                elif token in [39, 40, 41, 42, 43, 44, 45, 87, 89]:
+                    self.state = 507
+                    self.component_clause1()
+                    pass
+                else:
+                    raise NoViableAltException(self)
+
+                pass
+            elif token in [33]:
+                self.state = 510
+                self.element_replaceable()
+                pass
+            else:
+                raise NoViableAltException(self)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Element_replaceableContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def short_class_definition(self):
+            return self.getTypedRuleContext(modelicaParser.Short_class_definitionContext,0)
+
+
+        def component_clause1(self):
+            return self.getTypedRuleContext(modelicaParser.Component_clause1Context,0)
+
+
+        def constraining_clause(self):
+            return self.getTypedRuleContext(modelicaParser.Constraining_clauseContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_element_replaceable
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterElement_replaceable" ):
+                listener.enterElement_replaceable(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitElement_replaceable" ):
+                listener.exitElement_replaceable(self)
+
+
+
+
+    def element_replaceable(self):
+
+        localctx = modelicaParser.Element_replaceableContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 66, self.RULE_element_replaceable)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 513
+            self.match(modelicaParser.T__32)
+            self.state = 516
+            self._errHandler.sync(self)
+            token = self._input.LA(1)
+            if token in [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]:
+                self.state = 514
+                self.short_class_definition()
+                pass
+            elif token in [39, 40, 41, 42, 43, 44, 45, 87, 89]:
+                self.state = 515
+                self.component_clause1()
+                pass
+            else:
+                raise NoViableAltException(self)
+
+            self.state = 519
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==38:
+                self.state = 518
+                self.constraining_clause()
+
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Component_clause1Context(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def type_prefix(self):
+            return self.getTypedRuleContext(modelicaParser.Type_prefixContext,0)
+
+
+        def type_specifier(self):
+            return self.getTypedRuleContext(modelicaParser.Type_specifierContext,0)
+
+
+        def component_declaration1(self):
+            return self.getTypedRuleContext(modelicaParser.Component_declaration1Context,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_component_clause1
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterComponent_clause1" ):
+                listener.enterComponent_clause1(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitComponent_clause1" ):
+                listener.exitComponent_clause1(self)
+
+
+
+
+    def component_clause1(self):
+
+        localctx = modelicaParser.Component_clause1Context(self, self._ctx, self.state)
+        self.enterRule(localctx, 68, self.RULE_component_clause1)
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 521
+            self.type_prefix()
+            self.state = 522
+            self.type_specifier()
+            self.state = 523
+            self.component_declaration1()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Component_declaration1Context(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def declaration(self):
+            return self.getTypedRuleContext(modelicaParser.DeclarationContext,0)
+
+
+        def comment(self):
+            return self.getTypedRuleContext(modelicaParser.CommentContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_component_declaration1
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterComponent_declaration1" ):
+                listener.enterComponent_declaration1(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitComponent_declaration1" ):
+                listener.exitComponent_declaration1(self)
+
+
+
+
+    def component_declaration1(self):
+
+        localctx = modelicaParser.Component_declaration1Context(self, self._ctx, self.state)
+        self.enterRule(localctx, 70, self.RULE_component_declaration1)
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 525
+            self.declaration()
+            self.state = 526
+            self.comment()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Short_class_definitionContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def class_prefixes(self):
+            return self.getTypedRuleContext(modelicaParser.Class_prefixesContext,0)
+
+
+        def short_class_specifier(self):
+            return self.getTypedRuleContext(modelicaParser.Short_class_specifierContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_short_class_definition
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterShort_class_definition" ):
+                listener.enterShort_class_definition(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitShort_class_definition" ):
+                listener.exitShort_class_definition(self)
+
+
+
+
+    def short_class_definition(self):
+
+        localctx = modelicaParser.Short_class_definitionContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 72, self.RULE_short_class_definition)
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 528
+            self.class_prefixes()
+            self.state = 529
+            self.short_class_specifier()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Equation_sectionContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def equation(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.EquationContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.EquationContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_equation_section
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterEquation_section" ):
+                listener.enterEquation_section(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitEquation_section" ):
+                listener.exitEquation_section(self)
+
+
+
+
+    def equation_section(self):
+
+        localctx = modelicaParser.Equation_sectionContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 74, self.RULE_equation_section)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 532
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==49:
+                self.state = 531
+                self.match(modelicaParser.T__48)
+
+
+            self.state = 534
+            self.match(modelicaParser.T__49)
+            self.state = 540
+            self._errHandler.sync(self)
+            _alt = self._interp.adaptivePredict(self._input,69,self._ctx)
+            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
+                if _alt==1:
+                    self.state = 535
+                    self.equation()
+                    self.state = 536
+                    self.match(modelicaParser.T__1) 
+                self.state = 542
+                self._errHandler.sync(self)
+                _alt = self._interp.adaptivePredict(self._input,69,self._ctx)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Algorithm_sectionContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def statement(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.StatementContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.StatementContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_algorithm_section
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterAlgorithm_section" ):
+                listener.enterAlgorithm_section(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitAlgorithm_section" ):
+                listener.exitAlgorithm_section(self)
+
+
+
+
+    def algorithm_section(self):
+
+        localctx = modelicaParser.Algorithm_sectionContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 76, self.RULE_algorithm_section)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 544
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==49:
+                self.state = 543
+                self.match(modelicaParser.T__48)
+
+
+            self.state = 546
+            self.match(modelicaParser.T__50)
+            self.state = 552
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while (((_la) & ~0x3f) == 0 and ((1 << _la) & 3616460869526880256) != 0) or _la==87 or _la==89:
+                self.state = 547
+                self.statement()
+                self.state = 548
+                self.match(modelicaParser.T__1)
+                self.state = 554
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class EquationContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def comment(self):
+            return self.getTypedRuleContext(modelicaParser.CommentContext,0)
+
+
+        def simple_expression(self):
+            return self.getTypedRuleContext(modelicaParser.Simple_expressionContext,0)
+
+
+        def expression(self):
+            return self.getTypedRuleContext(modelicaParser.ExpressionContext,0)
+
+
+        def if_equation(self):
+            return self.getTypedRuleContext(modelicaParser.If_equationContext,0)
+
+
+        def for_equation(self):
+            return self.getTypedRuleContext(modelicaParser.For_equationContext,0)
+
+
+        def connect_clause(self):
+            return self.getTypedRuleContext(modelicaParser.Connect_clauseContext,0)
+
+
+        def when_equation(self):
+            return self.getTypedRuleContext(modelicaParser.When_equationContext,0)
+
+
+        def name(self):
+            return self.getTypedRuleContext(modelicaParser.NameContext,0)
+
+
+        def function_call_args(self):
+            return self.getTypedRuleContext(modelicaParser.Function_call_argsContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_equation
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterEquation" ):
+                listener.enterEquation(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitEquation" ):
+                listener.exitEquation(self)
+
+
+
+
+    def equation(self):
+
+        localctx = modelicaParser.EquationContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 78, self.RULE_equation)
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 566
+            self._errHandler.sync(self)
+            la_ = self._interp.adaptivePredict(self._input,72,self._ctx)
+            if la_ == 1:
+                self.state = 555
+                self.simple_expression()
+                self.state = 556
+                self.match(modelicaParser.T__19)
+                self.state = 557
+                self.expression()
+                pass
+
+            elif la_ == 2:
+                self.state = 559
+                self.if_equation()
+                pass
+
+            elif la_ == 3:
+                self.state = 560
+                self.for_equation()
+                pass
+
+            elif la_ == 4:
+                self.state = 561
+                self.connect_clause()
+                pass
+
+            elif la_ == 5:
+                self.state = 562
+                self.when_equation()
+                pass
+
+            elif la_ == 6:
+                self.state = 563
+                self.name()
+                self.state = 564
+                self.function_call_args()
+                pass
+
+
+            self.state = 568
+            self.comment()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class StatementContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def comment(self):
+            return self.getTypedRuleContext(modelicaParser.CommentContext,0)
+
+
+        def component_reference(self):
+            return self.getTypedRuleContext(modelicaParser.Component_referenceContext,0)
+
+
+        def output_expression_list(self):
+            return self.getTypedRuleContext(modelicaParser.Output_expression_listContext,0)
+
+
+        def function_call_args(self):
+            return self.getTypedRuleContext(modelicaParser.Function_call_argsContext,0)
+
+
+        def if_statement(self):
+            return self.getTypedRuleContext(modelicaParser.If_statementContext,0)
+
+
+        def for_statement(self):
+            return self.getTypedRuleContext(modelicaParser.For_statementContext,0)
+
+
+        def while_statement(self):
+            return self.getTypedRuleContext(modelicaParser.While_statementContext,0)
+
+
+        def when_statement(self):
+            return self.getTypedRuleContext(modelicaParser.When_statementContext,0)
+
+
+        def expression(self):
+            return self.getTypedRuleContext(modelicaParser.ExpressionContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_statement
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterStatement" ):
+                listener.enterStatement(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitStatement" ):
+                listener.exitStatement(self)
+
+
+
+
+    def statement(self):
+
+        localctx = modelicaParser.StatementContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 80, self.RULE_statement)
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 589
+            self._errHandler.sync(self)
+            token = self._input.LA(1)
+            if token in [87, 89]:
+                self.state = 570
+                self.component_reference()
+                self.state = 574
+                self._errHandler.sync(self)
+                token = self._input.LA(1)
+                if token in [47]:
+                    self.state = 571
+                    self.match(modelicaParser.T__46)
+                    self.state = 572
+                    self.expression()
+                    pass
+                elif token in [22]:
+                    self.state = 573
+                    self.function_call_args()
+                    pass
+                else:
+                    raise NoViableAltException(self)
+
+                pass
+            elif token in [22]:
+                self.state = 576
+                self.match(modelicaParser.T__21)
+                self.state = 577
+                self.output_expression_list()
+                self.state = 578
+                self.match(modelicaParser.T__23)
+                self.state = 579
+                self.match(modelicaParser.T__46)
+                self.state = 580
+                self.component_reference()
+                self.state = 581
+                self.function_call_args()
+                pass
+            elif token in [52]:
+                self.state = 583
+                self.match(modelicaParser.T__51)
+                pass
+            elif token in [53]:
+                self.state = 584
+                self.match(modelicaParser.T__52)
+                pass
+            elif token in [46]:
+                self.state = 585
+                self.if_statement()
+                pass
+            elif token in [57]:
+                self.state = 586
+                self.for_statement()
+                pass
+            elif token in [60]:
+                self.state = 587
+                self.while_statement()
+                pass
+            elif token in [61]:
+                self.state = 588
+                self.when_statement()
+                pass
+            else:
+                raise NoViableAltException(self)
+
+            self.state = 591
+            self.comment()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class If_equationContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def expression(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.ExpressionContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.ExpressionContext,i)
+
+
+        def equation(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.EquationContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.EquationContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_if_equation
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterIf_equation" ):
+                listener.enterIf_equation(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitIf_equation" ):
+                listener.exitIf_equation(self)
+
+
+
+
+    def if_equation(self):
+
+        localctx = modelicaParser.If_equationContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 82, self.RULE_if_equation)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 593
+            self.match(modelicaParser.T__45)
+            self.state = 594
+            self.expression()
+            self.state = 595
+            self.match(modelicaParser.T__53)
+            self.state = 601
+            self._errHandler.sync(self)
+            _alt = self._interp.adaptivePredict(self._input,75,self._ctx)
+            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
+                if _alt==1:
+                    self.state = 596
+                    self.equation()
+                    self.state = 597
+                    self.match(modelicaParser.T__1) 
+                self.state = 603
+                self._errHandler.sync(self)
+                _alt = self._interp.adaptivePredict(self._input,75,self._ctx)
+
+            self.state = 617
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while _la==55:
+                self.state = 604
+                self.match(modelicaParser.T__54)
+                self.state = 605
+                self.expression()
+                self.state = 606
+                self.match(modelicaParser.T__53)
+                self.state = 612
+                self._errHandler.sync(self)
+                _alt = self._interp.adaptivePredict(self._input,76,self._ctx)
+                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
+                    if _alt==1:
+                        self.state = 607
+                        self.equation()
+                        self.state = 608
+                        self.match(modelicaParser.T__1) 
+                    self.state = 614
+                    self._errHandler.sync(self)
+                    _alt = self._interp.adaptivePredict(self._input,76,self._ctx)
+
+                self.state = 619
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+            self.state = 629
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==56:
+                self.state = 620
+                self.match(modelicaParser.T__55)
+                self.state = 626
+                self._errHandler.sync(self)
+                _alt = self._interp.adaptivePredict(self._input,78,self._ctx)
+                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
+                    if _alt==1:
+                        self.state = 621
+                        self.equation()
+                        self.state = 622
+                        self.match(modelicaParser.T__1) 
+                    self.state = 628
+                    self._errHandler.sync(self)
+                    _alt = self._interp.adaptivePredict(self._input,78,self._ctx)
+
+
+
+            self.state = 631
+            self.match(modelicaParser.T__17)
+            self.state = 632
+            self.match(modelicaParser.T__45)
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class If_statementContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def expression(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.ExpressionContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.ExpressionContext,i)
+
+
+        def statement(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.StatementContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.StatementContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_if_statement
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterIf_statement" ):
+                listener.enterIf_statement(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitIf_statement" ):
+                listener.exitIf_statement(self)
+
+
+
+
+    def if_statement(self):
+
+        localctx = modelicaParser.If_statementContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 84, self.RULE_if_statement)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 634
+            self.match(modelicaParser.T__45)
+            self.state = 635
+            self.expression()
+            self.state = 636
+            self.match(modelicaParser.T__53)
+            self.state = 642
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while (((_la) & ~0x3f) == 0 and ((1 << _la) & 3616460869526880256) != 0) or _la==87 or _la==89:
+                self.state = 637
+                self.statement()
+                self.state = 638
+                self.match(modelicaParser.T__1)
+                self.state = 644
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+            self.state = 658
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while _la==55:
+                self.state = 645
+                self.match(modelicaParser.T__54)
+                self.state = 646
+                self.expression()
+                self.state = 647
+                self.match(modelicaParser.T__53)
+                self.state = 653
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                while (((_la) & ~0x3f) == 0 and ((1 << _la) & 3616460869526880256) != 0) or _la==87 or _la==89:
+                    self.state = 648
+                    self.statement()
+                    self.state = 649
+                    self.match(modelicaParser.T__1)
+                    self.state = 655
+                    self._errHandler.sync(self)
+                    _la = self._input.LA(1)
+
+                self.state = 660
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+            self.state = 670
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==56:
+                self.state = 661
+                self.match(modelicaParser.T__55)
+                self.state = 667
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                while (((_la) & ~0x3f) == 0 and ((1 << _la) & 3616460869526880256) != 0) or _la==87 or _la==89:
+                    self.state = 662
+                    self.statement()
+                    self.state = 663
+                    self.match(modelicaParser.T__1)
+                    self.state = 669
+                    self._errHandler.sync(self)
+                    _la = self._input.LA(1)
+
+
+
+            self.state = 672
+            self.match(modelicaParser.T__17)
+            self.state = 673
+            self.match(modelicaParser.T__45)
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class For_equationContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def for_indices(self):
+            return self.getTypedRuleContext(modelicaParser.For_indicesContext,0)
+
+
+        def equation(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.EquationContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.EquationContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_for_equation
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterFor_equation" ):
+                listener.enterFor_equation(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitFor_equation" ):
+                listener.exitFor_equation(self)
+
+
+
+
+    def for_equation(self):
+
+        localctx = modelicaParser.For_equationContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 86, self.RULE_for_equation)
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 675
+            self.match(modelicaParser.T__56)
+            self.state = 676
+            self.for_indices()
+            self.state = 677
+            self.match(modelicaParser.T__57)
+            self.state = 683
+            self._errHandler.sync(self)
+            _alt = self._interp.adaptivePredict(self._input,85,self._ctx)
+            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
+                if _alt==1:
+                    self.state = 678
+                    self.equation()
+                    self.state = 679
+                    self.match(modelicaParser.T__1) 
+                self.state = 685
+                self._errHandler.sync(self)
+                _alt = self._interp.adaptivePredict(self._input,85,self._ctx)
+
+            self.state = 686
+            self.match(modelicaParser.T__17)
+            self.state = 687
+            self.match(modelicaParser.T__56)
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class For_statementContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def for_indices(self):
+            return self.getTypedRuleContext(modelicaParser.For_indicesContext,0)
+
+
+        def statement(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.StatementContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.StatementContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_for_statement
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterFor_statement" ):
+                listener.enterFor_statement(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitFor_statement" ):
+                listener.exitFor_statement(self)
+
+
+
+
+    def for_statement(self):
+
+        localctx = modelicaParser.For_statementContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 88, self.RULE_for_statement)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 689
+            self.match(modelicaParser.T__56)
+            self.state = 690
+            self.for_indices()
+            self.state = 691
+            self.match(modelicaParser.T__57)
+            self.state = 697
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while (((_la) & ~0x3f) == 0 and ((1 << _la) & 3616460869526880256) != 0) or _la==87 or _la==89:
+                self.state = 692
+                self.statement()
+                self.state = 693
+                self.match(modelicaParser.T__1)
+                self.state = 699
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+            self.state = 700
+            self.match(modelicaParser.T__17)
+            self.state = 701
+            self.match(modelicaParser.T__56)
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class For_indicesContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def for_index(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.For_indexContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.For_indexContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_for_indices
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterFor_indices" ):
+                listener.enterFor_indices(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitFor_indices" ):
+                listener.exitFor_indices(self)
+
+
+
+
+    def for_indices(self):
+
+        localctx = modelicaParser.For_indicesContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 90, self.RULE_for_indices)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 703
+            self.for_index()
+            self.state = 708
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while _la==26:
+                self.state = 704
+                self.match(modelicaParser.T__25)
+                self.state = 705
+                self.for_index()
+                self.state = 710
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class For_indexContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def IDENT(self):
+            return self.getToken(modelicaParser.IDENT, 0)
+
+        def expression(self):
+            return self.getTypedRuleContext(modelicaParser.ExpressionContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_for_index
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterFor_index" ):
+                listener.enterFor_index(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitFor_index" ):
+                listener.exitFor_index(self)
+
+
+
+
+    def for_index(self):
+
+        localctx = modelicaParser.For_indexContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 92, self.RULE_for_index)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 711
+            self.match(modelicaParser.IDENT)
+            self.state = 714
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==59:
+                self.state = 712
+                self.match(modelicaParser.T__58)
+                self.state = 713
+                self.expression()
+
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class While_statementContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def expression(self):
+            return self.getTypedRuleContext(modelicaParser.ExpressionContext,0)
+
+
+        def statement(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.StatementContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.StatementContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_while_statement
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterWhile_statement" ):
+                listener.enterWhile_statement(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitWhile_statement" ):
+                listener.exitWhile_statement(self)
+
+
+
+
+    def while_statement(self):
+
+        localctx = modelicaParser.While_statementContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 94, self.RULE_while_statement)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 716
+            self.match(modelicaParser.T__59)
+            self.state = 717
+            self.expression()
+            self.state = 718
+            self.match(modelicaParser.T__57)
+            self.state = 724
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while (((_la) & ~0x3f) == 0 and ((1 << _la) & 3616460869526880256) != 0) or _la==87 or _la==89:
+                self.state = 719
+                self.statement()
+                self.state = 720
+                self.match(modelicaParser.T__1)
+                self.state = 726
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+            self.state = 727
+            self.match(modelicaParser.T__17)
+            self.state = 728
+            self.match(modelicaParser.T__59)
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class When_equationContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def expression(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.ExpressionContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.ExpressionContext,i)
+
+
+        def equation(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.EquationContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.EquationContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_when_equation
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterWhen_equation" ):
+                listener.enterWhen_equation(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitWhen_equation" ):
+                listener.exitWhen_equation(self)
+
+
+
+
+    def when_equation(self):
+
+        localctx = modelicaParser.When_equationContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 96, self.RULE_when_equation)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 730
+            self.match(modelicaParser.T__60)
+            self.state = 731
+            self.expression()
+            self.state = 732
+            self.match(modelicaParser.T__53)
+            self.state = 738
+            self._errHandler.sync(self)
+            _alt = self._interp.adaptivePredict(self._input,90,self._ctx)
+            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
+                if _alt==1:
+                    self.state = 733
+                    self.equation()
+                    self.state = 734
+                    self.match(modelicaParser.T__1) 
+                self.state = 740
+                self._errHandler.sync(self)
+                _alt = self._interp.adaptivePredict(self._input,90,self._ctx)
+
+            self.state = 754
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while _la==62:
+                self.state = 741
+                self.match(modelicaParser.T__61)
+                self.state = 742
+                self.expression()
+                self.state = 743
+                self.match(modelicaParser.T__53)
+                self.state = 749
+                self._errHandler.sync(self)
+                _alt = self._interp.adaptivePredict(self._input,91,self._ctx)
+                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
+                    if _alt==1:
+                        self.state = 744
+                        self.equation()
+                        self.state = 745
+                        self.match(modelicaParser.T__1) 
+                    self.state = 751
+                    self._errHandler.sync(self)
+                    _alt = self._interp.adaptivePredict(self._input,91,self._ctx)
+
+                self.state = 756
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+            self.state = 757
+            self.match(modelicaParser.T__17)
+            self.state = 758
+            self.match(modelicaParser.T__60)
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class When_statementContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def expression(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.ExpressionContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.ExpressionContext,i)
+
+
+        def statement(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.StatementContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.StatementContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_when_statement
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterWhen_statement" ):
+                listener.enterWhen_statement(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitWhen_statement" ):
+                listener.exitWhen_statement(self)
+
+
+
+
+    def when_statement(self):
+
+        localctx = modelicaParser.When_statementContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 98, self.RULE_when_statement)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 760
+            self.match(modelicaParser.T__60)
+            self.state = 761
+            self.expression()
+            self.state = 762
+            self.match(modelicaParser.T__53)
+            self.state = 768
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while (((_la) & ~0x3f) == 0 and ((1 << _la) & 3616460869526880256) != 0) or _la==87 or _la==89:
+                self.state = 763
+                self.statement()
+                self.state = 764
+                self.match(modelicaParser.T__1)
+                self.state = 770
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+            self.state = 784
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while _la==62:
+                self.state = 771
+                self.match(modelicaParser.T__61)
+                self.state = 772
+                self.expression()
+                self.state = 773
+                self.match(modelicaParser.T__53)
+                self.state = 779
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                while (((_la) & ~0x3f) == 0 and ((1 << _la) & 3616460869526880256) != 0) or _la==87 or _la==89:
+                    self.state = 774
+                    self.statement()
+                    self.state = 775
+                    self.match(modelicaParser.T__1)
+                    self.state = 781
+                    self._errHandler.sync(self)
+                    _la = self._input.LA(1)
+
+                self.state = 786
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+            self.state = 787
+            self.match(modelicaParser.T__17)
+            self.state = 788
+            self.match(modelicaParser.T__60)
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Connect_clauseContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def component_reference(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.Component_referenceContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.Component_referenceContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_connect_clause
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterConnect_clause" ):
+                listener.enterConnect_clause(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitConnect_clause" ):
+                listener.exitConnect_clause(self)
+
+
+
+
+    def connect_clause(self):
+
+        localctx = modelicaParser.Connect_clauseContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 100, self.RULE_connect_clause)
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 790
+            self.match(modelicaParser.T__62)
+            self.state = 791
+            self.match(modelicaParser.T__21)
+            self.state = 792
+            self.component_reference()
+            self.state = 793
+            self.match(modelicaParser.T__25)
+            self.state = 794
+            self.component_reference()
+            self.state = 795
+            self.match(modelicaParser.T__23)
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class ExpressionContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def simple_expression(self):
+            return self.getTypedRuleContext(modelicaParser.Simple_expressionContext,0)
+
+
+        def expression(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.ExpressionContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.ExpressionContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_expression
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterExpression" ):
+                listener.enterExpression(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitExpression" ):
+                listener.exitExpression(self)
+
+
+
+
+    def expression(self):
+
+        localctx = modelicaParser.ExpressionContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 102, self.RULE_expression)
+        self._la = 0 # Token type
+        try:
+            self.state = 815
+            self._errHandler.sync(self)
+            token = self._input.LA(1)
+            if token in [18, 22, 25, 49, 66, 73, 74, 75, 76, 82, 83, 84, 86, 87, 89, 90, 91]:
+                self.enterOuterAlt(localctx, 1)
+                self.state = 797
+                self.simple_expression()
+                pass
+            elif token in [46]:
+                self.enterOuterAlt(localctx, 2)
+                self.state = 798
+                self.match(modelicaParser.T__45)
+                self.state = 799
+                self.expression()
+                self.state = 800
+                self.match(modelicaParser.T__53)
+                self.state = 801
+                self.expression()
+                self.state = 809
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                while _la==55:
+                    self.state = 802
+                    self.match(modelicaParser.T__54)
+                    self.state = 803
+                    self.expression()
+                    self.state = 804
+                    self.match(modelicaParser.T__53)
+                    self.state = 805
+                    self.expression()
+                    self.state = 811
+                    self._errHandler.sync(self)
+                    _la = self._input.LA(1)
+
+                self.state = 812
+                self.match(modelicaParser.T__55)
+                self.state = 813
+                self.expression()
+                pass
+            else:
+                raise NoViableAltException(self)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Simple_expressionContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def logical_expression(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.Logical_expressionContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.Logical_expressionContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_simple_expression
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterSimple_expression" ):
+                listener.enterSimple_expression(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitSimple_expression" ):
+                listener.exitSimple_expression(self)
+
+
+
+
+    def simple_expression(self):
+
+        localctx = modelicaParser.Simple_expressionContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 104, self.RULE_simple_expression)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 817
+            self.logical_expression()
+            self.state = 824
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==23:
+                self.state = 818
+                self.match(modelicaParser.T__22)
+                self.state = 819
+                self.logical_expression()
+                self.state = 822
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==23:
+                    self.state = 820
+                    self.match(modelicaParser.T__22)
+                    self.state = 821
+                    self.logical_expression()
+
+
+
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Logical_expressionContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def logical_term(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.Logical_termContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.Logical_termContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_logical_expression
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterLogical_expression" ):
+                listener.enterLogical_expression(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitLogical_expression" ):
+                listener.exitLogical_expression(self)
+
+
+
+
+    def logical_expression(self):
+
+        localctx = modelicaParser.Logical_expressionContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 106, self.RULE_logical_expression)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 826
+            self.logical_term()
+            self.state = 831
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while _la==64:
+                self.state = 827
+                self.match(modelicaParser.T__63)
+                self.state = 828
+                self.logical_term()
+                self.state = 833
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Logical_termContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def logical_factor(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.Logical_factorContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.Logical_factorContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_logical_term
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterLogical_term" ):
+                listener.enterLogical_term(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitLogical_term" ):
+                listener.exitLogical_term(self)
+
+
+
+
+    def logical_term(self):
+
+        localctx = modelicaParser.Logical_termContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 108, self.RULE_logical_term)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 834
+            self.logical_factor()
+            self.state = 839
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while _la==65:
+                self.state = 835
+                self.match(modelicaParser.T__64)
+                self.state = 836
+                self.logical_factor()
+                self.state = 841
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Logical_factorContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def relation(self):
+            return self.getTypedRuleContext(modelicaParser.RelationContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_logical_factor
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterLogical_factor" ):
+                listener.enterLogical_factor(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitLogical_factor" ):
+                listener.exitLogical_factor(self)
+
+
+
+
+    def logical_factor(self):
+
+        localctx = modelicaParser.Logical_factorContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 110, self.RULE_logical_factor)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 843
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==66:
+                self.state = 842
+                self.match(modelicaParser.T__65)
+
+
+            self.state = 845
+            self.relation()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class RelationContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def arithmetic_expression(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.Arithmetic_expressionContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.Arithmetic_expressionContext,i)
+
+
+        def rel_op(self):
+            return self.getTypedRuleContext(modelicaParser.Rel_opContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_relation
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterRelation" ):
+                listener.enterRelation(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitRelation" ):
+                listener.exitRelation(self)
+
+
+
+
+    def relation(self):
+
+        localctx = modelicaParser.RelationContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 112, self.RULE_relation)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 847
+            self.arithmetic_expression()
+            self.state = 851
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if ((((_la - 67)) & ~0x3f) == 0 and ((1 << (_la - 67)) & 63) != 0):
+                self.state = 848
+                self.rel_op()
+                self.state = 849
+                self.arithmetic_expression()
+
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Rel_opContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_rel_op
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterRel_op" ):
+                listener.enterRel_op(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitRel_op" ):
+                listener.exitRel_op(self)
+
+
+
+
+    def rel_op(self):
+
+        localctx = modelicaParser.Rel_opContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 114, self.RULE_rel_op)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 853
+            _la = self._input.LA(1)
+            if not(((((_la - 67)) & ~0x3f) == 0 and ((1 << (_la - 67)) & 63) != 0)):
+                self._errHandler.recoverInline(self)
+            else:
+                self._errHandler.reportMatch(self)
+                self.consume()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Arithmetic_expressionContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def term(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.TermContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.TermContext,i)
+
+
+        def add_op(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.Add_opContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.Add_opContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_arithmetic_expression
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterArithmetic_expression" ):
+                listener.enterArithmetic_expression(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitArithmetic_expression" ):
+                listener.exitArithmetic_expression(self)
+
+
+
+
+    def arithmetic_expression(self):
+
+        localctx = modelicaParser.Arithmetic_expressionContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 116, self.RULE_arithmetic_expression)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 856
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 15) != 0):
+                self.state = 855
+                self.add_op()
+
+
+            self.state = 858
+            self.term()
+            self.state = 864
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 15) != 0):
+                self.state = 859
+                self.add_op()
+                self.state = 860
+                self.term()
+                self.state = 866
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Add_opContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_add_op
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterAdd_op" ):
+                listener.enterAdd_op(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitAdd_op" ):
+                listener.exitAdd_op(self)
+
+
+
+
+    def add_op(self):
+
+        localctx = modelicaParser.Add_opContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 118, self.RULE_add_op)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 867
+            _la = self._input.LA(1)
+            if not(((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 15) != 0)):
+                self._errHandler.recoverInline(self)
+            else:
+                self._errHandler.reportMatch(self)
+                self.consume()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class TermContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def factor(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.FactorContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.FactorContext,i)
+
+
+        def mul_op(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.Mul_opContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.Mul_opContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_term
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterTerm" ):
+                listener.enterTerm(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitTerm" ):
+                listener.exitTerm(self)
+
+
+
+
+    def term(self):
+
+        localctx = modelicaParser.TermContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 120, self.RULE_term)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 869
+            self.factor()
+            self.state = 875
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while ((((_la - 35)) & ~0x3f) == 0 and ((1 << (_la - 35)) & 30786325577729) != 0):
+                self.state = 870
+                self.mul_op()
+                self.state = 871
+                self.factor()
+                self.state = 877
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Mul_opContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_mul_op
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterMul_op" ):
+                listener.enterMul_op(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitMul_op" ):
+                listener.exitMul_op(self)
+
+
+
+
+    def mul_op(self):
+
+        localctx = modelicaParser.Mul_opContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 122, self.RULE_mul_op)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 878
+            _la = self._input.LA(1)
+            if not(((((_la - 35)) & ~0x3f) == 0 and ((1 << (_la - 35)) & 30786325577729) != 0)):
+                self._errHandler.recoverInline(self)
+            else:
+                self._errHandler.reportMatch(self)
+                self.consume()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class FactorContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def primary(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.PrimaryContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.PrimaryContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_factor
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterFactor" ):
+                listener.enterFactor(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitFactor" ):
+                listener.exitFactor(self)
+
+
+
+
+    def factor(self):
+
+        localctx = modelicaParser.FactorContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 124, self.RULE_factor)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 880
+            self.primary()
+            self.state = 883
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==80 or _la==81:
+                self.state = 881
+                _la = self._input.LA(1)
+                if not(_la==80 or _la==81):
+                    self._errHandler.recoverInline(self)
+                else:
+                    self._errHandler.reportMatch(self)
+                    self.consume()
+                self.state = 882
+                self.primary()
+
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class PrimaryContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def UNSIGNED_NUMBER(self):
+            return self.getToken(modelicaParser.UNSIGNED_NUMBER, 0)
+
+        def STRING(self):
+            return self.getToken(modelicaParser.STRING, 0)
+
+        def function_call_args(self):
+            return self.getTypedRuleContext(modelicaParser.Function_call_argsContext,0)
+
+
+        def name(self):
+            return self.getTypedRuleContext(modelicaParser.NameContext,0)
+
+
+        def component_reference(self):
+            return self.getTypedRuleContext(modelicaParser.Component_referenceContext,0)
+
+
+        def output_expression_list(self):
+            return self.getTypedRuleContext(modelicaParser.Output_expression_listContext,0)
+
+
+        def expression_list(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.Expression_listContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.Expression_listContext,i)
+
+
+        def function_arguments(self):
+            return self.getTypedRuleContext(modelicaParser.Function_argumentsContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_primary
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterPrimary" ):
+                listener.enterPrimary(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitPrimary" ):
+                listener.exitPrimary(self)
+
+
+
+
+    def primary(self):
+
+        localctx = modelicaParser.PrimaryContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 126, self.RULE_primary)
+        self._la = 0 # Token type
+        try:
+            self.state = 916
+            self._errHandler.sync(self)
+            la_ = self._interp.adaptivePredict(self._input,110,self._ctx)
+            if la_ == 1:
+                self.enterOuterAlt(localctx, 1)
+                self.state = 885
+                self.match(modelicaParser.UNSIGNED_NUMBER)
+                pass
+
+            elif la_ == 2:
+                self.enterOuterAlt(localctx, 2)
+                self.state = 886
+                self.match(modelicaParser.STRING)
+                pass
+
+            elif la_ == 3:
+                self.enterOuterAlt(localctx, 3)
+                self.state = 887
+                self.match(modelicaParser.T__81)
+                pass
+
+            elif la_ == 4:
+                self.enterOuterAlt(localctx, 4)
+                self.state = 888
+                self.match(modelicaParser.T__82)
+                pass
+
+            elif la_ == 5:
+                self.enterOuterAlt(localctx, 5)
+                self.state = 892
+                self._errHandler.sync(self)
+                token = self._input.LA(1)
+                if token in [87, 89]:
+                    self.state = 889
+                    self.name()
+                    pass
+                elif token in [25]:
+                    self.state = 890
+                    self.match(modelicaParser.T__24)
+                    pass
+                elif token in [49]:
+                    self.state = 891
+                    self.match(modelicaParser.T__48)
+                    pass
+                else:
+                    raise NoViableAltException(self)
+
+                self.state = 894
+                self.function_call_args()
+                pass
+
+            elif la_ == 6:
+                self.enterOuterAlt(localctx, 6)
+                self.state = 895
+                self.component_reference()
+                pass
+
+            elif la_ == 7:
+                self.enterOuterAlt(localctx, 7)
+                self.state = 896
+                self.match(modelicaParser.T__21)
+                self.state = 897
+                self.output_expression_list()
+                self.state = 898
+                self.match(modelicaParser.T__23)
+                pass
+
+            elif la_ == 8:
+                self.enterOuterAlt(localctx, 8)
+                self.state = 900
+                self.match(modelicaParser.T__83)
+                self.state = 901
+                self.expression_list()
+                self.state = 906
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                while _la==2:
+                    self.state = 902
+                    self.match(modelicaParser.T__1)
+                    self.state = 903
+                    self.expression_list()
+                    self.state = 908
+                    self._errHandler.sync(self)
+                    _la = self._input.LA(1)
+
+                self.state = 909
+                self.match(modelicaParser.T__84)
+                pass
+
+            elif la_ == 9:
+                self.enterOuterAlt(localctx, 9)
+                self.state = 911
+                self.match(modelicaParser.T__85)
+                self.state = 912
+                self.function_arguments()
+                self.state = 913
+                self.match(modelicaParser.T__36)
+                pass
+
+            elif la_ == 10:
+                self.enterOuterAlt(localctx, 10)
+                self.state = 915
+                self.match(modelicaParser.T__17)
+                pass
+
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class NameContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def IDENT(self, i:int=None):
+            if i is None:
+                return self.getTokens(modelicaParser.IDENT)
+            else:
+                return self.getToken(modelicaParser.IDENT, i)
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_name
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterName" ):
+                listener.enterName(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitName" ):
+                listener.exitName(self)
+
+
+
+
+    def name(self):
+
+        localctx = modelicaParser.NameContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 128, self.RULE_name)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 919
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==87:
+                self.state = 918
+                self.match(modelicaParser.T__86)
+
+
+            self.state = 921
+            self.match(modelicaParser.IDENT)
+            self.state = 926
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while _la==87:
+                self.state = 922
+                self.match(modelicaParser.T__86)
+                self.state = 923
+                self.match(modelicaParser.IDENT)
+                self.state = 928
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Component_referenceContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def IDENT(self, i:int=None):
+            if i is None:
+                return self.getTokens(modelicaParser.IDENT)
+            else:
+                return self.getToken(modelicaParser.IDENT, i)
+
+        def array_subscripts(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.Array_subscriptsContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.Array_subscriptsContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_component_reference
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterComponent_reference" ):
+                listener.enterComponent_reference(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitComponent_reference" ):
+                listener.exitComponent_reference(self)
+
+
+
+
+    def component_reference(self):
+
+        localctx = modelicaParser.Component_referenceContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 130, self.RULE_component_reference)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 930
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==87:
+                self.state = 929
+                self.match(modelicaParser.T__86)
+
+
+            self.state = 932
+            self.match(modelicaParser.IDENT)
+            self.state = 934
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==84:
+                self.state = 933
+                self.array_subscripts()
+
+
+            self.state = 943
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while _la==87:
+                self.state = 936
+                self.match(modelicaParser.T__86)
+                self.state = 937
+                self.match(modelicaParser.IDENT)
+                self.state = 939
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==84:
+                    self.state = 938
+                    self.array_subscripts()
+
+
+                self.state = 945
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Function_call_argsContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def function_arguments(self):
+            return self.getTypedRuleContext(modelicaParser.Function_argumentsContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_function_call_args
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterFunction_call_args" ):
+                listener.enterFunction_call_args(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitFunction_call_args" ):
+                listener.exitFunction_call_args(self)
+
+
+
+
+    def function_call_args(self):
+
+        localctx = modelicaParser.Function_call_argsContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 132, self.RULE_function_call_args)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 946
+            self.match(modelicaParser.T__21)
+            self.state = 948
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if (((_la) & ~0x3f) == 0 and ((1 << _la) & 633318735740928) != 0) or ((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & 62326657) != 0):
+                self.state = 947
+                self.function_arguments()
+
+
+            self.state = 950
+            self.match(modelicaParser.T__23)
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Function_argumentsContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def function_argument(self):
+            return self.getTypedRuleContext(modelicaParser.Function_argumentContext,0)
+
+
+        def function_arguments(self):
+            return self.getTypedRuleContext(modelicaParser.Function_argumentsContext,0)
+
+
+        def for_indices(self):
+            return self.getTypedRuleContext(modelicaParser.For_indicesContext,0)
+
+
+        def named_arguments(self):
+            return self.getTypedRuleContext(modelicaParser.Named_argumentsContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_function_arguments
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterFunction_arguments" ):
+                listener.enterFunction_arguments(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitFunction_arguments" ):
+                listener.exitFunction_arguments(self)
+
+
+
+
+    def function_arguments(self):
+
+        localctx = modelicaParser.Function_argumentsContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 134, self.RULE_function_arguments)
+        try:
+            self.state = 960
+            self._errHandler.sync(self)
+            la_ = self._interp.adaptivePredict(self._input,119,self._ctx)
+            if la_ == 1:
+                self.enterOuterAlt(localctx, 1)
+                self.state = 952
+                self.function_argument()
+                self.state = 957
+                self._errHandler.sync(self)
+                token = self._input.LA(1)
+                if token in [26]:
+                    self.state = 953
+                    self.match(modelicaParser.T__25)
+                    self.state = 954
+                    self.function_arguments()
+                    pass
+                elif token in [57]:
+                    self.state = 955
+                    self.match(modelicaParser.T__56)
+                    self.state = 956
+                    self.for_indices()
+                    pass
+                elif token in [24, 37]:
+                    pass
+                else:
+                    pass
+                pass
+
+            elif la_ == 2:
+                self.enterOuterAlt(localctx, 2)
+                self.state = 959
+                self.named_arguments()
+                pass
+
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Named_argumentsContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def named_argument(self):
+            return self.getTypedRuleContext(modelicaParser.Named_argumentContext,0)
+
+
+        def named_arguments(self):
+            return self.getTypedRuleContext(modelicaParser.Named_argumentsContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_named_arguments
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterNamed_arguments" ):
+                listener.enterNamed_arguments(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitNamed_arguments" ):
+                listener.exitNamed_arguments(self)
+
+
+
+
+    def named_arguments(self):
+
+        localctx = modelicaParser.Named_argumentsContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 136, self.RULE_named_arguments)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 962
+            self.named_argument()
+            self.state = 965
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==26:
+                self.state = 963
+                self.match(modelicaParser.T__25)
+                self.state = 964
+                self.named_arguments()
+
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Named_argumentContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def IDENT(self):
+            return self.getToken(modelicaParser.IDENT, 0)
+
+        def function_argument(self):
+            return self.getTypedRuleContext(modelicaParser.Function_argumentContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_named_argument
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterNamed_argument" ):
+                listener.enterNamed_argument(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitNamed_argument" ):
+                listener.exitNamed_argument(self)
+
+
+
+
+    def named_argument(self):
+
+        localctx = modelicaParser.Named_argumentContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 138, self.RULE_named_argument)
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 967
+            self.match(modelicaParser.IDENT)
+            self.state = 968
+            self.match(modelicaParser.T__19)
+            self.state = 969
+            self.function_argument()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Function_argumentContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def name(self):
+            return self.getTypedRuleContext(modelicaParser.NameContext,0)
+
+
+        def named_arguments(self):
+            return self.getTypedRuleContext(modelicaParser.Named_argumentsContext,0)
+
+
+        def expression(self):
+            return self.getTypedRuleContext(modelicaParser.ExpressionContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_function_argument
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterFunction_argument" ):
+                listener.enterFunction_argument(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitFunction_argument" ):
+                listener.exitFunction_argument(self)
+
+
+
+
+    def function_argument(self):
+
+        localctx = modelicaParser.Function_argumentContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 140, self.RULE_function_argument)
+        self._la = 0 # Token type
+        try:
+            self.state = 980
+            self._errHandler.sync(self)
+            token = self._input.LA(1)
+            if token in [17]:
+                self.enterOuterAlt(localctx, 1)
+                self.state = 971
+                self.match(modelicaParser.T__16)
+                self.state = 972
+                self.name()
+                self.state = 973
+                self.match(modelicaParser.T__21)
+                self.state = 975
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if _la==89:
+                    self.state = 974
+                    self.named_arguments()
+
+
+                self.state = 977
+                self.match(modelicaParser.T__23)
+                pass
+            elif token in [18, 22, 25, 46, 49, 66, 73, 74, 75, 76, 82, 83, 84, 86, 87, 89, 90, 91]:
+                self.enterOuterAlt(localctx, 2)
+                self.state = 979
+                self.expression()
+                pass
+            else:
+                raise NoViableAltException(self)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Output_expression_listContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def expression(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.ExpressionContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.ExpressionContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_output_expression_list
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterOutput_expression_list" ):
+                listener.enterOutput_expression_list(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitOutput_expression_list" ):
+                listener.exitOutput_expression_list(self)
+
+
+
+
+    def output_expression_list(self):
+
+        localctx = modelicaParser.Output_expression_listContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 142, self.RULE_output_expression_list)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 983
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if (((_la) & ~0x3f) == 0 and ((1 << _la) & 633318735609856) != 0) or ((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & 62326657) != 0):
+                self.state = 982
+                self.expression()
+
+
+            self.state = 991
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while _la==26:
+                self.state = 985
+                self.match(modelicaParser.T__25)
+                self.state = 987
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                if (((_la) & ~0x3f) == 0 and ((1 << _la) & 633318735609856) != 0) or ((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & 62326657) != 0):
+                    self.state = 986
+                    self.expression()
+
+
+                self.state = 993
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Expression_listContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def expression(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.ExpressionContext)
+            else:
+                return self.getTypedRuleContext(modelicaParser.ExpressionContext,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_expression_list
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterExpression_list" ):
+                listener.enterExpression_list(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitExpression_list" ):
+                listener.exitExpression_list(self)
+
+
+
+
+    def expression_list(self):
+
+        localctx = modelicaParser.Expression_listContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 144, self.RULE_expression_list)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 994
+            self.expression()
+            self.state = 999
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while _la==26:
+                self.state = 995
+                self.match(modelicaParser.T__25)
+                self.state = 996
+                self.expression()
+                self.state = 1001
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Array_subscriptsContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def subscript_(self, i:int=None):
+            if i is None:
+                return self.getTypedRuleContexts(modelicaParser.Subscript_Context)
+            else:
+                return self.getTypedRuleContext(modelicaParser.Subscript_Context,i)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_array_subscripts
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterArray_subscripts" ):
+                listener.enterArray_subscripts(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitArray_subscripts" ):
+                listener.exitArray_subscripts(self)
+
+
+
+
+    def array_subscripts(self):
+
+        localctx = modelicaParser.Array_subscriptsContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 146, self.RULE_array_subscripts)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 1002
+            self.match(modelicaParser.T__83)
+            self.state = 1003
+            self.subscript_()
+            self.state = 1008
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            while _la==26:
+                self.state = 1004
+                self.match(modelicaParser.T__25)
+                self.state = 1005
+                self.subscript_()
+                self.state = 1010
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+
+            self.state = 1011
+            self.match(modelicaParser.T__84)
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class Subscript_Context(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def expression(self):
+            return self.getTypedRuleContext(modelicaParser.ExpressionContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_subscript_
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterSubscript_" ):
+                listener.enterSubscript_(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitSubscript_" ):
+                listener.exitSubscript_(self)
+
+
+
+
+    def subscript_(self):
+
+        localctx = modelicaParser.Subscript_Context(self, self._ctx, self.state)
+        self.enterRule(localctx, 148, self.RULE_subscript_)
+        try:
+            self.state = 1015
+            self._errHandler.sync(self)
+            token = self._input.LA(1)
+            if token in [23]:
+                self.enterOuterAlt(localctx, 1)
+                self.state = 1013
+                self.match(modelicaParser.T__22)
+                pass
+            elif token in [18, 22, 25, 46, 49, 66, 73, 74, 75, 76, 82, 83, 84, 86, 87, 89, 90, 91]:
+                self.enterOuterAlt(localctx, 2)
+                self.state = 1014
+                self.expression()
+                pass
+            else:
+                raise NoViableAltException(self)
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class CommentContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def string_comment(self):
+            return self.getTypedRuleContext(modelicaParser.String_commentContext,0)
+
+
+        def annotation(self):
+            return self.getTypedRuleContext(modelicaParser.AnnotationContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_comment
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterComment" ):
+                listener.enterComment(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitComment" ):
+                listener.exitComment(self)
+
+
+
+
+    def comment(self):
+
+        localctx = modelicaParser.CommentContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 150, self.RULE_comment)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 1017
+            self.string_comment()
+            self.state = 1019
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==88:
+                self.state = 1018
+                self.annotation()
+
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class String_commentContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def STRING(self, i:int=None):
+            if i is None:
+                return self.getTokens(modelicaParser.STRING)
+            else:
+                return self.getToken(modelicaParser.STRING, i)
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_string_comment
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterString_comment" ):
+                listener.enterString_comment(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitString_comment" ):
+                listener.exitString_comment(self)
+
+
+
+
+    def string_comment(self):
+
+        localctx = modelicaParser.String_commentContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 152, self.RULE_string_comment)
+        self._la = 0 # Token type
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 1029
+            self._errHandler.sync(self)
+            _la = self._input.LA(1)
+            if _la==90:
+                self.state = 1021
+                self.match(modelicaParser.STRING)
+                self.state = 1026
+                self._errHandler.sync(self)
+                _la = self._input.LA(1)
+                while _la==73:
+                    self.state = 1022
+                    self.match(modelicaParser.T__72)
+                    self.state = 1023
+                    self.match(modelicaParser.STRING)
+                    self.state = 1028
+                    self._errHandler.sync(self)
+                    _la = self._input.LA(1)
+
+
+
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+    class AnnotationContext(ParserRuleContext):
+        __slots__ = 'parser'
+
+        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
+            super().__init__(parent, invokingState)
+            self.parser = parser
+
+        def class_modification(self):
+            return self.getTypedRuleContext(modelicaParser.Class_modificationContext,0)
+
+
+        def getRuleIndex(self):
+            return modelicaParser.RULE_annotation
+
+        def enterRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "enterAnnotation" ):
+                listener.enterAnnotation(self)
+
+        def exitRule(self, listener:ParseTreeListener):
+            if hasattr( listener, "exitAnnotation" ):
+                listener.exitAnnotation(self)
+
+
+
+
+    def annotation(self):
+
+        localctx = modelicaParser.AnnotationContext(self, self._ctx, self.state)
+        self.enterRule(localctx, 154, self.RULE_annotation)
+        try:
+            self.enterOuterAlt(localctx, 1)
+            self.state = 1031
+            self.match(modelicaParser.T__87)
+            self.state = 1032
+            self.class_modification()
+        except RecognitionException as re:
+            localctx.exception = re
+            self._errHandler.reportError(self, re)
+            self._errHandler.recover(self, re)
+        finally:
+            self.exitRule()
+        return localctx
+
+
+
+
+
diff --git a/src/parse_modelica.py b/src/feature_model/parse_modelica.py
similarity index 100%
rename from src/parse_modelica.py
rename to src/feature_model/parse_modelica.py
-- 
GitLab