diff --git a/src/main/grammars/de/monticore/lang/monticar/CNNArch.mc4 b/src/main/grammars/de/monticore/lang/monticar/CNNArch.mc4
index 2d11bf2065aa6c9a64744ddb819e20621fd8442c..9981d12de78104d1ab4875de42cdc07696000b11 100644
--- a/src/main/grammars/de/monticore/lang/monticar/CNNArch.mc4
+++ b/src/main/grammars/de/monticore/lang/monticar/CNNArch.mc4
@@ -2,14 +2,17 @@ package de.monticore.lang.monticar;
grammar CNNArch extends de.monticore.common.Common {
+ CNNArchCompilationUnit = Architecture;
+
symbol scope Architecture = "architecture"
- name:Name& "("
- inputPort:Name& ")" "{"
+ Name& "{"
(MainLayer)+
- outputPort:Name& "="
OutputLayer
"}";
+ //InputPort = Name "-->";
+ //OutputPort = "-->" Name;
+
interface Layer;
ast Layer = method ASTMethod getMethod(){};
interface Method;
@@ -18,13 +21,13 @@ grammar CNNArch extends de.monticore.common.Common {
interface ArgumentAssignment;
ast ArgumentAssignment = method public Enum getLhs(){}
- method public ASTRhs getRhs(){};
+ method public ASTArgumentRhs getRhs(){};
- Rhs = stringVal:String
- | intVal:Num_Int
- | doubleVal:Num_Double
- | intTuple:IntTuple
- | refOrBool:Name;
+ ArgumentRhs = stringVal:String
+ | intVal:Num_Int
+ | doubleVal:Num_Double
+ | intTuple:IntTuple
+ | refOrBool:Name;
IntTuple = "(" values:Num_Int "," values:(Num_Int || ",")+ ")";
@@ -35,7 +38,7 @@ grammar CNNArch extends de.monticore.common.Common {
ConvolutionMethod implements MainLayerMethod = name:"Convolution" "(" arguments:(ConvolutionArgumentAssignment || ",")* ")";
- ConvolutionArgumentAssignment implements ArgumentAssignment = lhs:ConvolutionArgument "=" rhs:Rhs;
+ ConvolutionArgumentAssignment implements ArgumentAssignment = lhs:ConvolutionArgument "=" rhs:ArgumentRhs;
enum ConvolutionArgument = KERNEL:"kernel" //required
| NUMFILTER:"num_filter" //required
| STRIDE:"stride"
@@ -43,16 +46,16 @@ grammar CNNArch extends de.monticore.common.Common {
| NOBIAS:"no_bias";
FullyConnectedMethod implements MainLayerMethod = name:"FullyConnected" "(" arguments:(FullyConnectedArgumentAssignment || ",")* ")";
- FullyConnectedArgumentAssignment implements ArgumentAssignment = lhs:FullyConnectedArgument "=" rhs:Rhs;
+ FullyConnectedArgumentAssignment implements ArgumentAssignment = lhs:FullyConnectedArgument "=" rhs:ArgumentRhs;
enum FullyConnectedArgument = NUMHIDDEN:"num_hidden" //required
| NOBIAS:"no_bias";
ActivationMethod implements MainLayerMethod = name:"Activation" "(" arguments:(ActivationArgumentAssignment || ",")* ")";
- ActivationArgumentAssignment implements ArgumentAssignment = lhs:ActivationArgument "=" rhs:Rhs;
+ ActivationArgumentAssignment implements ArgumentAssignment = lhs:ActivationArgument "=" rhs:ArgumentRhs;
enum ActivationArgument = ACTTYPE:"act_type"; //required
PoolingMethod implements MainLayerMethod = name:"Pooling" "(" arguments:(PoolingArgumentAssignment || ",")* ")";
- PoolingArgumentAssignment implements ArgumentAssignment = lhs:PoolingArgument "=" rhs:Rhs;
+ PoolingArgumentAssignment implements ArgumentAssignment = lhs:PoolingArgument "=" rhs:ArgumentRhs;
enum PoolingArgument = KERNEL:"kernel" //required
| POOLTYPE:"pool_type" //required
| POOLINGCONVENTION:"pooling_convention"
@@ -60,12 +63,12 @@ grammar CNNArch extends de.monticore.common.Common {
| PAD:"pad";
DropoutMethod implements MainLayerMethod = name:"Dropout" "(" arguments:(DropoutArgumentAssignment || ",")* ")";
- DropoutArgumentAssignment implements ArgumentAssignment = lhs:DropoutArgument "=" rhs:Rhs;
+ DropoutArgumentAssignment implements ArgumentAssignment = lhs:DropoutArgument "=" rhs:ArgumentRhs;
enum DropoutArgument = P:"p"
| MODE:"mode";
LRNMethod implements MainLayerMethod = name:"LRN" "(" arguments:(LRNArgumentAssignment || ",")* ")";
- LRNArgumentAssignment implements ArgumentAssignment = lhs:LRNArgument "=" rhs:Rhs;
+ LRNArgumentAssignment implements ArgumentAssignment = lhs:LRNArgument "=" rhs:ArgumentRhs;
enum LRNArgument = ALPHA:"alpha"
| BETA:"beta"
| KNORM:"knorm"
@@ -84,13 +87,13 @@ grammar CNNArch extends de.monticore.common.Common {
ast StandardOutputLayerMethod = method public String getName(){
return optName.get();
};
- StandardOutputArgumentAssignment implements ArgumentAssignment = lhs:StandardOutputArgument "=" rhs:Rhs;
+ StandardOutputArgumentAssignment implements ArgumentAssignment = lhs:StandardOutputArgument "=" rhs:ArgumentRhs;
enum StandardOutputArgument = GRADSCALE:"grad_scale";
SVMOutputLayerMethod implements OutputLayerMethod = name:"SVMOutput" "("
arguments:(SVMOutputArgumentAssignment || ",")* ")";
- SVMOutputArgumentAssignment implements ArgumentAssignment = lhs:SVMOutputArgument "=" rhs:Rhs;
+ SVMOutputArgumentAssignment implements ArgumentAssignment = lhs:SVMOutputArgument "=" rhs:ArgumentRhs;
enum SVMOutputArgument = MARGIN:"margin"
| REGULARIZATIONCOEFFICIENT:"regularization_coefficient"
| USELINEAR:"use_linear";
diff --git a/src/main/java/de/monticore/lang/monticar/cnnarch/_ast/ASTRhs.java b/src/main/java/de/monticore/lang/monticar/cnnarch/_ast/ASTArgumentRhs.java
similarity index 90%
rename from src/main/java/de/monticore/lang/monticar/cnnarch/_ast/ASTRhs.java
rename to src/main/java/de/monticore/lang/monticar/cnnarch/_ast/ASTArgumentRhs.java
index d80fdf3c4e559c88c9c7d9c89903bf430a310efd..0c3f1a95339f75cdc9132f3ca991c2a22363ccff 100644
--- a/src/main/java/de/monticore/lang/monticar/cnnarch/_ast/ASTRhs.java
+++ b/src/main/java/de/monticore/lang/monticar/cnnarch/_ast/ASTArgumentRhs.java
@@ -22,14 +22,14 @@ package de.monticore.lang.monticar.cnnarch._ast;
import java.util.Optional;
-public class ASTRhs extends ASTRhsTOP{
+public class ASTArgumentRhs extends ASTArgumentRhsTOP{
private boolean containsBoolean;
- public ASTRhs() {
+ public ASTArgumentRhs() {
}
- public ASTRhs(String stringVal, String intVal, String doubleVal, ASTIntTuple intTuple, String refOrBool) {
+ public ASTArgumentRhs(String stringVal, String intVal, String doubleVal, ASTIntTuple intTuple, String refOrBool) {
super(stringVal, intVal, doubleVal, intTuple, refOrBool);
}
diff --git a/src/main/java/de/monticore/lang/monticar/cnnarch/_ast/ASTMethod.java b/src/main/java/de/monticore/lang/monticar/cnnarch/_ast/ASTMethod.java
index fdf5e526965732d19245c8f6d729c2be41a6ab65..2be716fd83e0d0fa2d8efbf8e6c640f87d2b5fe4 100644
--- a/src/main/java/de/monticore/lang/monticar/cnnarch/_ast/ASTMethod.java
+++ b/src/main/java/de/monticore/lang/monticar/cnnarch/_ast/ASTMethod.java
@@ -32,8 +32,8 @@ public interface ASTMethod extends ASTMethodTOP {
return new LinkedList<>();
}
- default ASTRhs get(String lhsName) {
- ASTRhs rhs = null;
+ default ASTArgumentRhs get(String lhsName) {
+ ASTArgumentRhs rhs = null;
lhsName = lhsName.replace("_", "");
for (ASTArgumentAssignment assignment : getAssignments()) {
String assignmentLhs = assignment.getLhs().name();
diff --git a/src/main/java/de/monticore/lang/monticar/cnnarch/_symboltable/CNNArchSymbolTableCreator.java b/src/main/java/de/monticore/lang/monticar/cnnarch/_symboltable/CNNArchSymbolTableCreator.java
new file mode 100644
index 0000000000000000000000000000000000000000..b45d8b387c360c937e3b78bb2c60b4dc3c444932
--- /dev/null
+++ b/src/main/java/de/monticore/lang/monticar/cnnarch/_symboltable/CNNArchSymbolTableCreator.java
@@ -0,0 +1,77 @@
+/**
+ *
+ * ******************************************************************************
+ * MontiCAR Modeling Family, www.se-rwth.de
+ * Copyright (c) 2017, Software Engineering Group at RWTH Aachen,
+ * All rights reserved.
+ *
+ * This project is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3.0 of the License, or (at your option) any later version.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this project. If not, see .
+ * *******************************************************************************
+ */
+package de.monticore.lang.monticar.cnnarch._symboltable;
+
+import de.monticore.lang.monticar.cnnarch._ast.ASTArchitecture;
+import de.monticore.lang.monticar.cnnarch._ast.ASTCNNArchCompilationUnit;
+import de.monticore.symboltable.ArtifactScope;
+import de.monticore.symboltable.ImportStatement;
+import de.monticore.symboltable.MutableScope;
+import de.monticore.symboltable.ResolvingConfiguration;
+import de.se_rwth.commons.logging.Log;
+
+import java.util.*;
+
+public class CNNArchSymbolTableCreator extends CNNArchSymbolTableCreatorTOP {
+
+ private String compilationUnitPackage = "";
+
+
+
+ public CNNArchSymbolTableCreator(final ResolvingConfiguration resolvingConfig,
+ final MutableScope enclosingScope) {
+ super(resolvingConfig, enclosingScope);
+ }
+
+ public CNNArchSymbolTableCreator(final ResolvingConfiguration resolvingConfig,
+ final Deque scopeStack) {
+ super(resolvingConfig, scopeStack);
+ }
+
+
+ @Override
+ public void visit(final ASTCNNArchCompilationUnit compilationUnit) {
+ Log.debug("Building Symboltable for Script: " + compilationUnit.getArchitecture().getName(),
+ CNNArchSymbolTableCreator.class.getSimpleName());
+
+ List imports = new ArrayList<>();
+
+ ArtifactScope artifactScope = new ArtifactScope(
+ Optional.empty(),
+ compilationUnitPackage,
+ imports);
+
+ putOnStack(artifactScope);
+ }
+
+ public void visit(final ASTArchitecture architecture) {
+ ArchitectureSymbol architectureSymbol = new ArchitectureSymbol(
+ architecture.getName()
+ );
+
+ addToScopeAndLinkWithNode(architectureSymbol, architecture);
+ }
+
+ public void endVisit(final ASTArchitecture architecture) {
+ removeCurrentScope();
+ }
+
+}