-
Notifications
You must be signed in to change notification settings - Fork 89
Expand file tree
/
Copy pathgrammar.ebnf
More file actions
55 lines (55 loc) · 2.21 KB
/
grammar.ebnf
File metadata and controls
55 lines (55 loc) · 2.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//< parser-grammar parser-grammar-program parser-grammar-top
program : [[statement | expression] Delimiter ? ]*;
//> parser-grammar-program
//< parser-grammar-statements
statement : [declaration | definition];
declaration : Extern prototype;
//< parser-grammar-defproto
definition : Def prototype expression;
//> parser-grammar-top parser-grammar-statements
//< parser-grammar-proto binary-grammar unary-grammar
prototype :
//> parser-grammar parser-grammar-defproto parser-grammar-proto
/*j*/[
//< parser-grammar parser-grammar-defproto parser-grammar-proto
/*j*/Ident
//> parser-grammar parser-grammar-defproto parser-grammar-proto
/*jw*/ | Binary Op Number ?
//> binary-grammar
/*jw*/ | Unary Op
//< binary-grammar
/*j*/]
//< parser-grammar parser-grammar-defproto parser-grammar-proto
/*jw*/ OpeningParenthesis [Ident Comma ?]* ClosingParenthesis;
//> parser-grammar-defproto parser-grammar-proto binary-grammar unary-grammar
//< parser-grammar-expr parser-grammar-binary
expression : [primary_expr (Op primary_expr)*];
//> parser-grammar-binary
//< parser-grammar-primary if-grammar for-grammar unary-grammar mutable-grammar-var
primary_expr : [Ident | Number | call_expr | parenthesis_expr
//> parser-grammar parser-grammar-expr parser-grammar-primary
/*jw*/ | conditional_expr
//> if-grammar
/*jw*/ | loop_expr
//> for-grammar
/*jw*/ | unary_expr
//> unary-grammar
/*jw*/ | var_expr
//< parser-grammar parser-grammar-expr parser-grammar-primary if-grammar for-grammar unary-grammar
/*j*/ ];
//> if-grammar for-grammar unary-grammar mutable-grammar-var
call_expr : Ident OpeningParenthesis [expression Comma ?]* ClosingParenthesis;
parenthesis_expr : OpeningParenthesis expression ClosingParenthesis;
//> parser-grammar parser-grammar-expr parser-grammar-primary
//< if-grammar
conditional_expr : If expression Then expression Else expression;
//> if-grammar
//< for-grammar
loop_expr : For Ident Op= expression Comma expression [Comma expression]? In expression;
//> for-grammar
//< unary-grammar
unary_expr: : Op primary_expr;
//> unary-grammar
//< mutable-grammar-var
var_expr : Var Ident [Op= expression]? [Comma Ident [Op= expression]?]* In expression;
//> mutable-grammar-var