forked from iincity/hermes
-
Notifications
You must be signed in to change notification settings - Fork 1
/
grammar.txt
115 lines (82 loc) · 2.45 KB
/
grammar.txt
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
hermes_parser_parse
""" statements: compound_statement """
compound_statement is one statemnet or a list of statements (";" is OPTIONAL)
hermes_parser_parse_statements
""" compound_statement: statement (";" statement)* [";"] """
hermes_parser_parse_statement
""" statement: TOKEN_ID
| TOKEN_NUMBER_VALUE
| TOKEN_CHAR_VALUE
| TOKEN_FLOAT_VALUE
| TOKEN_NUMBER_VALUE
| TOKEN_INTEGER_VALUE
| EMTPY (NOOP)
"""
TOKEN_ID:
""" TOKEN_ID: STATEMENT_WHILE
| STATEMENT_IF
| (VALUE_FALSE | VALUE_TRUE)
| VALUE_NULL
| STATEMENT_RETURN
| STATEMENT_NEW
| STATEMENT_ITERATE
| STATEMENT_ASSERT
| FUNCTION_DEFINITION ->(hermes_parser_parse_function_definition)
|VARIABLE ( "(" | ("." expr) | ("[" expr "]") )*
or
| VARIABLE "(" ->(hermes_parser_parse_function_call)
| VARIABLE "." expr
| VARIABLE "[" expr "]"
| VARIABLE ->(hermes_parser_parse_variable)
"""
hermes_parser_parse_while
""" STATEMENT_WHILE:
"while" "(" expr ")" "{" (compound_ statement)* "}"
"""
hermes_parser_parse_if
""" STATEMENT_IF:
"if" "(" expr ")" "{" (compound_statement)* "}" ("else" STATEMENT_IF)?
hermes_parser_parse_boolean
""" boolean: "true" | "false" """
hermes_parser_parse_null
""" null: "NULL" """
hermes_parser_parse_new
""" new: "new" expr """
hermes_parser_parse_iterate
""" iterate: "iterate" expr "with" (FUNCTION_DEFINITION | VARIABLE)
hermes_parser_parse_assert
""" assert: "assert" expr """
hermes_parser_parse_function_definition
""" FUNCTION_DEFINITION:
type VARIABLE ("(" [expr] ")" "{" (compound_statement)* "}") | "=" ((type FUNCTION_DEFINITION | VARIABLE) | (enum | expr))
"""
hermes_parser_parse_function_call
""" FUNCTION_CALL: VARIABLE "(" expr (, expr)* ")"
"""
hermes_parser_parse_expr
""" expr : term ((PLUS | MINUS) term)* """
hermes_parser_parse_term
""" term: FUNCTION_DEFINITION
| factor ((TOKEN_DIV
| TOKEN_STAR
| TOKEN_AND
| TOKEN_LESS_THAN
| TOKEN_LARGER_THAN
| TOKEN_EQUALS_EQUALS
| TOKEN_NOT_EQUALS) factor)*
"""
`hermes_parser_parse_factor`
""" factor: boolean
| null
| STATEMENT_NEW
| VARIABLE
| TOKEN_DOT factor
| TOKEN_LBRACKET expr TOKEN_RBRACKET
| TOKEN_NUMBER_VALUE
| TOKEN_INTEGER_VALUE
| TOKEN_FLOAT_VALUE
| TOKEN_STRING_VALUE
| TOKEN_CHAR_VALUE
"""
hermes_parser_parse_variable
""" VARIABLE: ID | (variable_assignment_left variable_value) | (TOKEN_PLUS_EQUALS| TOKEN_MINUS_EQUALS | TOKEN_STAR_EQUALS) expr """