code: def test_multiple_rules(self) -> None:
      grammar = """
          start: a b
          a: 'a'
          b: 'b'
          """
      rules = parse_string(grammar, GrammarParser)
  
      printer = ASTGrammarPrinter()
      lines: List[str] = []
      printer.print_grammar_ast(rules, printer=lines.append)
  
      output = "\n".join(lines)
      expected_output = textwrap.dedent(
          """\
          └──Rule
             └──Rhs
                └──Alt
                   ├──NamedItem
                   │  └──NameLeaf('a')
                   └──NamedItem
                      └──NameLeaf('b')
  
          └──Rule
             └──Rhs
                └──Alt
                   └──NamedItem
                      └──StringLeaf("'a'")
  
          └──Rule
             └──Rhs
                └──Alt
                   └──NamedItem
                      └──StringLeaf("'b'")
                          """
      )
  
      self.assertEqual(output, expected_output)
  
imports: import ast
  import difflib
  import io
  import textwrap
  import unittest
  from test import test_tools
  from typing import Dict, Any
  from tokenize import TokenInfo, NAME, NEWLINE, NUMBER, OP
label_desc: Use image node_id 2 for calling the TestGrammarVisualizer obj's underlying member method code with example usage: obj.test_multiple_rules() without return types