next up previous contents
Next: About this document ... Up: main Previous: History of SALSA


SALSA Grammar

The SALSA grammar is listed as follows:
 
CompilationUnit ::=
  [ModuleDeclaration]
  (ImportDeclaration)* 
  BehaviorDeclarationAttributes
  (BehaviorDeclaration | InterfaceDeclaration )
  <EOF>

ModuleDeclaration ::= "module" Name ";"

ImportDeclaration ::= "import" <IDENTIFIER> ("." (<IDENTIFIER> | "*") )* ";"

BehaviorDeclarationAttributes ::= ("abstract" | "public" | "final")*

InterfaceDeclaration ::= "interface" <IDENTIFIER> ["extends" Name] InterfaceBody

Name ::= <IDENTIFIER> ("." <IDENTIFIER>)*

InterfaceBody ::= ( "{" (StateVariableDeclaration | MethodLookahead ";" )* "}" )*

BehaviorDeclaration ::= "behavior" <IDENTIFIER> ["extends" Name] ["implements" Name ("," Name)*] BehaviorBody

MethodLookahead ::= MethodAttributes ( Type | "void" ) <IDENTIFIER> FormalParameters ["throws" Exceptions]

BehaviorBody ::= "{" ( Initializer | NestedBehaviorDeclaration | StateVariableDeclaration | MethodDeclaration | ConstructorDeclaration )* "}"

NestedBehaviorAttributes ::= ("abstract" | "public" | "final" | "protected" | "private" | "static" )*

NestedBehaviorDeclaration ::= NestedBehaviorAttributes BehaviorDeclaration

Initializer ::= ["static"] Block

StateVariableAttributes ::= ("public" | "protected" | "private" | "volatile" | "static" | "final" | "transient" )*

StateVariableDeclaration ::= StateVariableAttributes Type VariableDeclaration ("," VariableDeclaration)* ";"

PrimitiveType ::= "boolean" | "char" | "byte" | "short" | "int" | "long" | "float" | "double"

Type ::= (PrimitiveType | Name) ( "[" "]" )*

VariableDeclaration ::= <IDENTIFIER> ("[" "]")* ["=" (Expression | ArrayInitializer)]

ArrayInitializer ::= "{" [ (Expression | ArrayInitializer) ("," (Expression | ArrayInitializer) )* ] "}"

AssignmentOperator ::= "=" | "*=" | "/=" | ""«=" | "»=" | "»>=" | "&=" | "^=" | "|="

Expression ::= Value ( ((Operator | AssignmentOperator) Value) | ("?" Expression ":" Value) )*

Operator ::= "||" | "&&" | "|" | "^" | "&" | "==" | "!=" | ">" | "<" | "<=" | ">=" | "«" | "»" | "»>" | "+" | "-" | "*" | "/" | "

Value ::= [Prefix] Variable [Suffix] (PrimarySuffix)*

Prefix ::= "++" | "-" | " " | "!" | "-"

Suffix ::= "++" | "-"

Variable ::= ["(" Type ")"] ( Literal | Name | "this" | "super" | AllocationExpression | "(" Expression ")" )

PrimarySuffix ::= "." "this" | "." AllocationExpression | "[" Expression "]" | "." <IDENTIFIER> | Arguments

ResultType ::= Type | "void"

Literal ::= IntegerLiteral | FloatingPointLiteral | CharacterLiteral | StringLiteral | BooleanLiteral | NullLiteral | TokenLiteral

Arguments ::= "(" [Expression ("," Expression)*] ")"

AllocationExpression ::= "new" PrimitiveType ArrayDimsAndInits | "new" Name (ArrayDimsAndInits | (Arguments [BehaviorBody])) [BindDeclaration]

BindDeclaration ::= "at" "(" Expression ["," Expression] ")"

ArrayDimsAndInits ::= ( "[" Expression "]")+ ("[" "]")* | ("[" "]")+ ArrayInitializer

FormalParameters ::= "(" [ ["final"] Type <IDENTIFIER> ( "[" "]" )* ( "," ["final"] Type <IDENTIFIER> ( "[" "]" )* )* ] ")"

ExplicitConstructorInvocation ::= "super" Arguments ";"

ConstructorDeclaration ::= MethodAttributes <IDENTIFIER> FormalParameters ["throws" Exceptions] "{" [ExplicitConstructorInvocation] (Statement)* "}"

ConstructorAttributes ::= ("public" | "protected" | "private")*

MethodDeclaration ::= MethodAttributes (Type | "void") <IDENTIFIER> FormalParameters ["throws" Exceptions] Block

MethodAttributes ::= ("public" | "protected" | "private" | "static" | "abstract" | "final" | "native" )*

Exceptions ::= Name ("," Name)*

Statement ::= ContinuationStatement | TokenDeclarationStatement | LocalVariableDeclaration ";" | Block | EmptyStatement | StatementExpression ";" | LabeledStatement | SynchronizedStatement | SwitchStatement | IfStatement | WhileStatement | DoStatement | ForStatement | BreakStatement | ContinueStatement | ReturnStatement | ThrowStatement | TryStatement | MethodDeclaration | NestedBehaviorDeclaration

Block ::= "{" ( Statement )* "}"

LocalVariableDeclaration ::= ["final"] Type VariableDeclaration ("," VariableDeclaration)*

EmptyStatement ::= ";"

StatementExpression ::= Value [AssignmentOperator Expression]

LabeledStatement ::= <IDENTIFIER> ":" Statement

SwitchStatement ::= "switch" "(" Expression ")" "{" (SwitchLabel (Statement)* )* "}"

SwitchLabel ::= "case" Expression ":" | "default" ":"

IfStatement ::= "if" "(" Expression ")" Statement ["else" Statement]

WhileStatement ::= "while" "(" Expression ")" Statement

DoStatement ::= "do" Statement "while" "(" Expression ")" ";"

ForInit ::= [ LocalVariableDeclaration | ( StatementExpression ("," StatementExpression)* ) ]

ForCondition ::= [Expression]

ForIncrement ::= [ StatementExpression ("," StatementExpression)* ]

ForStatement ::= "for" "(" ForInit ";" ForCondition ";" ForIncrement ")" Statement

BreakStatement ::= "break" [<IDENTIFIER>] ";"

ContinueStatement ::= "continue" [<IDENTIFIER>] ";"

ReturnStatement ::= "return" [Expression] ";"

ThrowStatement ::= "throw" Expression ";"

SynchronizedStatement ::= "synchronized" "(" Expression ")" Block

TryStatement ::= "try" Block ( "catch" "(" ["final"] Type <IDENTIFIER> ")" Block )* ["finally" Block]

ContinuationStatement ::= (MessageStatement "@")* (MessageStatement | "currentContinuation") ";"

MessageStatement ::= [NamedTokenStatement] (MessageSend | JoinBlock)

JoinBlock ::= "join" Block

NamedTokenStatement ::= (<IDENTIFIER> | "token" <IDENTIFIER>) "="

MessageSend ::= [Value "<-"] <IDENTIFIER> MessageArguments [":" MessageProperty]

MessageProperty ::= <IDENTIFIER> [Arguments]

MessageArguments ::= "(" [Expression ("," Expression)*] ")"

TokenDeclarationStatement ::= "token" <IDENTIFIER> "=" Expression ";"

IntegerLiteral ::= <INTEGER_LITERAL>

FloatingPointLiteral ::= <FLOATING_POINT_LITERAL>

CharacterLiteral ::= <CHARACTER_LITERAL>

StringLiteral ::= <STRING_LITERAL>

BooleanLiteral ::= "true" | "false"

NullLiteral ::= "null"

TokenLiteral ::= "token"

<IDENTIFIER> ::= <LETTER> (<LETTER>|<DIGIT>)*


next up previous contents
Next: About this document ... Up: main Previous: History of SALSA
Wei-Jen Wang
2007-11-28