Abstract syntax tree: Difference between revisions

Content deleted Content added
Clarifying the definition of an AST.
Jrlevine (talk | contribs)
mNo edit summary
Line 1:
In [[computer science]], an '''abstract syntax tree''' (AST) is a [[finite]], labeled, [[directed tree]], where the nodes are labeled by operators, and the edges represent the operands of the node operators. Thus, the leaves have nullary operators, i.e., variables or constants. In computing, it is used in a [[parser]] as an intermediate between a [[parse tree]] and a [[data structure]], the latter which is often used as a [[compiler (computing)|compiler]] or [[interpreter (computing)|interpreter]]'s internal [[intermediate representation|representation]] of a [[computer program]] while it is being [[compiler optimization|optimized]] and from which code generation is performed. The range of all possible such structures is described by the [[abstract syntax]]. An AST differs from a parse tree by omitting nodes and edges for syntax rules that do not affect the
semantics of the program. The classic example of such an omission is grouping parentheses, since in an AST the grouping of operands is explicit in the tree structure.
 
Creating an AST in a [[parser]] for a language described by a [[context free grammar]], as nearly all programming languages are, is straightforward. Most rules in the grammar creates a new node with the nodes edges being the symbols in the rule. Rules that do not contribute to the AST, such as grouping rules, merely pass through the node for one of their symbols. Alternatively, a parser can create a full parse tree, and a post-pass over the parse tree can convert it to an AST by removing the nodes and edges not used in the abstract syntax.
Sometimes the code behind abstract syntax trees (classes, for example) is generated by a parser generator, but many language engineers prefer to design and implement the tree themselves, as it expresses the fundamental structure of the language.
 
{{compu-stub}}