"""An expression statement, that is, an expression terminated by a semicolon.
   
   Only certain expressions are valid statements:
   - [[assignment|AssignmentOperation]] (but see below),
   - [[prefix|PrefixOperation]] or [[postfix|PostfixOperation]] increment or decrement, and
   - [[invocation|Invocation]] (or instantiation).
   
   Be aware that very simple assignments are [[specifications|Specification]];
   an [[AssignmentStatement]] where the [[target|AssignOperation.target]] of the [[AssignOperation]]
   is a [[BaseExpression]] is invalid.
   
   Examples:
   
       text.length += added.length;
       i++;
       print("Hello, World!");"""
shared abstract class ExpressionStatement()
        of AssignmentStatement | PrefixPostfixStatement | InvocationStatement
        extends Statement() {
    
    "The expression of the statement."
    shared formal AssignmentOperation|PrefixOperation|PostfixOperation|Invocation expression;
    
    shared actual formal [AssignmentOperation|PrefixOperation|PostfixOperation|Invocation] children;
}