Grammar

The grammar page provides a detailed description of the Gossip-lang grammar, including information on the different types of expressions, statements, and literals used in the language.

program: statement*

statement:
    | "let" identifier "=" expression
    | "assign" identifier "=" expression
    | "print" expression
    | compound_statement
    | if_statement
    | while_statement
    | repeat_statement
    | "declare" variable_declaration+ "in" statement "end"

compound_statement:
    | "for" identifier "in" range "do" statement "end"
    | "for" identifier "," identifier "in" matrix_range "do" statement "end"
    | "with" expression "as" identifier "do" statement "end"

if_statement:
    | "if" expression "then" statement "else" statement "end"
    | "if" expression "then" statement "end"

while_statement:
    | "while" expression "do" statement "end"

repeat_statement:
    | "repeat" statement "until" expression

variable_declaration:
    | identifier ("," identifier)*

range:
    | expression "to" expression

matrix_range:
    | range "by" expression "," expression "to" expression

expression:
    | comparison (("and" | "or") comparison)*

comparison:
    | term ((">" | "<" | ">=" | "<=" | "==" | "!=") term)*

term:
    | factor (("+" | "-") factor)*

factor:
    | power (("*" | "/" | "quot" | "rem") power)*

power:
    | call ("**" power)?

call:
    | atom ("(" call_arguments ")")?

call_arguments:
    | expression ("," expression)*

atom:
    | "True" | "False"
    | identifier
    | number
    | string
    | "(" expression ")"

identifier:
    | /[a-zA-Z_][a-zA-Z0-9_]*/

number:
    | /[0-9]+(\.[0-9]+)?/

string:
    | /"(\\.|[^"])*"/