Search in sources :

Example 1 with ContractImport

use of verdict.vdm.vdm_lustre.ContractImport in project VERDICT by ge-high-assurance.

the class VerdictLustreListener method exitContractImport.

/**
 * Extract a contract import.
 */
@Override
public void exitContractImport(LustreParser.ContractImportContext ctx) {
    ctx.imprt = new ContractImport();
    ctx.imprt.setContractId(ctx.ID().getText());
    ctx.inputArg.forEach(inputArg -> ctx.imprt.getInputArgument().add(inputArg.expression));
    ctx.outputArg.forEach(outputArg -> ctx.imprt.getOutputArgument().add(outputArg.expression));
}
Also used : ContractImport(verdict.vdm.vdm_lustre.ContractImport)

Example 2 with ContractImport

use of verdict.vdm.vdm_lustre.ContractImport in project VERDICT by ge-high-assurance.

the class VDMLustre2Kind2 method visit.

/**
 * Translate VDM model contract specification to Kind 2 Lustre contract body.
 *
 * @param modelSpec the VDM model contract spec
 * @return the Kind 2 Lustre contract body builder
 */
private static ContractBodyBuilder visit(ContractSpec modelSpec) {
    ContractBodyBuilder cbb = new ContractBodyBuilder();
    for (ContractImport contractImport : modelSpec.getImport()) {
        cbb.importContract(contractImport.getContractId(), contractImport.getInputArgument().stream().map(input -> (IdExpr) visit(input)).collect(Collectors.toList()), contractImport.getOutputArgument().stream().map(output -> (IdExpr) visit(output)).collect(Collectors.toList()));
    }
    for (SymbolDefinition symbol : modelSpec.getSymbol()) {
        if (symbol.isIsConstant() != null && symbol.isIsConstant()) {
            if (symbol.getDataType() != null) {
                if (symbol.getDefinition() != null) {
                    cbb.createConstant(symbol.getName(), visit(symbol.getDataType()), visit(symbol.getDefinition()));
                } else {
                    cbb.createConstant(symbol.getName(), visit(symbol.getDataType()));
                }
            } else {
                cbb.createConstant(symbol.getName(), visit(symbol.getDefinition()));
            }
        } else {
            cbb.createVarDef(symbol.getName(), visit(symbol.getDataType()), visit(symbol.getDefinition()));
        }
    }
    for (ContractItem assumption : modelSpec.getWeaklyassume()) {
        cbb.weaklyAssume(assumption.getName(), visit(assumption.getExpression()));
    }
    for (ContractItem assumption : modelSpec.getAssume()) {
        cbb.assume(assumption.getName(), visit(assumption.getExpression()));
    }
    for (ContractItem guarantee : modelSpec.getGuarantee()) {
        cbb.guarantee(guarantee.getName(), visit(guarantee.getExpression()));
    }
    for (ContractMode mode : modelSpec.getMode()) {
        ModeBuilder mb = new ModeBuilder(mode.getName());
        for (ContractItem require : mode.getRequire()) {
            mb.require(require.getName(), visit(require.getExpression()));
        }
        for (ContractItem ensure : mode.getEnsure()) {
            mb.ensure(ensure.getName(), visit(ensure.getExpression()));
        }
        cbb.addMode(mb);
    }
    return cbb;
}
Also used : ContractItem(verdict.vdm.vdm_lustre.ContractItem) ContractImport(verdict.vdm.vdm_lustre.ContractImport) ContractMode(verdict.vdm.vdm_lustre.ContractMode) ModeBuilder(edu.uiowa.cs.clc.kind2.lustre.ModeBuilder) ContractBodyBuilder(edu.uiowa.cs.clc.kind2.lustre.ContractBodyBuilder) SymbolDefinition(verdict.vdm.vdm_lustre.SymbolDefinition)

Example 3 with ContractImport

use of verdict.vdm.vdm_lustre.ContractImport in project VERDICT by ge-high-assurance.

the class VerdictLustreListener method exitImportedContract.

/**
 * Extract an imported contract.
 */
@Override
public void exitImportedContract(LustreParser.ImportedContractContext ctx) {
    ctx.imprt = new ContractImport();
    ctx.imprt.setContractId(ctx.ID().getText());
    ctx.inputArg.forEach(inputArg -> ctx.imprt.getInputArgument().add(inputArg.expression));
    ctx.outputArg.forEach(outputArg -> ctx.imprt.getOutputArgument().add(outputArg.expression));
}
Also used : ContractImport(verdict.vdm.vdm_lustre.ContractImport)

Example 4 with ContractImport

use of verdict.vdm.vdm_lustre.ContractImport in project VERDICT by ge-high-assurance.

the class PrettyPrinter method visit.

public void visit(ContractSpec contractSpec) {
    // Symbols
    for (SymbolDefinition symbolDef : contractSpec.getSymbol()) {
        sb.append(TAB);
        sb.append("var ");
        visit(symbolDef);
        sb.append(";");
        sb.append(NL);
    }
    // Assumuptions
    for (ContractItem contractItem : contractSpec.getAssume()) {
        sb.append(TAB).append("assume ");
        visit(contractItem);
        sb.append(";");
        sb.append(NL);
    }
    sb.append(NL);
    // Guarantees
    for (ContractItem contractItem : contractSpec.getGuarantee()) {
        sb.append(TAB).append("guarantee ");
        visit(contractItem);
        sb.append(";");
        sb.append(NL);
    }
    sb.append(NL);
    // Modes
    for (ContractMode contractMode : contractSpec.getMode()) {
        sb.append(TAB).append("mode ");
        sb.append(TAB).append(" (");
        sb.append(TAB).append(NL);
        visit(contractMode);
        sb.append(";");
        sb.append(NL);
    }
    // Imports
    for (ContractImport contractImport : contractSpec.getImport()) {
        sb.append(TAB);
        sb.append("import ");
        visit(contractImport);
        sb.append(";");
        sb.append(NL);
    }
}
Also used : ContractItem(verdict.vdm.vdm_lustre.ContractItem) ContractImport(verdict.vdm.vdm_lustre.ContractImport) ContractMode(verdict.vdm.vdm_lustre.ContractMode) SymbolDefinition(verdict.vdm.vdm_lustre.SymbolDefinition)

Aggregations

ContractImport (verdict.vdm.vdm_lustre.ContractImport)4 ContractItem (verdict.vdm.vdm_lustre.ContractItem)2 ContractMode (verdict.vdm.vdm_lustre.ContractMode)2 SymbolDefinition (verdict.vdm.vdm_lustre.SymbolDefinition)2 ContractBodyBuilder (edu.uiowa.cs.clc.kind2.lustre.ContractBodyBuilder)1 ModeBuilder (edu.uiowa.cs.clc.kind2.lustre.ModeBuilder)1