Skip to content

Ability to get indented string tree  #1502

@KvanTTT

Description

@KvanTTT

At present time all runtimes have a method for getting result tree in lisp format toStringTree. It would be also good to have a method toStringTreeIndented. Indented output more applicable for string trees comparison (diff). See the sample output for input grammar and text below.

Grammar

grammar Test;

expression
    : <assoc=right> expression '^' expression
    | expression ('*' | '/') expression
    | expression ('+' | '-') expression
    | '(' expression ')'
    | ID
    ;
    
ID:     [a-zA-Z] [0-9a-zA-Z]*;
DIGIT:  [0-9]+;
WS:     [ \t\r\n] -> skip;

Text

a1 * (a2 + a3 + a4 - a5 ^ a6 ^ (a8 + a9 / a10)) * a11 * a12

toStringTree method

(expression (expression (expression (expression a1) * (expression ( (expression (expression (expression (expression a2) + (expression a3)) + (expression a4)) - (expression (expression a5) ^ (expression (expression a6) ^ (expression ( (expression (expression a8) + (expression (expression a9) / (expression a10))) ))))) ))) * (expression a11)) * (expression a12))

toStringTreeIndented method

(expression
  (expression
    (expression
      (expression
        'a1'
      )
      '*'
      (expression
        '('
        (expression
          (expression
            (expression
              (expression
                'a2'
              )
              '+'
              (expression
                'a3'
              )
            )
            '+'
            (expression
              'a4'
            )
          )
          '-'
          (expression
            (expression
              'a5'
            )
            '^'
            (expression
              (expression
                'a6'
              )
              '^'
              (expression
                '('
                (expression
                  (expression
                    'a8'
                  )
                  '+'
                  (expression
                    (expression
                      'a9'
                    )
                    '/'
                    (expression
                      'a10'
                    )
                  )
                )
                ')'
              )
            )
          )
        )
        ')'
      )
    )
    '*'
    (expression
      'a11'
    )
  )
  '*'
  (expression
    'a12'
  )
)

Also it is usefull to have a method that returns a tree in JSON format (tree serialization in fact).

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions