Miss any of our Open RFC calls?Watch the recordings here! »

euclid-parser

2.0.4 • Public • Published

euclid-parser Build Status

Parse geometry proof language for diagram-building instructions. Built using PEG.js. Play with the grammar online here.

Install

npm install euclid-parser

Or:

git clone https://github.com/anandthakker/euclid-parser.git
cd euclid-parser
npm install

Usage

var parser = require('euclid-parser');
 
var input = [
  'let a be the point (1,2)',
  'let b = (3, 4)',
  'let s be the segment from a to b',
  'let t be the line determined by a and b',
  'let o be the circle with center a containing b',
  'let x be the intersection of circle o and line t',
  'let y be the intersection of circle o and line t that isn\'t x'
].join('\n');
 
console.log(parser.parse(input));

Result:

[{
  "type": "point",
  "x": 1,
  "y": 2,
  "source": {
    "text": "the point (1,2)",
    "line": 1,
    "column": 10
  },
  "name": "a"
}, {
  "type": "point",
  "x": 3,
  "y": 4,
  "source": {
    "text": "(3, 4)",
    "line": 2,
    "column": 9
  },
  "name": "b"
}, {
  "type": "segment",
  "points": [{
    "type": "point",
    "name": "a"
  }, {
    "type": "point",
    "name": "b"
  }],
  "source": {
    "text": "the segment from a to b",
    "line": 3,
    "column": 10
  },
  "name": "s"
}, {
  "type": "line",
  "points": [{
    "type": "point",
    "name": "a"
  }, {
    "type": "point",
    "name": "b"
  }],
  "source": {
    "text": "the line determined by a and b",
    "line": 4,
    "column": 10
  },
  "name": "t"
}, {
  "type": "circle",
  "source": {
    "text": "the circle with center a containing b",
    "line": 5,
    "column": 10
    },
  "center": {
    "type": "point",
    "name": "a"
    },
  "boundaryPoint": {
    "type": "point",
    "name": "b"
  },
  "name": "o"
}, {
  "type": "intersection",
  "objects": [{
    "type": "circle",
    "name": "o"
  }, {
    "type": "line",
    "name": "t"
  }],
  "which": null,
  "source": {
    "text": "the intersection of circle o and line t",
    "line": 6,
    "column": 10
  },
  "name": "x"
}, {
  "type": "intersection",
  "objects": [{
    "type": "circle",
    "name": "o"
  }, {
    "type": "line",
    "name": "t"
  }],
  "which": {
    "op": "not",
    "args": [
    "x"
    ]
  },
  "source": {
    "text": "the intersection of circle o and line t that isn't x",
    "line": 7,
    "column": 10
  },
  "name": "y"
}]
 

Install

npm i euclid-parser

DownloadsWeekly Downloads

1

Version

2.0.4

License

MIT

Last publish

Collaborators

  • avatar