chharvey / counterpoint

A robust programming language.
GNU Affero General Public License v3.0
2 stars 0 forks source link

Syntax: Update Statement Boolean Operators #23

Closed chharvey closed 4 years ago

chharvey commented 4 years ago

Assignment and update statement using boolean operators. Dependent on #15.

Lexical:

Punctuator ::=
    PunctuatorOne   |
    PunctuatorTwo   |
    PunctuatorThree

PunctuatorThree ::=
    "||=" | "!|=" | "&&=" | "!&="

Syntax:

AssignmentOperator ::= "||=" | "!|=" | "&&=" | "!&=" | "^=" | "*=" | "/=" | "+=" | "-="

Semantics:

Decorate(StatementAssignment ::= ExpressionAssignable "||=" Expression ";")
    := SemanticAssignment {} [
        SemanticAssignee {} [
            Decorate(ExpressionAssignable),
        ],
        SemanticAssigned {} [
            SemanticExpression {operator: "if-then-else"} [
                SemanticCondition {} [
                    Decorate(ExpressionAssignable),
                ],
                SemanticConsequent {} [
                    Decorate(ExpressionAssignable),
                ],
                SemanticAlternative {} [
                    Decorate(Expression),
                ],
            ],
        ],
    ]
Decorate(StatementAssignment ::= ExpressionAssignable "!|=" Expression ";")
    := SemanticAssignment {} [
        SemanticAssignee {} [
            Decorate(ExpressionAssignable),
        ],
        SemanticAssigned {} [
            SemanticExpression {operator: "!"} [
                SemanticExpression {operator: "if-then-else"} [
                    SemanticCondition {} [
                        Decorate(ExpressionAssignable),
                    ],
                    SemanticConsequent {} [
                        Decorate(ExpressionAssignable),
                    ],
                    SemanticAlternative {} [
                        Decorate(Expression),
                    ],
                ],
            ],
        ],
    ]
Decorate(StatementAssignment ::= ExpressionAssignable "&&=" Expression ";")
    := SemanticAssignment {} [
        SemanticAssignee {} [
            Decorate(ExpressionAssignable),
        ],
        SemanticAssigned {} [
            SemanticExpression {operator: "if-then-else"} [
                SemanticCondition {} [
                    Decorate(ExpressionAssignable),
                ],
                SemanticConsequent {} [
                    Decorate(Expression),
                ],
                SemanticAlternative {} [
                    Decorate(ExpressionAssignable),
                ],
            ],
        ],
    ]
Decorate(StatementAssignment ::= ExpressionAssignable "!&=" Expression ";")
    := SemanticAssignment {} [
        SemanticAssignee {} [
            Decorate(ExpressionAssignable),
        ],
        SemanticAssigned {} [
            SemanticExpression {operator: "!"} [
                SemanticExpression {operator: "if-then-else"} [
                    SemanticCondition {} [
                        Decorate(ExpressionAssignable),
                    ],
                    SemanticConsequent {} [
                        Decorate(Expression),
                    ],
                    SemanticAlternative {} [
                        Decorate(ExpressionAssignable),
                    ],
                ],
            ],
        ],
    ]

Syntax sugar:

a ||= b; \ sugar for `a = a || (b);`
a !|= b; \ sugar for `a = a !| (b);`
a &&= b; \ sugar for `a = a && (b);`
a !&= b; \ sugar for `a = a !& (b);`
chharvey commented 4 years ago

closing as duplicate of #15