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

Method array_declaration

src/Parser.py:2388–2428  ·  view source on GitHub ↗
(self, name: str)

Source from the content-addressed store, hash-verified

2386 return Node(NodeKind.OP_ASSIGN, elem.ntype, '=', acc_node, elem)
2387
2388 def array_declaration(self, name: str) -> Node:
2389 root = None
2390 elems = []
2391
2392 while self.curr_token().kind != TokenKind.RBRACE:
2393 token = self.match_token_from(
2394 (TokenKind.INT_LIT, TokenKind.CHAR_LIT, TokenKind.IDENT))
2395
2396 if self.curr_token().kind != TokenKind.RBRACE:
2397 self.match_token(TokenKind.COMMA)
2398
2399 elems.append(token)
2400
2401 arr = Def.arr_map[name]
2402 if len(elems) > arr.elem_cnt:
2403 print_error('array_declaration',
2404 f'Array {name} can only hold {arr.elem_cnt} elements', self)
2405
2406 elems.reverse()
2407 nodes = list(map(self.to_node, elems))
2408
2409 idx = 0
2410 arr_node = Node(NodeKind.IDENT, type_of_ident(name), name)
2411
2412 if len(nodes) == 1:
2413 root = self.array_elem_declaration(arr_node, nodes.pop(), 0)
2414 else:
2415 while len(nodes) > 0:
2416 if root is None:
2417 node = nodes.pop()
2418 node2 = nodes.pop()
2419 root = Node(NodeKind.GLUE, void_ckind, '', self.array_elem_declaration(
2420 arr_node, node, idx), self.array_elem_declaration(arr_node, node2, idx + 1))
2421 idx += 2
2422 else:
2423 node = nodes.pop()
2424 root = Node(
2425 NodeKind.GLUE, void_ckind, '', root, self.array_elem_declaration(arr_node, node, idx))
2426 idx += 1
2427
2428 return root
2429
2430 def heredoc_declaration(self):
2431 self.next_line()

Callers 1

declareMethod · 0.95

Calls 7

curr_tokenMethod · 0.95
match_token_fromMethod · 0.95
match_tokenMethod · 0.95
print_errorFunction · 0.90
NodeClass · 0.90
type_of_identFunction · 0.90

Tested by

no test coverage detected