The graphical representations of a grammar are called Syntax or Structural tree.
Whether your language input is (Markdown, HTML, or prose, ..), it needs to be parsed to a workable format. Such a format is called a syntax tree.
There is actually two well-known trees:
In short, a A CST has all information needed to restore the original document completely, AST does not.
For example for an HTML document, CSTs house info on style such as tabs or spaces, but ASTs do not. This makes ASTs often easier to work with.
ASTs can still recreate an exact syntactic representation.
A parse tree (CST) is a record of the rules (and tokens) used to match some input text whereas a abstract syntax tree records the structure of the input and is insensitive to the grammar that produced it.
There are an infinite number of grammars for any single language and hence every grammar will result in a different tree form because of all the intermediate rules.
An abstract syntax tree is a far superior intermediate form precisely because of this insensitivity and because it highlights the structure of the language not the grammar.
It's best to look at an example. For input 3+4 you really want to use the following intermediate form:
+
| \
3 4
That is, the operator at the root and 3 and 4 as operands (children). In child-sibling form, you'd have
+
|
3 -- 4
Ok, so now a parse tree. I'll pick an extremely simple one out of the infinite number:
expr
|
plus
| \ \
3 + 4
A syntax tree (from a compiler,…) may be used to perform:
Most of these operations will need to treat nodes that represent assignment statements differently from nodes that represent variables or arithmetic expressions.