Lexer and Parser - studiofu/brain GitHub Wiki

Resources

Simple Parser

https://www.codeproject.com/Articles/345888/How-to-write-a-simple-interpreter-in-JavaScript

Example of further modifying the program to show the lex, tree and the evaluated result

tokens = lex('(1+2*3)+99') // to evaluate the expression "(1+2*3)+99"

C:\Projects\demo-type>node o.js
## LEX #########################################################
[
  {
    "type": "operator",
    "value": "("
  },
  {
    "type": "number",
    "value": 1
  },
  {
    "type": "operator",
    "value": "+"
  },
  {
    "type": "number",
    "value": 2
  },
  {
    "type": "operator",
    "value": "*"
  },
  {
    "type": "number",
    "value": 3
  },
  {
    "type": "operator",
    "value": ")"
  },
  {
    "type": "operator",
    "value": "+"
  },
  {
    "type": "number",
    "value": 99
  },
  {
    "type": "(end)"
  }
]
debug: {"type":"operator","value":"("}
debug: {"type":"number","value":1}
debug: {"type":"number","value":2}
debug: {"type":"number","value":3}
debug: {"type":"number","value":99}

## TREE #########################################################
[
  {
    "type": "+",
    "left": {
      "type": "+",
      "left": {
        "type": "number",
        "value": 1
      },
      "right": {
        "type": "*",
        "left": {
          "type": "number",
          "value": 2
        },
        "right": {
          "type": "number",
          "value": 3
        }
      }
    },
    "right": {
      "type": "number",
      "value": 99
    }
  }
]
tree size: 1

## RESULT #########################################################
106