--- Title: YREA SLS | D Grammar Summary Prev: Complete Operator Reference Next: Module System --- ## Appendix D: Grammar Summary This appendix provides a concise grammar reference. For complete specifications of language constructs (fn, struct, trait, impl, etc.), see the `::Implementable` trait in Appendix B. ### D.1 Lexical Grammar **Comments**: ``` line_comment ::= "//" ``` **Identifiers**: ``` identifier ::= [a-zA-Z_][a-zA-Z0-9_]* identifier_literal ::= "::" identifier ``` **Integer Literals**: ``` integer ::= decimal | hexadecimal | binary decimal ::= [0-9]+ (":" type_name)? hexadecimal ::= "0x" [0-9a-fA-F]+ binary ::= "0b" [01]+ ``` **Floating Point Literals**: ``` float ::= [0-9]+ "." [0-9]+ (":" type_name)? ``` **String Literals**: ``` string ::= '"' (character | escape_sequence)* '"' escape_sequence ::= "\n" | "\r" | "\t" | "\\" | '\"' | "\'" | "\0" | "\x" hex_digit hex_digit | "\u{" hex_digit+ "}" ``` **Boolean Literals**: ``` boolean ::= "true" | "false" ``` **Array Literals**: ``` array ::= "[" (expression)* "]" ``` **Token Strings**: ``` token_string ::= "{" (token)* "}" ``` ### D.2 Expression Grammar ``` expression ::= literal | identifier | identifier_literal | expression operator | control_flow | definition literal ::= integer | float | string | boolean | array operator ::= built_in_operator | user_defined_operator control_flow ::= if_expr | while_expr | for_expr | match_expr ``` **Note on Operator Precedence**: Stack-based postfix notation eliminates the need for operator precedence. Operations are performed in the order they appear, operating on values already on the stack. ### D.3 Type Grammar **Type Tuples (Stack Signatures)**: ``` type_tuple ::= "(" type_list "--" type_list ")" | "(---)" type_list ::= (type)* type ::= identifier | generic_type | trait_constraint generic_type ::= identifier "<" type_param_list ">" type_param_list ::= type_param ("," type_param)* type_param ::= identifier (":" trait_constraint)? ``` ### D.4 Construct Grammar Language constructs (fn, struct, trait, impl, enum, union, inher) are defined by operators in the `::Implementable` trait. These operators parse TokenStrings to create language-level definitions. **High-Level Patterns**: - Functions: `(inputs -- outputs) { body } ::name fn` - Structs: `(field_types --) { field_names: } ::name? struct` - Unions: `(variant_types --) { Variant(T) ... } ::name? union` - Enums: `{ Variant value?: ... } ::name enum` - Traits: `{ (sig) method: ... } ::identifier? trait` - Trait Impl: `::trait_id { (sig) { body } method: ... } ::type_id? impl` - Trait Inheritance: `[ identifier_list ] ::identifier? inher { } ::identifier? trait` > **Complete Specification**: See Appendix B (`::Implementable` trait) for precise definitions of these construct operators. ---