MCPcopy Create free account
hub / github.com/NICUP14/MiniLang / Parser

Class Parser

src/Parser.py:168–2689  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

166
167
168class Parser:
169 def __init__(self, parser: Parser = None) -> None:
170 if parser is not None:
171 self.source = parser.source
172 self.lineno = parser.lineno
173 self.tokens = list(parser.tokens)
174 self.tokens_idx = parser.tokens_idx
175 self.lines = list(parser.lines)
176 self.lines_idx = parser.lines_idx
177 else:
178 self.source = ''
179 self.lineno = 1
180 self.tokens = []
181 self.tokens_idx = 0
182 self.lines = []
183 self.lines_idx = 0
184
185 def parse(self, source: str = '') -> Node:
186 if source != '':
187 self.source = source
188 self.lines = open(source, 'r').readlines()
189 self.skip_blank_lines()
190
191 self.tokens = tokenize(self.curr_line())
192 return self.program_statement()
193
194 def no_more_lines(self, check_next_lines: bool = False) -> bool:
195 return self.lines_idx + (
196 1 if check_next_lines else 0) >= len(self.lines)
197
198 def curr_line(self) -> str:
199 return self.lines[self.lines_idx]
200
201 def skip_blank_lines(self) -> None:
202 while self.curr_line().lstrip('\t ') == '\n' or self.curr_line().lstrip('\t ').startswith('#'):
203 self.next_line()
204
205 def next_line(self) -> str:
206 self.lineno += 1
207 self.lines_idx += 1
208
209 if self.no_more_lines():
210 print_error('next_line', 'No more lines in list', self)
211 self.skip_blank_lines()
212
213 self.tokens_idx = 0
214 self.tokens = tokenize(self.curr_line())
215 return self.curr_line()
216
217 def no_more_tokens(self) -> bool:
218 return self.tokens_idx >= len(self.tokens)
219
220 def lookahead_token(self) -> Token:
221 return self.tokens[self.tokens_idx + 1]
222
223 def curr_token(self) -> Optional[Token]:
224 if self.no_more_tokens():
225 self.next_line()

Callers 5

expand_macroMethod · 0.85
_gen_fun_callMethod · 0.85
import_statementMethod · 0.85
fun_declarationMethod · 0.85
macro_statementMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected