A templating language that looks like Lisp and compiles to HTML
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.js 709B

12345678910111213141516171819202122232425262728
  1. const Compiler = require('./compiler')
  2. const Env = require('./env')
  3. const Evaluator = require('./evaluator')
  4. const Lexer = require('./lexer')
  5. const OsloError = require('./osloError')
  6. const Parser = require('./parser')
  7. module.exports = function oslo(source, context) {
  8. const lexer = new Lexer()
  9. const tokens = lexer.scan(source)
  10. const parser = new Parser()
  11. const tree = parser.parse(tokens)
  12. if (tree.constructor == OsloError) {
  13. return tree
  14. }
  15. const evaluator = new Evaluator()
  16. const evaluatedTree = evaluator.eval(tree, new Env())
  17. if (evaluatedTree.constructor == OsloError) {
  18. return evaluatedTree
  19. }
  20. const compiler = new Compiler()
  21. return compiler.compile(evaluatedTree)
  22. }