Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
research:software:secdart [2017/05/30 20:03] racruzresearch:software:secdart [2017/12/05 13:58] – [Dart subset] racruz
Line 23: Line 23:
 {{:research:software:secdart:implict_flows.png?600|}} {{:research:software:secdart:implict_flows.png?600|}}
  
 +===== SecDart : Language features =====
 +SecDart covers a subset of the language and add security labels to language constructors
 +
 +==== Dart subset ====
 +The following BNF notation represents the AST of the supported subset of Dart, so is not a grammar specification. We have code names of AST node to match those provided by the Dart Analyzer.
 +
 +<code>
 + compilationUnitMember ::= 
 +       | [FunctionDeclaration]
 +  
 + functionDeclaration ::=
 +         'external' functionSignature
 +       | functionSignature [FunctionBody]
 + 
 + functionSignature ::=
 +         [Type]? ('get' | 'set')? [SimpleIdentifier] [FormalParameterList]
 +         
 + binaryExpression ::=
 +        [Expression] [Token] [Expression] 
 + 
 +         
 + functionBody ::=
 +         [BlockFunctionBody]
 +       | [EmptyFunctionBody]
 +       | [ExpressionFunctionBody]
 +       
 + blockFunctionBody ::= block
 +
 + expressionFunctionBody ::= '=>' [Expression] ';'
 +
 + block ::= '{' statement* '}
 +
 + statement ::=
 +         [Block]
 +       | [VariableDeclarationStatement]
 +       | [IfStatement]
 +       | [ReturnStatement]
 +       | [ExpressionStatement] 
 +       
 + variableDeclarationStatement ::= 
 +         [VariableDeclarationList] ';'
 +         
 + variableDeclarationList ::=
 +         finalConstVarOrType [VariableDeclaration] (',' [VariableDeclaration])*
 +         
 + variableDeclaration ::=
 +         [SimpleIdentifier] ('=' [Expression])?
 +         
 + ifStatement ::=
 +         'if' '(' [Expression] ')' [Statement] ('else' [Statement])?
 +         
 + returnStatement ::=
 +         'return' [Expression]? ';'
 +         
 + expressionStatement ::=
 +         [Expression]? ';'
 + 
 +
 + expression ::=
 +         [AssignmentExpression]
 +       | [ConditionalExpression] cascadeSection*
 +       //the Dart grammar does not include the followings nodes here to avoid left recursion, however for the sake of presentation we inline them here.
 +       | [BinaryExpression]
 +       | [InvocationExpression]
 +       | [Literal]
 +       | [ParenthesizedExpression]
 +       | [Identifier]
 +       
 + assignmentExpression ::=
 +         [Expression] assignmentOperator [Expression]
 +         
 + conditionalExpression ::=
 +         [Expression] '?' [Expression] ':' [Expression]      
 +</code>
 +==== Security labels ====
 +SecDart uses annotations to specify security labels. We can specify security labels for the following entities:
 +  * parameters of functions <code>
 +int min(@high int a,@high int b)
 +</code>
 +  * variable definition <code>
 +void sendToFacebook(){
 +   ...
 +   @low String message = ....
 +   ...
 +}
 +</code>
 +  * function declarations <code>
 +@latent("H","H")
 +@low int max(@low int a,@high int b){
 +   return a+b;
 +}
 +</code>