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
research:software:secdart [2017/05/30 20:03] racruzresearch:software:secdart [2017/12/05 14:05] (current) – [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 use brackets in the BNF rules to refer to the name of the class of the Ast node 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>