-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathBangla.g4
More file actions
117 lines (91 loc) · 1.95 KB
/
Copy pathBangla.g4
File metadata and controls
117 lines (91 loc) · 1.95 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
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
grammar Bangla;
// Parser Rules
// Parser Rules
program
: statement* EOF
;
statement
: declaration
| assignment
| arrayDeclaration
| arrayAssignment
| fileOperation
| flowControl
;
declaration
: type IDENTIFIER (ASSIGN_OP expression)?
;
assignment
: IDENTIFIER ASSIGN_OP expression
;
arrayDeclaration
: type IDENTIFIER '[' NUMBER ']'
;
type
: INTEGER
;
arrayAssignment
: IDENTIFIER '[' expression ']' ASSIGN_OP expression
;
fileOperation
: 'filekhola' '(' STRING ')'
| 'filelekha' '(' STRING ',' STRING ')'
| 'filepora' '(' STRING ')'
;
expression
: IDENTIFIER
| NUMBER
| STRING
| expression ARITH_OP expression
| IDENTIFIER '[' expression ']'
| '(' expression ')'
;
flowControl
: ifElse
| whileLoop
| forLoop
;
ifElse
: 'jodi' '(' condition ')' statements ('nahole' statements)?
;
whileLoop
: 'jokhon' '(' condition ')' statements
;
forLoop
: 'proti' '(' (declaration | assignment)? ';' condition? ';' assignment? ')' statements
;
condition
: expression COMPARE_OP expression
;
statements
: statement+
;
//for Lexical Rules
INTEGER : 'poornoshonkha';
IF : 'jodi';
NOT : 'na';
AND : 'ebong';
OR : 'othoba';
// Keywords
FILEKHOLA : 'filekhola';
FILELEKHA : 'filelekha';
FILEPORA : 'filepora';
NAHOLE : 'nahole';
JOKHON : 'jokhon';
PROTI : 'proti';
// Symbols
LBRACKET : '[';
RBRACKET : ']';
SEMICOLON : ';';
LPAREN : '(';
RPAREN : ')';
COMMA : ',';
// Tokens
IDENTIFIER : [a-zA-Z_][a-zA-Z_0-9]*;
NUMBER : [0-9]+;
STRING : '"' (~["\r\n])* '"';
ASSIGN_OP : '=';
ARITH_OP : '+' | '-' | '*' | '/';
COMPARE_OP : '==' | '!=' | '<' | '>' | '<=' | '>=';
// Whitespace
WS : [ \t\r\n]+ -> skip;