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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions