Skip to content

Commit

Permalink
Ensure that immutable nodes are marked in parsed trees as well (#252)
Browse files Browse the repository at this point in the history
  • Loading branch information
renatahodovan authored Nov 20, 2024
1 parent d8f5864 commit d6d95ce
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions grammarinator/tool/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,23 +191,25 @@ def _antlr_to_grammarinator_tree(self, antlr_node, parser, visited=None):
return None, 0, []

if not self._hidden:
node = UnlexerRule(name=(name,), src=text)
node = UnlexerRule(name=(name,), src=text, immutable=(name,) in self._graph.immutables)
rules.add(node)
else:
node = []
hidden_tokens_to_left = parser.getTokenStream().getHiddenTokensToLeft(antlr_node.symbol.tokenIndex, -1) or []
for token in hidden_tokens_to_left:
if parser.symbolicNames[token.type] in self._hidden:
if token not in visited:
node.append(UnlexerRule(name=(parser.symbolicNames[token.type],), src=token.text))
hidden_name = (parser.symbolicNames[token.type],)
node.append(UnlexerRule(name=hidden_name, src=token.text, immutable=hidden_name in self._graph.immutables))
visited.add(token)

node.append(UnlexerRule(name=(name,), src=text))
node.append(UnlexerRule(name=(name,), src=text, immutable=(name,) in self._graph.immutables))
hidden_tokens_to_right = parser.getTokenStream().getHiddenTokensToRight(antlr_node.symbol.tokenIndex, -1) or []
for token in hidden_tokens_to_right:
if parser.symbolicNames[token.type] in self._hidden:
if token not in visited:
node.append(UnlexerRule(name=(parser.symbolicNames[token.type],), src=token.text))
hidden_name = (parser.symbolicNames[token.type],)
node.append(UnlexerRule(name=hidden_name, src=token.text, immutable=hidden_name in self._graph.immutables))
visited.add(token)
rules.update(node)
depth = 0
Expand Down

0 comments on commit d6d95ce

Please sign in to comment.