use of verdict.vdm.vdm_lustre.Contract in project VERDICT by ge-high-assurance.
the class PrettyPrinter method visit.
// @Override
public void visit(LustreProgram program) {
// ContractDeclarataions
for (Contract contract : program.getContractDeclaration()) {
visit(contract);
sb.append(NL);
}
sb.append(NL);
for (Node node : program.getNodeDeclaration()) {
if (node != null) {
visit(node);
sb.append(NL);
}
}
// for (LustreNode node : cNodes) {
// node.accept(this);
// sb.append(NL).append(NL);
// }
}
use of verdict.vdm.vdm_lustre.Contract in project VERDICT by ge-high-assurance.
the class VDM2Lustre method visit.
public void visit(Model vdm_model, LustreProgram program) {
// A) Copying Type Declaration + amend name '_Impl
for (TypeDeclaration typeDec : vdm_model.getTypeDeclaration()) {
visit(typeDec, program);
}
// Copying over Constant Declarations
for (ConstantDeclaration constDec : program.getConstantDeclaration()) {
String constName = constDec.getName();
constName = constName.replace(".", "_dot_");
constName = constName.replace("::", "_double_colon_");
constDec.setName(constName);
visit(constDec);
}
// Event Ports
for (ComponentType componentType : vdm_model.getComponentType()) {
// Collect Node with no output
Port mPort = markPort(componentType);
if (mPort == null) {
// Event Ports to Data Ports;
for (Port port : componentType.getPort()) {
// Update event_ports
visit(port, program);
}
} else {
System.out.println("Ignoring Node:" + componentType.getName());
System.out.println("Ignoring Port:" + mPort.getName());
this.marked_types.add(componentType);
this.marked_ports.add(mPort);
}
}
// B) Component Type
Node cmp_node = null;
Node impl_node = null;
String inst_cmp = "(.+)_Inst_.*";
Pattern inst_pattern = Pattern.compile(inst_cmp);
for (ComponentType componentType : vdm_model.getComponentType()) {
boolean is_declared = false;
if (!this.marked_types.contains(componentType)) {
for (ComponentImpl componentImpl : vdm_model.getComponentImpl()) {
if (componentType == componentImpl.getType()) {
impl_node = visit(componentType, true);
visit(componentImpl, impl_node);
is_declared = true;
break;
}
}
if (is_declared) {
cmp_node = visit(componentType, false);
Matcher m = inst_pattern.matcher(cmp_node.getName());
if (m.matches() == false) {
program.getNodeDeclaration().add(cmp_node);
}
program.getNodeDeclaration().add(impl_node);
} else {
cmp_node = visit(componentType, false);
program.getNodeDeclaration().add(cmp_node);
}
}
}
// Copying over Node Declarations.
for (Node node_dec : program.getNodeDeclaration()) {
visit(node_dec, program);
}
// Copy over Contract Spec.
for (Contract contract : program.getContractDeclaration()) {
visit(contract, program);
}
}
use of verdict.vdm.vdm_lustre.Contract in project VERDICT by ge-high-assurance.
the class VerdictLustreListener method exitContractNode.
/**
* Extract a contract.
*/
@Override
public void exitContractNode(LustreParser.ContractNodeContext ctx) {
Contract contract = new Contract();
contract.setName(ctx.ID().getText());
if (ctx.input != null) {
contract.getInputParameter().addAll(ctx.input.nodeParameters);
}
if (ctx.output != null) {
contract.getOutputParameter().addAll(ctx.output.nodeParameters);
}
contract.getSpecification().add(ctx.contractSpec().spec);
LustreProgram program = model.getDataflowCode();
program.getContractDeclaration().add(contract);
}
Aggregations