Nur ein AnkerSyntaxnotation

Die im folgenden verwendete Notation zur Beschreibung der Syntax nennt sich EBNF–Notation (Erweiterte Backus–Naur–Form). Es wurden die Regeln verwendet, wie sie im unten genannten Wikipedia-Artikel aufgeführt werden.

Weitergehende Informationen zu EBNF findet man hier:

Die folgende Grammatik ist höchstwahrscheinlich nicht vollständig.

Nur ein AnkerSchlüsselwörter


class const else float func if

instance int other prototype return self

string this var void while


Nur ein AnkerLexikalische Syntax


identifier = letter { ( nondigit | digit ) } ;

graphic_char = ? alle sichtbaren Zeichen ? ;

letter = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N"
| "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"
| "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n"
| "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" ;

nondigit = "_" | letter ;

string = '"' { graphic_char - '"'} '"' ;

digit = "0" | non_zero_digit ;

non_zero_digit = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;

integer = [sign] nonzero_digit {digit} | "0" ;

float = [sign] {digit}.{digit} ;

sign = "+" | "-" ;


Nur ein AnkerAusdrücke


bool_op = "||" | "&&" | "!" ;

cmp_op = "<" | "<=" | ">" | ">=" | "==" | "!=" ;

calc_op = "+" | "-" | "*" | "/" | "%" ;

bit_op = "&" | "|" | "<<" ;

operator = bool_op | cmp_op | calc_op | bit_op ;

name = identifier | function_call ;

indexed_component = name "[" integer "]" ;

selected_component = name "." identifier | name "->" identifier ;

function_call = name "(" [expression_list] ")" ;

expression = primary_expression ;

expression_list = expression {, expression} ;

primary_expression = integer | name | string ;

bit_expression = primary_expression {bit_op primary_expression} ;

calc_expression = bit_expression {calc_op bit_expression} ;

cmp_expression = calc_expression {cmp_op calc_expression} ;

bool_expression = cmp_expression {bool_op cmp_expression};


Nur ein AnkerAnweisungen


statement_list = { statement ";"} ;

statement = compound_statement | simple_statement ;

simple_statement = assignment_statement | jump_statement ;

compound_statement = statement_block | if_statement ;

assignment_statement = identifier assignement_op expression ;

assignment_op = "=" ;

statement_block = "{" statement_list "};" ;

if_statement = "if" "(" expression ")" statement_block
{"else" statement_block} ;

jump_statement = "return" [expression] ;

call_statement = name "(" expression_list ")" ;


Nur ein AnkerDeklarationen


declaration_list = { declaration ";" } ;

declaration_block = "{" declaration_list "};" ;

declaration = object_decl | type_decl ;

cv_spec = const | var ;

type_decl = class_decl | prototype_decl | instance_decl ;

base_classname = name ;

class_identifier = identifier;

class_decl = "class" class_identifier "(" base_classname ")" declaration_block ;

prototype_decl = "prototype" class_identifier identifier declaration_block ;

instance_decl = "instance" class_identifier identifier "(" class_identifier ")" declaration_block ;

function_decl = "func" type_identifier identifier "(" expression ")" statement_block ;