### Navigation

- index
- next |
- previous |
- Tester User Guide »

# 10. Appendix A

## 10.1. Scripting BNF

This Appendix gives the formal description of the Tester Scripting language.

### 10.1.1. TOKENS

    TOKENS
    <DEFAULT> SKIP : {
    " "
    | "\t"
    | "\n"
    | "\r"
    | <"//" (~["\n","\r"])* ("\n" | "\r" | "\r\n")>
    | <"--" (~["\n","\r"])* ("\n" | "\r" | "\r\n")>
    | <"/*" (~["*"])* "*" ("*" | ~["*","/"] (~["*"])* "*")* "/">
    }

    <DEFAULT> TOKEN : {
    <INTEGER_LITERAL: <DECIMAL_LITERAL> (["l","L"])?
    | <HEX_LITERAL> (["l","L"])?
    | <OCTAL_LITERAL> (["l","L"])?>
    | <#DECIMAL_LITERAL: (["+","-"])? ["0"-"9"] (["0"-"9"])*>
    | <#HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+>
    | <#OCTAL_LITERAL: "0" (["0"-"7"])*>
    | <FLOATING_POINT_LITERAL: (["+","-"])? (["0"-"9"])+ "." (["0"-"9"])*
            (<EXPONENT>)? (["f","F","d","D"])?
    | "." (["0"-"9"])+ (<EXPONENT>)? (["f","F","d","D"])?
    | (["0"-"9"])+ <EXPONENT> (["f","F","d","D"])?
    | (["0"-"9"])+ (<EXPONENT>)? ["f","F","d","D"]>
    | <#EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+>
    | <CHARACTER_LITERAL: "\'" (~["\'","\\","\n","\r"]
    | "\\" (["n","t","b","r","f","\\","\'","\""]
    | ["0"-"7"] (["0"-"7"])?
    | ["0"-"3"] ["0"-"7"] ["0"-"7"])) "\'">
    | <STRING_LITERAL: "\"" (~["\"","\\","\n","\r"]
    | "\\" (["n","t","b","r","f","\\","\'","\""]
    | ["0"-"7"] (["0"-"7"])?
    | ["0"-"3"] ["0"-"7"] ["0"-"7"]
    | ["\n","\r"]
    | "\r\n"))* "\"">
    | <HASH_LITERAL: "#"(["0"-"9"])+>
    | <JAVASCRIPT: "`" (~["`"])* "`">
    }

    <DEFAULT> TOKEN : {
    <SEND: "send">
    | <REPEAT: "repeat">
    | <PERIODIC: "periodic">
    | <MACRO: "macro">
    | <DISPOSE: "dispose">
    | <WRITEDISPOSE: "writedispose">
    | <WAIT: "wait">
    | <WAITABS: "waitabs">
    | <CALL: "call">
    | <RUN: "run">
    | <CHECK: "check">
    | <CHECK_LAST: "check_last">
    | <CHECK_ANY: "check_any">
    | <RECHECK_LAST: "recheck_last">
    | <DISPOSED: "disposed">
    | <MARK: "mark">
    | <MISS: "miss">
    | <MARKMSG: "markmsg">
    | <MISSMSG: "missmsg">
    | <SCENARIO: "scenario">
    | <UNIQID: "uniqid">
    | <VAR: "var">
    | <END: "end">
    | <MSG: "message">
    | <LOG: "log">
    | <FAIL: "fail">
    | <CLEAR: "clear">
    | <IF: "if">
    | <THEN: "then">
    | <ELSE: "else">
    | <ENDIF: "endif">
    | <FOR: "for">
    | <IN: "in">
    | <LOOP: "loop">
    | <ENDLOOP: "endloop">
    | <WHILE: "while">
    | <READER: "reader">
    | <WRITE: "write">
    | <READ: "read">
    | <CONNECT: "connect">
    | <DISCONNECT: "disconnect">
    | <EXEC: "execute">
    | <CONTROL: "control">
    | <SET: "set">
    | <COLUMN: "column">
    | <GRAPH: "graph">
    | <REVERSE_FAIL: "reverse_fail">
    | <EXIT: "exit">
    }

    <DEFAULT> TOKEN : {
    <IDENTIFIER: <LETTER> (<LETTER> | <DIGIT>)*>
    | <#LETTER: ["$","A"-"Z","_","a"-"z"]>
    | <DIGIT: ["0"-"9"]>
    }

### 10.1.2. NON-TERMINALS

    NON-TERMINALS
       Scenario := <SCENARIO> <IDENTIFIER> ( InstructionList )? <END>
                    <SCENARIO>
       Macro := <MACRO> <IDENTIFIER> "(" ( ArgumentList )? ")"
                    ( InstructionList )? <END> <MACRO>
          |  <SCENARIO> <IDENTIFIER> ( InstructionList )? <END> <SCENARIO>
       InstructionList   := ( Instruction )+
       Instruction := SendInstruction
          |  RepeatInstruction
          |  PeriodicInstruction
          |  DisposeInstruction
          |  WriteDisposeInstruction
          |  WaitInstruction
          |  WaitabsInstruction
          |  CheckInstruction
          |  CheckLastInstruction
          |  CheckAnyInstruction
          |  RecheckLastInstruction
          |  DisposedInstruction
          |  MarkInstruction
          |  MarkMsgInstruction
          |  MissInstruction
          |  MissMsgInstruction
          |  CallInstruction
          |  ForInstruction
          |  WhileInstruction
          |  SetInstruction
          |  VarDeclaration
          |  IfInstruction
          |  MessageInstruction
          |  ClearInstruction
          |  LogInstruction
          |  FailInstruction
          |  ReaderInstruction
          |  WriteInstruction
          |  ReadInstruction
          |  ConnectInstruction
          |  DisconnectInstruction
          |  ExecuteInstruction
          |  ControlInstruction
          |  ColumnInstruction
          |  GraphInstruction
          |  ReverseFailInstruction
          |  ExitInstruction
          |  ScriptInvocation
       ReaderInstruction := <READER> ( <DISPOSE> )? "(" Constant
                    (<HASH_LITERAL>)? ( "," <IDENTIFIER> ( "," Constant
                         ( "," Constant )? )? )? ");"
       ColumnInstruction := <COLUMN> ( <CLEAR> )? "(" Constant
                    ( "," Constant )? ");"
       GraphInstruction  := <GRAPH> "(" ParameterList ");"
       MessageInstruction   := <MSG> "(" <STRING_LITERAL> ( Constant )? ");"
       LogInstruction := <LOG> "(" <STRING_LITERAL> ( Constant )? ");"
       FailInstruction   := <FAIL> "(" <STRING_LITERAL> ( Constant )? ");"
       ControlInstruction   := <CONTROL> <IDENTIFIER> "." <IDENTIFIER> (
                    ( "(" ParameterList ( ( ");" ) | ( ")" ";" ) ) ) | ( ";" ) )
       ClearInstruction  := <CLEAR> ";"
       ExitInstruction   := <EXIT> ( <IF> <FAIL> )? ";"
       ScriptInvocation  := Script ";"
       SendInstruction   := <SEND> <IDENTIFIER> ( ( "." <IDENTIFIER> ) )?
                    "(" ( ParameterList )? ");"
       RepeatInstruction := <REPEAT> <IDENTIFIER> FloatValue IntValue "("
                    ( ParameterList )? ");"
       PeriodicInstruction  := <PERIODIC> <IDENTIFIER> <IDENTIFIER>
                    FloatValue IntValue "(" ( ParameterList )? ");"
       WriteInstruction  := <WRITE> <IDENTIFIER> "." <IDENTIFIER> "("
                    ( ParameterList )? ");"
       VarDeclaration := <VAR> FieldName "=>" Constant ";"
       DisposeInstruction   := <DISPOSE> <IDENTIFIER> ( ( "."
                    <IDENTIFIER> ) )? "(" ( ParameterList )? ");"
       WriteDisposeInstruction := <WRITEDISPOSE> <IDENTIFIER> ( ( "."
                    <IDENTIFIER> ) )? "(" ( ParameterList )? ");"
       CheckInstruction  := <CHECK> <IDENTIFIER> ( ( "." <IDENTIFIER> ) )?
                    "(" ( ChkParameterList )? ");"
       CheckLastInstruction := <CHECK_LAST> <IDENTIFIER> ( ( "."
                    <IDENTIFIER> ) )? "(" ( ChkParameterList )? ");"
       CheckAnyInstruction  := <CHECK_ANY> <IDENTIFIER> ( ( "."
                    <IDENTIFIER> ) )? "(" ( ChkParameterList )? ");"
       RecheckLastInstruction  := <RECHECK_LAST> <IDENTIFIER> ( ( "."
                    <IDENTIFIER> ) )? "(" ( ChkParameterList )? ");"
       ReadInstruction   := <READ> <IDENTIFIER> "." <IDENTIFIER> "("
                    ( ChkParameterList )? ");"
       MarkMsgInstruction   := <MARKMSG> <IDENTIFIER> "." <IDENTIFIER> "("
                    ( ChkParameterList )? ");"
       MissMsgInstruction   := <MISSMSG> <IDENTIFIER> "." <IDENTIFIER> "("
                    ( ChkParameterList )? ");"
       ConnectInstruction   := <CONNECT> <IDENTIFIER> ( Constant )? ";"
       DisconnectInstruction   := <DISCONNECT> <IDENTIFIER> ";"
       DisposedInstruction  := <DISPOSED> <IDENTIFIER> ( ( "."
                    <IDENTIFIER> ) )? "(" ( ChkParameterList )? ");"
       MissInstruction   := <MISS> <IDENTIFIER> ( ( "." <IDENTIFIER> ) )?
                    "(" ( ChkParameterList )? ");"
       MarkInstruction   := <MARK> <IDENTIFIER> ( ( "." <IDENTIFIER> ) )?
                    "(" ( ChkParameterList )? ");"
       CallInstruction   := <CALL> <IDENTIFIER> ( ( "." <IDENTIFIER> ) )?
                    "(" ( ParameterList )? ");"
       SetInstruction := <SET> <IDENTIFIER> "(" ( ParameterList )? ")"
                    "(" "(" ParamHeaderList ")" ParamSetList ");"
       ParamHeaderList   := <IDENTIFIER> ( "," ParamHeaderList )?
       ParamSetList   := "," ParamSet ( ParamSetList )?
       ParamSet := "(" ParamValueList ")"
       ParamValueList := Constant ( "," ParamValueList )?
       IfInstruction  := <IF> "(" CompareExpression ")" <THEN>
                    InstructionList ( <ELSE> InstructionList )? <ENDIF> ";"
       CompareExpression := CalcExpression ( CompareOperator
                    CompareExpression )?
       CalcExpression := PrimaryExpression ( CalcOperator CalcExpression )?
       PrimaryExpression := Constant
          |  "(" CompareExpression ")"
       CompareOperator   := "=="
          |  "!="
          |  ">"
          |  "<"
          |  ">="
          |  "<="
          |  "||"
          |  "&&"
       CalcOperator   := "|"
          |  "&"
          |  "+"
          |  "-"
          |  "*"
          |  "/"
       ForInstruction := <FOR> <IDENTIFIER> <IN> (
                    ( IntValue ".." IntValue )
          | "(" VarList ")" ) <LOOP> InstructionList <ENDLOOP> ";"
       WhileInstruction  := <WHILE> "(" CompareExpression ")" <LOOP>
                    InstructionList <ENDLOOP> ";"
       VarList  := Constant ( "," VarList )?
       WaitInstruction   := <WAIT> "(" Constant ");"
       WaitabsInstruction   := <WAITABS> "(" Constant ");"
       ExecuteInstruction   := <EXEC> ( <WAIT> )? ( <LOG> )?
                    <STRING_LITERAL> ";"
       ReverseFailInstruction  := <REVERSE_FAIL> ";"
       ParameterList  := Parameter ( "," Parameter )* ( "," )?
       Parameter   := FieldName "=>" Constant
       ChkParameterList  := ChkParameter ( "," ChkParameter )* ( "," )?
       ChkParameter   := FieldName "=>" ( "!" )? Constant ( ":" Constant )?
       ArgumentList   := Argument ( Argument )*
       Argument := FieldName ":" FieldName ( ":=" Constant )? ";"
       FieldName   := <IDENTIFIER> ( "[" <INTEGER_LITERAL> "]" )?
          ( ( "." FieldName ) )?
       IntValue := <INTEGER_LITERAL>
          |  "<<" <IDENTIFIER>
          |  <IDENTIFIER>
       FloatValue  := <FLOATING_POINT_LITERAL>
          |  "<<" <IDENTIFIER>
          |  <IDENTIFIER>
       Constant := <INTEGER_LITERAL>
          |  <FLOATING_POINT_LITERAL>
          |  <CHARACTER_LITERAL>
          |  <STRING_LITERAL>
          |  ">>" <IDENTIFIER>
          |  ">>" <JAVASCRIPT>
          |  "<<" <IDENTIFIER> ( "." <IDENTIFIER> )?
          |  <IDENTIFIER>
          |  <UNIQID>
          |  <JAVASCRIPT>
       Script   := <JAVASCRIPT>

### Navigation

- index
- next |
- previous |
- Tester User Guide »