AST

An Abstract Syntax Tree (AST) is a tree representation of the abstract syntactic structure of an expression. Each node in the tree denotes a construct occurring in the expression. Using AST for storing mathematical expressions offers several advantages, such as easier parsing, evaluation, and modification.

Detailed Explanation of AST

  1. Nodes and Edges: In an AST, nodes represent the operators, functions, and operands (constants or variables). Edges represent the relationships between these nodes.

  2. Types of Nodes:

    • Literal: Represents a constant value (e.g., numbers).

    • Variable: Represents a variable (e.g., x, y).

    • BinaryExpression: Represents a binary operation (e.g., addition, subtraction).

    • FunctionCall: Represents a function call (e.g., sqrt, sin).

Example Expression

Let's take the example expression 3 * (4 + 5) - sqrt(16) and break it down into an AST.

Expression: 3 * (4 + 5) - sqrt(16)

AST Representation:

        (-)
       /   \
     (*)    sqrt
    /   \     \
   3    (+)    16
       /   \
      4     5

JSON Representation of the AST

The AST can be represented in JSON format for storage purposes. Here is how you can represent the example expression:

{
  "type": "BinaryExpression",
  "operator": "-",
  "left": {
    "type": "BinaryExpression",
    "operator": "*",
    "left": { "type": "Literal", "value": 3 },
    "right": {
      "type": "BinaryExpression",
      "operator": "+",
      "left": { "type": "Literal", "value": 4 },
      "right": { "type": "Literal", "value": 5 }
    }
  },
  "right": {
    "type": "FunctionCall",
    "name": "sqrt",
    "arguments": [{ "type": "Literal", "value": 16 }]
  }
}

Explanation of JSON Structure

  • type: Describes the type of node (e.g., BinaryExpression, Literal, FunctionCall).

  • operator: For BinaryExpression, this is the operator (e.g., +, -, *, /).

  • left / right: The left and right children of a binary operation.

  • name: For FunctionCall, this is the function name (e.g., sqrt).

  • arguments: For FunctionCall, this is an array of arguments passed to the function.

Last updated