ViViScript 構文


    注意:

         ・ []"\ はメタキャラクタである。その文字を表す時はクォートで囲むか \ を前置する
         ・ [] は省略可能を、[]...は0回以上の繰り返しを表す
         ・ 英字列は要素名を表す。文字列そのものはダブルクォートで囲む


    program:
        [ statement ]...
    statement:
        var-definition
        function-definition
        [ expression ] ;
        if-statement
        for-statement
        for-in-statement
        while-statement
        "break" ;
        "continue" ;
        "return" [ expression ] ;
        { [ statement ]... }
    var-definition:
        "var" var-definition-body [ , var-definition-body ]... ;
    var-definition-body:
        identifire [ = right-value ]
    function-definition:
        "function" identifier ( [ arg-list ] ) { [ statement ]... }
    arg-list:
        identifier [ , identifier ]...
    if-statement:
        "if" ( expression ) statement [ "else" statement ]
    for-statement:
        "for" ( initial-statement expression ; expression ) statement
    initial-statement:
        var-definition
        expression ;
    for-in-statement:
        "for" ( identifier "in" identifier ) statement
    while-statement:
        "while" ( expression ) statement
    expression:
        assign-exp [ , assign-exp ]...
    assign-exp:
        right-value
        unary-exp = assign-exp
        unary-exp *= assign-exp
        unary-exp /= assign-exp
        unary-exp %= assign-exp
        unary-exp += assign-exp
        unary-exp -= assign-exp
        unary-exp <<= assign-exp
        unary-exp >>= assign-exp
        unary-exp >>>= assign-exp
        unary-exp &= assign-exp
        unary-exp ^= assign-exp
        unary-exp |= assign-exp
    right-value:
        conditional-exp
    conditional-exp:
        logical-or-exp
        logical-or-exp ? conditional-exp : conditional-exp
    logical-or-exp:
        logical-and-exp [ || logical-and-exp ]...
    logical-and-exp:
        bitwize-or-exp [ & bitwize-or-exp ]...
    bitwize-or-exp:
        bitwize-xor-exp [ | bitwize-xor-exp ]...
    bitwize-xor-exp:
        bitwize-and-exp [ ^ bitwize-and-exp
    bitwize-and-exp:
        equality-exp [ & equality-exp ]...
    equality-exp:
        relational-exp [ equality-opr relational-exp ]...
    equality-opr:
        ==
        !=
    relational-exp:
        shift-exp [ relational-opr shift-exp ]...
    relational-opr:
        <
        <=
        >
        >=
    shift-exp:
        add-sub-exp [ shift-opr add-sub-exp ]...
    shift-opr:
        <<
        >>
        >>>
    add-sub-exp:
        mul-div-exp [ add-sub-opr mul-div-exp ]...
    add-sub-opr:
        +
        -
    mul-div-exp:
        mul-div-exp [ neg-inc-opr mul-div-exp ]...
    mul-div-opr:
        *
        /
        %
    neg-exp:
        unary-exp
        ! neg-exp
        ~ neg-exp
        - neg-exp
    unary-exp:
        postfix-exp
        ++ unary-exp
        -- unary-exp
    postfix-exp:
        prim-exp
        postfix-exp ++
        postfix-exp --
        postfix-exp "[" expression "]"
        postfix-exp ( [ expression ] )
        postfix-exp . identifier
    prim-exp:
        literal
        ( expression )
        identifier
    literal:
        digits
        hex-digits
        string