source: branches/HeuristicLab.Problems.GPDL/HeuristicLab.Problems.GPDL/3.4/GPDef.atg @ 9727

Last change on this file since 9727 was 9727, checked in by gkronber, 6 years ago

#2026 attributes for NT- and T-symbols are optional (incorrectly translated from Coco-2 yesterday)

File size: 14.9 KB
Line 
1$namespace=HeuristicLab.Problems.GPDL
2
3using System.Text;
4using System.Collections.Generic;
5using IEnumerableConstraintNode = System.Collections.Generic.IEnumerable<ConstraintNode>;
6
7COMPILER GPDef
8  public static HeuristicLab.Optimization.IProblem problem;
9 
10CHARACTERS
11  letter = 'A'..'Z' + 'a'..'z'.
12  digit = '0'..'9'.
13
14TOKENS
15  ident = letter {letter | digit}  .
16
17COMMENTS
18  FROM "/*" TO "*/" NESTED
19
20IGNORE '\t' + '\r' + '\n'
21
22
23PRODUCTIONS
24
25  SourceCode<out string src> =                                                    (. src = ""; .)
26   "<<"                                                                           (. int beg = la.pos; .)
27   {ANY}                                                                          (. int end = la.pos; .)
28   ">>"                                                                           (. if(end>beg) src = scanner.buffer.GetString(beg, end); .)
29  .
30
31  GPDef =                                                                         (.
32                                                                                    RuleNode ruleNode = null;
33                                                                                    GPDefNode gpDef = new GPDefNode();
34                                                                                    NonTerminalNode ntNode = null;
35                                                                                    FitnessFunctionNode fitnessFunNode = null;
36                                                                                    TerminalNode tNode = null;
37                                                                                    problem = null;
38                                                                                    string src = "";
39                                                                                  .)
40    "PROBLEM" ident                                                               (. gpDef.Name = t.val; .)
41    ["CODE" SourceCode<out src>                                                   (. gpDef.ClassCodeNode = new CodeNode{SrcCode = src}; .)
42    ]
43    ["INIT" SourceCode<out src>                                                   (. gpDef.InitCodeNode = new CodeNode{SrcCode = src}; .)
44    ]
45
46    "NONTERMINALS" { NonterminalDecl<out ntNode>                                  (. gpDef.NonTerminals.Add(ntNode); .)
47    }
48    "TERMINALS" { TerminalDecl<out tNode>                                         (. gpDef.Terminals.Add(tNode); .)
49    }
50    "RULES" { RuleDef<out ruleNode>                                               (. gpDef.Rules.Add(ruleNode); .)
51    }
52                                                                                  (. fitnessFunNode = new FitnessFunctionNode();
53                                                                                         gpDef.FitnessFunctionNode = fitnessFunNode;
54                                                                                  .)
55    ("MAXIMIZE"                                                                   (. fitnessFunNode.Maximization = true; .)
56    | "MINIMIZE"                                                                  (. fitnessFunNode.Maximization = false; .)
57    )
58     SourceCode<out src>                                                          (. fitnessFunNode.SrcCode = src; .)
59    "END" ident                                                                   (.
60                                                                                    // SourceReader.Handle(GPDefSem.srcText.ToString()); // flush the source reader
61                                                                                    var gen = new ProblemGenerator();
62                                                                                    problem = gen.GenerateFromAst(gpDef);
63                                                                                  .)
64    '.'
65  .
66
67
68  /******************************************************/
69  SemAction<out RuleActionNode action> =                                          (. RuleActionNode myAction = null; action = null; string src = ""; .)
70    "SEM" SourceCode<out src>                                                     (.
71                                                                                    myAction = new RuleActionNode();
72                                                                                    myAction.SrcCode = src;
73                                                                                    action = myAction;
74                                                                                  .)
75  .
76
77  /******************************************************/
78  NonterminalDecl<out NonTerminalNode ntNode> =                                   (. string identStr = ""; ntNode = null; string src = ""; .)
79    ident                                                                         (. identStr = t.val; .)
80    [ SourceCode<out src> ]                                                       (.
81                                                                                    var myNtNode = new NonTerminalNode();
82                                                                                    ntNode = myNtNode;
83                                                                                    myNtNode.Ident = identStr;
84                                                                                    myNtNode.FormalParameters = src;
85                                                                                  .)
86    '.'
87  .
88
89  /******************************************************/
90  TerminalDecl<out TerminalNode tNode> =                                          (.
91                                                                                    string identStr = "";
92                                                                                    tNode = null;
93                                                                                    TerminalNode myTNode = null;
94                                                                                    IEnumerableConstraintNode constraints = null;
95                                                                                    string src = "";
96                                                                                  .)
97  ident                                                                           (. identStr = t.val; .)
98  [ SourceCode<out src> ]                                                         (.
99                                                                                         myTNode = new TerminalNode();
100                                                                                         tNode = myTNode;
101                                                                                         myTNode.Ident = identStr;
102                                                                                         myTNode.FormalParameters = src;
103                                                                                         myTNode.FieldDefinitions = SourceReader.ExtractFormalParameters(src);
104                                                                                  .)
105  [ "CONSTRAINTS" ConstraintDef<out constraints>                                  (. myTNode.Constraints = constraints; .)
106  ]
107  '.'
108  .
109
110
111  /******************************************************/
112  ConstraintDef<out IEnumerableConstraintNode constraints>  =                   (.
113                                                                                    List<ConstraintNode> constraintsList = new List<ConstraintNode>();
114                                                                                    ConstraintNode n = null;
115                                                                                    constraints = null;
116                                                                                  .)
117    { ConstraintRule<out n>                                                       (. constraintsList.Add(n); .)
118    }
119                                                                                  (. constraints = constraintsList; .)
120  .
121
122  /******************************************************/
123  ConstraintRule<out ConstraintNode constraint> =                                 (.
124                                                                                    constraint = null;
125                                                                                  .)
126    ident                                                                         (. constraint = new ConstraintNode(t.val); .)
127    "IN" SetDefinition<constraint>                                                // (. SourceReader.Handle(GPDefSem.srcText.ToString()); .) // flush the source reader
128  .
129
130  /******************************************************/
131  SetDefinition<ConstraintNode constraint> =                                      (. string src = ""; .)
132    ("SET"                                                                        (. constraint.Type = ConstraintNodeType.Set; .)
133     SourceCode<out src>                                                          (. constraint.SetExpression = src; .)
134     |
135     "RANGE"                                                                      (. constraint.Type = ConstraintNodeType.Range; .)
136     SourceCode<out src>                                                          (. constraint.RangeMinExpression = src; .)
137     ".." SourceCode<out src>                                                     (. // SourceReader.Handle(GPDefSem.srcText.ToString()); // flush the source reader
138                                                                                    constraint.RangeMaxExpression = src; .)
139    )
140  .
141
142  /******************************************************/
143  RuleDef<out RuleNode rule> =                                                    (.
144                                                                                    RuleExprNode expr = null;
145                                                                                    string identStr = null;
146                                                                                    RuleNode myRule = null;
147                                                                                    rule = null;
148                                                                                   string src = "";
149                                                                                  .)
150  ident                                                                           (. identStr = t.val; .)
151  [ SourceCode<out src> ] '='                                                     (.
152                                                                                      myRule = new RuleNode();
153                                                                                      rule = myRule;
154                                                                                      myRule.NtSymbol = identStr;
155                                                                                  .)
156  ["LOCAL" SourceCode<out src>                                                    (.
157                                                                                    myRule.LocalCode = src;
158                                                                                  .)
159  ]
160  SynExpr<out expr> '.'                                                          (.
161                                                                                    myRule.RuleExpr = expr;
162                                                                                 .)
163  .
164
165  /******************************************************/
166  SynExpr<out RuleExprNode expr > =                                               (.
167                                                                                    expr = null;
168                                                                                    AlternativesNode alt = null;
169                                                                                  .)
170  SynTerm<out expr>                                                               (.
171                                                                                    alt = new AlternativesNode();
172                                                                                    alt.Add(expr);
173                                                                                  .)
174  {
175    '|' SynTerm<out expr>                                                         (. alt.Add(expr); expr = alt; .)
176  }
177  .
178
179  /******************************************************/
180  SynTerm<out RuleExprNode expr> =                                               (. SequenceNode seq = null; expr = null; .)
181  SynFact<out expr>                                                              (.
182                                                                                   seq = new SequenceNode();
183                                                                                   seq.Add(expr);
184                                                                                 .)
185  {
186    SynFact<out expr>                                                            (. seq.Add(expr); expr = seq; .)
187  }
188  .
189
190  /******************************************************/
191  SynFact<out RuleExprNode expr> =                                               (.
192                                                                                   string identStr = "";
193                                                                                   RuleActionNode action = null;
194                                                                                   expr = null;
195                                                                                   string src = "";
196                                                                                 .)
197    (ident                                                                       (. identStr = t.val; .)
198     [ SourceCode<out src> ]                                                     (.
199                                                                                    var callNode = new CallSymbolNode{Ident = identStr};
200                                                                                    callNode.ActualParameter = src;
201                                                                                    expr = callNode;
202                                                                                 .)
203// not implemented   | "EPS"
204// not implemented   | '(' SynExpr<ref rules, mBuilder> ')'
205// not implemented   | '[' SynExpr<ref rules, mBuilder> ']'
206// not implemented   | '{' SynExpr<ref rules, mBuilder> '}'
207     | SemAction<out action>                                                      (. expr = action; .)
208    )
209  .
210
211END GPDef.
Note: See TracBrowser for help on using the repository browser.