Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
daedalus:ebnf [2015/08/18 22:15] 127.0.0.1 Externe Bearbeitung |
daedalus:ebnf [2016/12/31 10:11] (aktuell) milky-way update formatierung |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | == Syntaxnotation == | + | ====== Syntaxnotation ====== |
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. | 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: | Weitergehende Informationen zu EBNF findet man hier: | ||
- | *http://de.wikipedia.org/wiki/EBNF | + | [[http://de.wikipedia.org/wiki/EBNF]] |
- | *http://www.cl.cam.ac.uk/~mgk25/iso-14977.pdf | + | [[http://www.cl.cam.ac.uk/~mgk25/iso-14977.pdf]] |
Die folgende Grammatik ist höchstwahrscheinlich nicht vollständig. | Die folgende Grammatik ist höchstwahrscheinlich nicht vollständig. | ||
- | Edit: Ich (Lehona), habe eine neue Version hochgeladen, die zu großen Teilen völlig neu geschrieben wurde und Daedalus wesentlich passender beschreibt, in der alten Version gab es schrecklick viele Unstimmigkeiten. Die Notation ist damit formal nicht ganz korrekt, ich habe mich eher an der boost::spirit-Notation orientiert(der Stern für Wiederholung ist z.B. vor dem Ausdruck anstatt nach dem Ausdruck), aber eigentlich kompatibel. | + | Edit: Ich (Lehona), habe eine neue Version hochgeladen, die zu großen Teilen völlig neu geschrieben wurde und Daedalus wesentlich passender beschreibt, in der alten Version gab es schrecklich viele Unstimmigkeiten. Die Notation ist damit formal nicht ganz korrekt, ich habe mich eher an der boost::spirit-Notation orientiert(der Stern für Wiederholung ist z.B. vor dem Ausdruck anstatt nach dem Ausdruck), aber eigentlich kompatibel. |
- | + | ||
- | == Schlüsselwörter == | + | |
+ | ===== Schlüsselwörter ===== | ||
+ | <code> | ||
class const else float func if | class const else float func if | ||
Zeile 16: | Zeile 16: | ||
string this var void | string this var void | ||
+ | </code> | ||
- | + | ===== Lexikalik ===== | |
- | == Lexikalik == | + | <code> |
identifier = (letter|"_") *( nondigit | digit ); | identifier = (letter|"_") *( nondigit | digit ); | ||
Zeile 41: | Zeile 41: | ||
float = ["+" | "-"] (+digit '.' *digit | *digit '.' +digit | +digit); | float = ["+" | "-"] (+digit '.' *digit | *digit '.' +digit | +digit); | ||
- | + | </code> | |
- | + | ||
- | == [[Anchoer q4]]Ausdrücke == | + | |
+ | ===== Ausdrücke ===== | ||
+ | <code> | ||
bool_op = "||" | "&&" ; | bool_op = "||" | "&&" ; | ||
Zeile 72: | Zeile 72: | ||
prim_expr = *un_op (identifier["."identifier] | integer | call_statement) ; | prim_expr = *un_op (identifier["."identifier] | integer | call_statement) ; | ||
- | | + | </code> |
- | == Anweisungen == | + | ===== Anweisungen ===== |
+ | <code> | ||
statement_list = *(statement ";") ; | statement_list = *(statement ";") ; | ||
Zeile 90: | Zeile 90: | ||
call_statement = call_exp ";" ; | call_statement = call_exp ";" ; | ||
+ | </code> | ||
- | + | ===== Deklarationen ===== | |
- | == Deklarationen == | + | <code> |
declaration_list = declaration *("," declaration) ; | declaration_list = declaration *("," declaration) ; | ||
Zeile 115: | Zeile 115: | ||
function_decl = "func" identifier "(" [declaration_list] ")" statement_block ; | function_decl = "func" identifier "(" [declaration_list] ")" statement_block ; | ||
+ | </code> |