Source: compiler.js

import * as ohm from 'ohm-js'
import { starlingGrammar as grammarString } from './grammar.js'
import { actions, resolveReferences as resolve } from './syntaxtree.js'
import { transpile } from './mmgen.js'

/**
 * Takes in a Starling string.
 * Returns array with Starling string AST and Starling string compiled to Metamath.
 * @param {string} star
 * @returns {Array}
 * @example
 *
 *    compile("define 0;")
 */
const compile = (star) => {
  const langGrammar = ohm.grammar(grammarString)
  const s = langGrammar.createSemantics().addOperation('makeAST', actions)
  const matchResult = langGrammar.match(star)
  const adapter = s(matchResult).makeAST()
  const ast = resolve(adapter)
  return [ast, transpile(ast)]
}

export { compile }