vorto #
InformationModel:
'vortolang' 1.0
'namespace' qualifiedName
'version' version
('displayname' string)?
('description' string)?
('category' ID('/' ID)*)?
(modelReference)*
'infomodel' ID '{'
'functionblocks' '{'
(functionblockProperty)*
'}'
;
functionblockProperty:
('mandatory' | 'optional')? ('multiple')? ID 'as' [FunctionBlock::ID | qualifiedName] (description)?
qualifiedName: ID ('.' ID)*;
version : int('.' int)*('-'ID)?;
ID:
'^'?('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*
;
description: STRING
modelReference:
'using' qualifiedName ';' version;
vortolang 1.0
namespace com.mycompany
version 1.0.0
description "Information model for FabLab.eu's IoT Octopus"
category multisensor
using com.ipso.smartobjects.Accelerometer ; 1.1.0
using com.ipso.smartobjects.Barometer ; 1.1.0
infomodel IoTOctopus {
functionblocks {
mandatory accelerometer as Accelerometer "some description"
optional barometer as Barometer
}
}
FunctionBlock:
'vortolang' 1.0
'namespace' qualifiedName
'version' version
('displayname' string)?
('description' string)?
('category' ID('/' ID)*)?
(modelReference)*
'functionblock' ID ('extends' [Functionblock::ID | qualifiedName])? '{'
('configuration' '{'
(Property)*
'}')?
('status' '{'
(Property)*
'}')?
('events' '{'
(ID '{'
(Property)*
'}')*
'}')?
('operations' '{'
(Operation)*
'}')?
'}'
;
qualifiedName: ID ('.' ID)*;
version : int('.' int)*('-'ID)?;
ID: '^'?('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
modelReference: 'using' qualifiedName ';' version;
description: STRING
Property: Please refer to chapter Model Property for details
Operation:
('extension')? ('mandatory' | 'optional')? ('breakable')? ID '(' (OperationType (',' OperationType)*)?')' ('returns' OperationType)? (description)?;
OperationType: DictonaryOperationType | OperationPrimitiveType | OperationObjectType;
DictonaryOperationType:
('multiple')? ID 'as' DictionaryType ('<' ConstraintRule '>')? (description)?;
OperationPrimitiveType: ('multiple')? ID 'as' PrimitiveType ('<' ConstraintRule '>')? (description)?;
OperationObjectType: ('multiple')? ID 'as' ObjectType (description)?;
vortolang 1.0
namespace com.mycompany
version 1.0.0
functionblock Accelerometer {
configuration {
mandatory enable as boolean
}
status {
mandatory xValue as float "The measured value along the X axis."
optional yValue as float "The measured value along the Y axis."
optional zValue as float "The measured value along the Z axis."
}
operations {
reset() returns boolean "resets the accelerometer"
}
}
Flask #
Flask: Staged Functional Programming for Sensor Networks
Mainland G, Morrisett G, Welsh M. Flask: Staged Functional Programming for Sensor Networks[J]. 2008.
IOTCollab #
Adda M, Saad R. A data sharing strategy and a DSL for service discovery, selection and consumption for the IoT[J]. Procedia Computer Science, 2014, 37: 92-100.
ComPOS #
Rules #
Alfred Åkesson, Görel Hedin, and Niklas Fors. 2023. ComPOS: A DSL for Composing IoT Systems with Weak Connectivity. In Proceedings of the 10th ACM SIGPLAN International Workshop on Reactive and Event-Based Languages and Systems (REBLS 2023). Association for Computing Machinery, New York, NY, USA, 31–42. https://doi.org/10.1145/3623506.3623577