Skip to content
Snippets Groups Projects
Commit 82f7b913 authored by Ronny Böttger's avatar Ronny Böttger
Browse files

added Bank (broken)

parent 87a13375
No related branches found
No related tags found
No related merge requests found
......@@ -24,7 +24,7 @@ sourceSets.main.java.srcDir genSrc
jar {
from { sourceSets.main.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
manifest.attributes('Main-Class': 'de.tudresden.inf.st.statemachine.Main')
manifest.attributes('Main-Class': 'de.tudresden.inf.st.statemachine.BankMain')
}
dependencies {
......@@ -38,15 +38,15 @@ dependencies {
// Default run configuration
run {
mainClassName = 'de.tudresden.inf.st.statemachine.Main'
mainClassName = 'de.tudresden.inf.st.statemachine.BankMain'
}
// Generated files
def ecoreFile = "./src/main/resources/StateMachine.relast"
def relastFile = "./src/gen/jastadd/StateMachine.relast"
def roleragFile = "./src/main/resources/Bank.relast"
def relastFile = "./src/gen/jastadd/Bank.relast"
// First phase: Ecore -> RelAst
task ecoreToRelast(type: JavaExec) {
task roleragToRelast(type: JavaExec) {
group = 'Build'
main = "-jar"
......@@ -58,9 +58,9 @@ task ecoreToRelast(type: JavaExec) {
//args "../libs/ecore2relast-0.1.jar", ecoreFile, relastFile
args "../libs/RoleRag-0.2.0.jar", "--inputBaseDir=src/main/resources",
"--outputBaseDir=src/gen/jastadd", "StateMachine.relast"
"--outputBaseDir=src/gen/jastadd", "Bank.relast"
inputs.files file(ecoreFile)
inputs.files file(roleragFile)
outputs.files file(relastFile)
}
......@@ -93,7 +93,7 @@ task relastToJastAdd(type: JavaExec) {
main = "-jar"
args "../libs/relast.jar",
"--grammarName=./src/gen/jastadd/StateMachine",
"--grammarName=./src/gen/jastadd/Bank",
"--useJastAddNames",
"--listClass=ArrayList",
"--jastAddList=JastAddList",
......@@ -102,14 +102,14 @@ task relastToJastAdd(type: JavaExec) {
relastFile
inputs.files relastFile
outputs.files file("./src/gen/jastadd/StateMachine.ast"), file("./src/gen/jastadd/StateMachine.jadd")
outputs.files file("./src/gen/jastadd/Bank.ast"), file("./src/gen/jastadd/Bank.jadd")
}
// Third phase: JastAdd -> Java (using JastAdd Gradle plugin)
jastadd {
configureModuleBuild()
modules {
module("statemachine") {
module("bank") {
java {
basedir "src/"
......@@ -128,11 +128,11 @@ jastadd {
}
scanner {
include "src/main/jastadd/StateMachineScanner.flex"
include "src/main/jastadd/BankScanner.flex"
}
parser {
include "src/main/jastadd/StateMachineParser.parser"
include "src/main/jastadd/BankParser.parser"
}
}
}
......@@ -142,11 +142,11 @@ jastadd {
delete "src/gen-res/BuildInfo.properties"
}
module = "statemachine"
module = "bank"
astPackage = 'de.tudresden.inf.st.statemachine.jastadd.model'
parser.name = 'StateMachineParser'
parser.name = 'BankParser'
genDir = 'src/gen/java'
......@@ -160,7 +160,7 @@ jastadd {
}
// Workflow configuration for phases
relastToJastAdd.dependsOn ecoreToRelast
relastToJastAdd.dependsOn roleragToRelast
generateAst.dependsOn relastToJastAdd
//// always run jastadd
......
%header {:
// this code is inlined before the generated parser
package de.tudresden.inf.st.statemachine.jastadd.parser;
import de.tudresden.inf.st.statemachine.jastadd.model.*;
import java.util.*;
:};
// Documentation links: http://beaver.sourceforge.net/spec.html and https://bitbucket.org/jastadd/jastaddparser
%embed {:
// this code is inlined in the generated parser class
State initial;
List<State> finals = new ArrayList<>();
:};
%goal goal;
// Productions with semantic actions building the JastAdd AST
bank goal =
NAME.name
{:
Bank result = new Bank();
result.setName(name);
return result;
:}
;
package de.tudresden.inf.st.statemachine.jastadd.scanner;
import de.tudresden.inf.st.statemachine.jastadd.parser.BankParser.Terminals; // The terminals are implicitly defined in the parser
%%
// Documentation links: https://www.jflex.de/manual.html and http://beaver.sourceforge.net/scanners.html
// define the signature for the generated scanner
%public
%final
%class BankScanner
%extends beaver.Scanner
// the interface between the scanner and the parser is the nextToken() method
%type beaver.Symbol
%function nextToken
%yylexthrow beaver.Scanner.Exception
// store line and column information in the tokens
%line
%column
// this code will be inlined in the body of the generated scanner class
%{
private beaver.Symbol sym(short id) {
return new beaver.Symbol(id, yyline + 1, yycolumn + 1, yylength(), yytext());
}
%}
WhiteSpace = [ ] | \t | \f | \n | \r | \r\n
Identifier = [:jletter:][:jletterdigit:]*
%%
// discard whitespace information
{WhiteSpace} { }
// token definitions
"initial" { return sym(Terminals.INITIAL); }
"final" { return sym(Terminals.FINAL); }
"state" { return sym(Terminals.STATE); }
"trans" { return sym(Terminals.TRANS); }
{Identifier} { return sym(Terminals.NAME); }
";" { return sym(Terminals.SEMI); }
":" { return sym(Terminals.COLON); }
"->" { return sym(Terminals.ARROW); }
<<EOF>> { return sym(Terminals.EOF); }
package de.tudresden.inf.st.statemachine;
import beaver.Parser;
import de.tudresden.inf.st.jastadd.dumpAst.ast.Dumper;
//import de.tudresden.inf.st.statemachine.jastadd.model.State;
//import de.tudresden.inf.st.statemachine.jastadd.model.StateMachine;
//import de.tudresden.inf.st.statemachine.jastadd.model.Transition;
import de.tudresden.inf.st.statemachine.jastadd.model.Bank;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Set;
public class BankMain {
@SuppressWarnings("WeakerAccess")
public static Object DrAST_root_node;
public static void main(String[] args) throws IOException, Parser.Exception {
Bank bank;
if (args.length == 0) {
bank = createExample();
} else {
// load the file given as first argument
bank = ParserUtils.load(Paths.get(args[0]));
}
System.out.println("Bankname: " + bank.getName());
}
private static Bank createExample() {
// manual construction of a simple statemachine
// (S) -- e --> (B) -- 1 --> (E)
// ^ |
// \ /
// `---- 2 ----*
Bank b = new Bank();
b.setName("Peters Bank");
return b;
}
}
Bank ::= <Name>;
StateMachine ::= Element*;
abstract Element ::= <Label:String>;
State : Element ::=;
Transition : Element ::=;
rel StateMachine.initial -> State;
rel StateMachine.final* -> State;
rel State.outgoing* <-> Transition.from;
rel State.incoming* <-> Transition.to;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment