source: branches/dev-mj-1626/Compiler/ModelicaFrontEnd/src/jastadd/ast/Modelica.ast @ 13095

Last change on this file since 13095 was 13095, checked in by tgutzmann, 5 months ago

Merge from trunk

File size: 13.2 KB
Line 
1/*
2    Copyright (C) 2009 Modelon AB
3
4    This program is free software: you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation, version 3 of the License.
7
8    This program is distributed in the hope that it will be useful,
9    but WITHOUT ANY WARRANTY; without even the implied warranty of
10    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11    GNU General Public License for more details.
12
13    You should have received a copy of the GNU General Public License
14    along with this program.  If not, see <http://www.gnu.org/licenses/>.
15*/
16
17
18/**
19 * \mainpage API documentation of the JModelica.org Modelica Front-end
20 *
21 * The API documentation of the Modelica %compiler front-end is yet rudimentary.
22 * Also, the APIs for the Java classes contains several methods that are
23 * part of the internal JastAdd run-time system - these methods are not intended
24 * to be used by the user.
25 *
26 * We are currently working together with the JastAdd team to develop a
27 * documentation system where internal methods are hidden and where the user
28 * API is exposed.
29 *
30 * The Modelica %compiler is organized into a number of different packages:
31 * <ul>
32 *   <li> org.jmodelica.modelica.parser containing parsers for Modelica
33 *   and Flat Modelica code.</li>
34 *   <li> org.jmodelica.modelica.compiler contains the actual %compiler, including
35 *   the classes used to construct the Abstract Syntax Trees (ASTs) and the
36 *   %compiler driver class ModelicaCompiler.</li>
37 *   <li> org.jmodelica.util contains some helper classes which are independent
38 *   of the AST classes.</li>
39 * </ul>
40 *
41 * Notice that the Java classes are not intended to be edited manually (with
42 * the exception of the classes in org.jmodelica.util), but are rather
43 * automatically generated by the JastAdd tool. In order to extend or
44 * modify the functionality of the %compiler, edit the .%ast, .jrag and .jadd
45 * files.
46 *
47 */
48
49
50// Modelica abstract grammar
51
52
53
54
55/**
56 * \package org.jmodelica.ast Package containing all AST classes.
57 */
58
59abstract SrcBaseNode : BaseNode;
60
61/**
62 * A class representing the root node of a source AST.
63 */
64SourceRoot : Root ::= Program;
65 
66
67Program : SrcBaseNode ::=
68            UnstructuredEntity:SrcStoredDefinition*
69            /SrcUnknownClassDecl/
70            /UnknownComponent:SrcComponentClause/
71            /EnumBaseDecl:SrcEnumClassDecl/
72            /PredefinedType:SrcBaseClassDecl*/
73            /BuiltInType:SrcClassDecl*/   
74            /BuiltInFunction:SrcBaseClassDecl*/
75            /SrcLibNode*/
76            /AnonymousClass:SrcBaseClassDecl*/
77            /InstProgramRoot/;
78
79SrcStoredDefinition : SrcBaseNode ::=
80            [SrcWithin]
81            SrcClassDecl*
82            <LoadInfo:LoadInfo>;
83
84SrcWithin : SrcBaseNode ::= [PackageName:SrcAccess];
85
86abstract SrcClassDecl : SrcElement       ::= Name:SrcIdDecl;
87abstract SrcBaseClassDecl : SrcClassDecl ::= <Encapsulated:boolean>
88                                       <Partial:boolean>
89                                       SrcRestriction
90                                       <Redeclare:boolean>
91                                       <Final:boolean>
92                                       <Inner:boolean>
93                                       <Outer:boolean>
94                                       <Replaceable:boolean>
95                                       [SrcConstrainingClause]
96                                       [ConstrainingClauseComment:SrcComment];
97
98SrcUnknownClassDecl : SrcFullClassDecl;
99
100SrcFullClassDecl : SrcBaseClassDecl ::= [SrcStringComment]
101                                  SrcClause*
102                                  [SrcExternalClause]
103                                  [SrcAnnotation]
104                                  SrcEndDecl;
105
106SrcLibClassDecl : SrcFullClassDecl ::= SrcLibNode*;
107SrcLibNode : SrcClassDecl ::=
108                        <Structured:boolean>
109                        <Version:String>
110                        <Reason:SrcLibNode.LoadReason>
111                        <LoadInfo:LoadInfo>
112                        /SrcStoredDefinition/;
113
114SrcShortClassDecl : SrcBaseClassDecl ::= SrcExtendsClauseShortClass;
115
116SrcExtendsClauseShortClass : SrcExtendsClause ::= [SrcTypePrefixFlow]
117                                            [SrcTypePrefixVariability]
118                                            [SrcTypePrefixInputOutput]
119                                            [SrcArraySubscripts]
120                                            SrcComment;
121                           
122SrcExtendClassDecl : SrcFullClassDecl ::= SrcInlineExtendsClause;
123                                   
124SrcPrimitiveClassDecl : SrcFullClassDecl;
125SrcRealClassDecl      : SrcPrimitiveClassDecl;
126SrcIntegerClassDecl   : SrcPrimitiveClassDecl;
127SrcBooleanClassDecl   : SrcPrimitiveClassDecl;
128SrcStringClassDecl    : SrcPrimitiveClassDecl;
129SrcEnumClassDecl      : SrcPrimitiveClassDecl;
130
131SrcEnumLiteralDecl : SrcComponentDecl;
132
133SrcBuiltInClassDecl : SrcClassDecl;
134
135SrcConstrainingClause : SrcBaseNode ::= SrcAccess [SrcClassModification];
136
137abstract SrcRestriction : SrcBaseNode;
138SrcModel               : SrcRestriction;
139SrcBlock               : SrcRestriction;
140SrcClass               : SrcRestriction;
141SrcConnector           : SrcRestriction;
142SrcExpandableConnector : SrcConnector;
143SrcType                : SrcRestriction;
144SrcPackage             : SrcRestriction;
145SrcFunction            : SrcRestriction;
146SrcRecord              : SrcRestriction;
147SrcOperatorRecord      : SrcRecord;
148SrcOperator            : SrcRestriction;
149SrcOperatorFunction    : SrcFunction;
150
151SrcExternalClause : SrcBaseNode ::= [SrcExternalLanguage]
152                                    [SrcExternalFunctionCall]
153                                    [SrcAnnotation];
154                   
155SrcExternalFunctionCall : SrcBaseNode ::= [ReturnVar:SrcAccess] FunctionName:SrcIdDecl Arg:SrcExp*;
156
157SrcExternalLanguage : SrcBaseNode ::= <Language>;
158
159abstract SrcClause : SrcBaseNode;
160
161abstract SrcElementList  : SrcClause ::= SrcElement*;
162SrcPublicElementList     : SrcElementList;
163SrcDefaultElementList    : SrcPublicElementList;
164SrcProtectedElementList  : SrcElementList;
165SrcEquationClause        : SrcClause ::= SrcAbstractEquation*;
166SrcInitialEquationClause : SrcEquationClause;
167SrcAlgorithm             : SrcClause ::= SrcStatement*;
168SrcInitialAlgorithm      : SrcAlgorithm;
169
170abstract SrcElement : SrcBaseNode;
171SrcExtendsClause           : SrcElement ::= Super:SrcAccess [SrcClassModification] [SrcAnnotation];
172SrcInlineExtendsClause     : SrcExtendsClause;
173abstract SrcImportClause   : SrcElement ::= PackageName:SrcAccess SrcComment;
174SrcImportClauseQualified   : SrcImportClause;
175SrcImportClauseUnqualified : SrcImportClause;
176SrcImportClauseRename      : SrcImportClause ::= SrcIdDecl;
177
178SrcComponentClause : SrcElement ::= <Redeclare:boolean>
179                              <Final:boolean>
180                              <Inner:boolean>
181                              <Outer:boolean>
182                              <Replaceable:boolean>
183                              [SrcTypePrefixFlow]
184                              [SrcTypePrefixVariability]
185                              [SrcTypePrefixInputOutput]
186                              ClassName:SrcAccess
187                              [TypeArraySubscripts:SrcArraySubscripts]
188                              SrcComponentDecl*
189                              [SrcConstrainingClause]
190                              SrcComment;
191SrcEnumComponentClause : SrcComponentClause;
192
193SrcComponentDecl : SrcBaseNode ::= Name:SrcIdDecl
194                                   [VarArraySubscripts:SrcArraySubscripts]
195                                   [SrcModification]
196                                   [SrcConditionalAttribute]
197                                   SrcComment;
198
199SrcUnknownComponentDecl : SrcComponentDecl;
200
201abstract SrcTypePrefix     : SrcBaseNode;
202abstract SrcTypePrefixFlow : SrcTypePrefix;
203SrcFlow       : SrcTypePrefixFlow;
204SrcStream     : SrcTypePrefixFlow;
205abstract SrcTypePrefixVariability : SrcTypePrefix;
206SrcContinuous : SrcTypePrefixVariability;
207SrcDiscrete   : SrcTypePrefixVariability;
208SrcParameter  : SrcTypePrefixVariability;
209SrcIndexParameter : SrcParameter;
210SrcConstant   : SrcTypePrefixVariability;
211abstract SrcTypePrefixInputOutput : SrcTypePrefix;
212SrcInput      : SrcTypePrefixInputOutput;
213SrcOutput     : SrcTypePrefixInputOutput;
214
215SrcComment       : SrcBaseNode ::= [SrcStringComment] [SrcAnnotation];
216SrcStringComment : SrcBaseNode ::= SrcExp;
217
218// Annotations and modifications
219SrcConditionalAttribute : SrcBaseNode ::= SrcExp;
220
221abstract SrcModification : SrcBaseNode;
222SrcCompleteModification  : SrcModification ::= SrcClassModification [SrcValueModification];
223SrcValueModification     : SrcModification ::= SrcExp;
224SrcDummyModification     : SrcValueModification;
225
226SrcClassModification : SrcModification ::= SrcArgument*;
227abstract SrcArgument : SrcModification ::= <Each:boolean> <Final:boolean>;
228
229abstract SrcNamedModification   : SrcArgument ::= Name:SrcAccess;
230abstract SrcElementModification : SrcNamedModification ::= [SrcModification] SrcComment;
231SrcComponentModification : SrcElementModification;
232abstract SrcElementRedeclare    : SrcNamedModification;
233SrcClassRedeclare        : SrcElementRedeclare ::= SrcBaseClassDecl;
234SrcComponentRedeclare    : SrcElementRedeclare ::= SrcComponentClause;
235
236abstract SrcAnnotation : SrcBaseNode;
237
238SrcParseAnnotation : SrcAnnotation ::= SrcClassModification;
239
240abstract SrcAbstractExp : SrcBaseNode;
241abstract SrcExp : SrcAbstractExp;
242
243abstract SrcAbstractEquation         : SrcBaseNode ::= SrcComment;
244SrcEquation             : SrcAbstractEquation ::= Left:SrcExp Right:SrcExp;
245SrcConnectClause        : SrcAbstractEquation ::= Connector1:SrcAccess Connector2:SrcAccess;
246abstract SrcIfWhenElseEquation       : SrcAbstractEquation ::= SrcAbstractEquation*;
247abstract SrcIfWhenEquation           : SrcIfWhenElseEquation ::= Test:SrcExp [Else:SrcIfWhenElseEquation];
248SrcIfEquation           : SrcIfWhenEquation;
249SrcWhenEquation         : SrcIfWhenEquation;
250SrcElseEquation         : SrcIfWhenElseEquation;
251SrcForClauseE           : SrcAbstractEquation ::= SrcForIndex* SrcAbstractEquation*;
252SrcFunctionCallEquation : SrcAbstractEquation ::= Left:SrcFunctionCallLeft* Call:SrcFunctionCall;
253
254SrcFunctionCallLeft : SrcBaseNode ::= [SrcAccess];
255SrcForIndex : SrcComponentClause ::= [SrcExp];
256SrcForIndexDecl : SrcComponentDecl;
257         
258abstract SrcStatement    : SrcBaseNode  ::= SrcComment;
259SrcAssignStmt          : SrcStatement ::= Left:SrcAccess Right:SrcExp;
260SrcFunctionCallStmt    : SrcStatement ::= Left:SrcFunctionCallLeft* SrcFunctionCall;
261SrcBreakStmt           : SrcStatement;
262SrcReturnStmt          : SrcStatement;
263abstract SrcIfWhenStmt   : SrcStatement ::= SrcIfWhenClause*;
264SrcIfStmt              : SrcIfWhenStmt ::= [SrcElseClause];
265SrcWhenStmt            : SrcIfWhenStmt;
266SrcElseClause          : SrcBaseNode ::= Stmt:SrcStatement*;
267abstract SrcIfWhenClause : SrcBaseNode  ::= Test:SrcExp SrcStatement*;
268SrcIfClause            : SrcIfWhenClause;
269SrcWhenClause          : SrcIfWhenClause;
270SrcForStmt             : SrcStatement ::= SrcForIndex* SrcStatement*;
271SrcWhileStmt           : SrcStatement ::= Test:SrcExp SrcWhileStmt:SrcStatement*;
272
273SrcParExp    : SrcExp ::= SrcExp;
274SrcIfExp     : SrcExp ::= SrcIfExp:SrcExp ThenExp:SrcExp ElseExp:SrcExp;
275
276abstract SrcBinExp : SrcExp ::= Left:SrcExp Right:SrcExp;
277
278abstract SrcArtmBinExp : SrcBinExp;
279SrcDotAddExp : SrcArtmBinExp;
280SrcDotSubExp : SrcArtmBinExp;
281SrcDotMulExp : SrcArtmBinExp;
282SrcDotDivExp : SrcArtmBinExp;
283SrcDotPowExp : SrcArtmBinExp; // Easy to make parser take care of this: should be a Primary
284SrcAddExp : SrcDotAddExp;
285SrcSubExp : SrcDotSubExp;
286SrcMulExp : SrcDotMulExp;
287SrcDivExp : SrcDotDivExp;
288SrcPowExp : SrcDotPowExp; // Easy to make parser take care of this: should be a Primary
289SrcNegExp : SrcExp ::= SrcExp;
290
291SrcRealLitExp    : SrcExp ::= <UNSIGNED_NUMBER>;
292SrcIntegerLitExp : SrcExp ::= <UNSIGNED_INTEGER>;
293SrcStringLitExp  : SrcExp ::= <STRING>;
294abstract SrcBooleanLitExp : SrcExp;
295SrcBooleanLitExpTrue  : SrcBooleanLitExp;
296SrcBooleanLitExpFalse : SrcBooleanLitExp;
297
298SrcFunctionCall : SrcExp ::= Name:SrcAccess [SrcFunctionArguments];
299SrcPartialFunctionCall : SrcFunctionCall;
300
301SrcFunctionArguments : SrcBaseNode::= SrcExp* SrcNamedArgument*;
302SrcNamedArgument     : SrcBaseNode::= Name:SrcAccess SrcExp;
303
304SrcIterExp  : SrcExp ::= SrcExp SrcForIndex*;
305SrcRangeExp : SrcExp ::= SrcExp*;
306
307abstract SrcLogBinExp : SrcBinExp;
308SrcLtExp  : SrcLogBinExp;
309SrcLeqExp : SrcLogBinExp;
310SrcGtExp  : SrcLogBinExp;
311SrcGeqExp : SrcLogBinExp;
312SrcEqExp  : SrcLogBinExp;
313SrcNeqExp : SrcLogBinExp;
314SrcNotExp : SrcExp ::= SrcExp;
315SrcOrExp  : SrcLogBinExp;
316SrcAndExp : SrcLogBinExp;
317
318SrcIdDecl : SrcBaseNode ::= <ID>;
319
320SrcDerExp : SrcExp ::= SrcExp;
321
322SrcAccessExp : SrcExp ::= SrcAccess;
323
324abstract SrcAccess : SrcBaseNode;
325SrcDot             : SrcAccess      ::= SrcNamedAccess*;
326SrcGlobalAccess    : SrcAccess      ::= SrcAccess;
327SrcNamedAccess     : SrcAccess      ::= <ID>;
328SrcArrayAccess     : SrcNamedAccess ::= SrcArraySubscripts;
329
330SrcArrayConstructor : SrcExp ::= SrcFunctionArguments;
331SrcMatrix           : SrcExp ::= Row:SrcMatrixRow*;
332SrcMatrixRow        : SrcExp ::= SrcExp*;
333
334SrcArraySubscripts : SrcBaseNode ::= SrcSubscript*;
335abstract SrcSubscript : SrcBaseNode;
336SrcColonSubscript : SrcSubscript;
337SrcExpSubscript   : SrcSubscript ::= SrcExp;
338
339SrcTimeExp : SrcExp;
340SrcEndExp  : SrcExp;
341
342SrcEndDecl : SrcBaseNode ::= <EndID:String>;
Note: See TracBrowser for help on using the repository browser.