-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsyntax
126 lines (98 loc) · 2.45 KB
/
syntax
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
116
117
118
119
120
121
122
123
124
125
126
first_unit:
unit_list EOF
unit_list:
unit
| unit ',' unit_list
unit:
assignment_message
assignment_message:
keyword_message
| keyword_message '=' assignment_message
keyword_message:
keyword_selector_chain
| binary_message keyword_selector_chain
keyword_selector_chain:
IDENTIFIER ':' binary_message
| IDENTIFIER ':' binary_message keyword_selector_chain
binary_message:
unary_message binary_selector_chain
binary_selector_chain:
MESSAGE_SYMBOL unary_message
| MESSAGE_SYMBOL unary_message binary_selector_chain
unary_message:
lhs_message unary_selector_chain
unary_selector_chain:
IDENTIFIER
| IDENTIFIER unary_selector_chain
lhs_message:
MESSAGE_SYMBOL subscript_message
| lhs_message MESSAGE_SYMBOL subscript_message
subscript_message:
literal subscript_selector_chain
subscript_selector_chain:
'[' unit_list ']'
| '[' unit_list ']' subscript_selector_chain
literal:
scalar
| '(' unit_list ')'
| '[' unit_list ']'
| '{' param_list unit_list '}'
| '%' '(' bit_list ')'
| '%' '[' unit_list ']'
| '%' '{' association_list '}'
| '#' method_definition
param_list:
IDENTIFIER '|'
| IDENTIFIER ',' param_list
bit_list:
bit
| bit ',' bit_list
bit:
scalar
| scalar ':' ':' INTEGER
association_list:
key ':' unit
| key ':' unit ',' association_list
key:
IDENTIFIER
| STRING
method_definition:
keyword_list '=>' method_body
| IDENTIFIER '=>' method_body
| MESSAGE_SYMBOL '=>' method_body
| MESSAGE_SYMBOL IDENTIFIER '=>' method_body
| '[' IDENTIFIER ']' '=>' method_body
method_body:
unit
| { unit_list }
keyword_list:
IDENTIFIER ':' IDENTIFIER
| IDENTIFIER ':' IDENTIFIER keyword_list
scalar:
':' GLOBAL
':' INSTANCE
':' IDENTIFIER
| INTEGER
| FLOAT
| STRING
| variable
variable:
'$nil'
| '$false'
| '$true'
| '@self'
| '@super'
| GLOBAL
| INSTANCE
| IDENTIFIER
FLOAT: ^\d+(_\d+)*\.\d+(_\d+)*
INTEGER: ^(?:0[bBoOxX][\da-fA-F_]+|0|[1-9][\d_]*)
STRING: ^(['"]).*?\1
IDENTIFIER: ^[a-zA-Z_\p{L}\p{S}][a-zA-Z0-9_\p{L}\p{N}\p{M}\p{S}]*
INSTANCE: ^@[a-zA-Z_\p{L}\p{S}][a-zA-Z0-9_\p{L}\p{N}\p{M}\p{S}]*
GLOBAL: ^$[a-zA-Z_\p{L}\p{S}][a-zA-Z0-9_\p{L}\p{N}\p{M}\p{S}]*
MESSAGE_SYMBOL: ^[!?+\-*/\\~<>=|&^;.`]+
SYNTAX_SYMBOL: ^[()\[\]{},:#%]
NEWLINE: ^\n
WHITESPACE: ^\s+
EOF: ends parsing