神刀安全网

A multi-syntax programming language with bidirectional grammars

A multi-syntax programming language with bidirectional grammars A multi-syntax programming language with bidirectional grammars

hivemind

A prototype of a multi-syntax programming language.

Hivemind has a core language defined by its AST and configurable syntaxes acting like plugins.

The concept of "syntax" for hivemind is similar to

  • a theme for a text editor
  • a skin for a gui app
  • a json/html/xml template for a MVC web app

Syntaxes are defined using code-like examples for core ast nodes and they act in a bidirectional way:

  • they are used to parse source code using that syntax
  • and to render code in that syntax
  • source in each syntax is automatically transltable to another syntax

Tools for the language would also support representations of source grouped by class or methods or as a graph

Syntaxes look like that:

A pythonic syntax:

#if_statement if <test>:     <true_branch> else:     <else_branch>  #assign <left> = <right>  #call <function>(<<args:', '>>)  #attribute <object>.<label>  #attribute_assign <object>.<label> = <right>  #binary <left> <operation> <right>  #list [<<elements:', '>>]  #method_statement method <method_name>(<<args:', '>>):     <<body>>  #class_statement class <class_name>:     <<methods:''>>  #module_statement module <module_name>:     <<elements>>

A lisp-like syntax

#if_statement (if <test>     <true_branch>     <else_branch>)  #assign (define <left> <right>)  #method_statement (method <method_name> (<<args:' '>>)     <<body>>)  #attribute <object>.<label>  #attribute_assign (update <object>.<label> <right>)  #binary (<operation> <left> <right>)  #call (! <function> <<args:' '>>)  #list _(<<elements:' '>>)  #class_statement (class <class_name>     <<methods>>)  #module_statement (module <module_name>     <<elements>>) 

Examples

pythonic example schemelike example

Installation

gem install hivemind 

Usage

Run a file

hivemind <filename>

Translate a file into another syntax representation

hivemind render a.hm pythonic a2.hm

Goals

  • Experiment with diffent syntaxes in different contexts
  • Use different sub-language seamlessly across the same codebase
  • A possible solution for the expression problem (just convert between different representations)

Language

The core language is just a simple python/ruby-like language for now.

History

Created for the HackFMI 5

Future development

  • fluid folder/file structure representations
  • editor plugins
  • more syntaxes

License

Copyright 2016 Alexander Ivanov

Distributed under the MIT License.

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » A multi-syntax programming language with bidirectional grammars

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
分享按钮