Giter Club home page Giter Club logo

iepsilonprototype's Introduction

IEpsilon, MDE made easy

Overview

A jupyter kernel for the Eclipse Modeling Framework Epsilon family of languages.

Currently only supports the EOL subset of the language family.

Covered Features

1- No semicolons ? No problem

While EOL itself is a statement-oriented language that require every statement to be semicolon-terminated, IEpsilon is smart enough to realize that an expression need not be terminated with a semicolon to be valid.

IEpsilon automagically inserts semicolons for you after the last expression entered


2- Automatically Print The Last Expression Evaluated

If (and only if) IEpsilon detects no usage of the println() function, it automatically echoes the last expression to be evaluated.

IEpsilon understands when you have called println yourself and doesn't print on its own

3- All of EOL

IEpsilon is a fully-functional EOL kernel, maintaining the state of variables and defined operations across cell executions as is the standard.

IEpsilon supports all of EOL

iepsilonprototype's People

Contributors

moste00 avatar

Stargazers

Alfonso de la Vega avatar Mohamed Khaled avatar Mohamed Salama avatar Mostafa Wael avatar Taher Mohamed Ahmed Saad avatar Omar Mohamed  avatar Hossam Mohamed Saeed avatar

Watchers

Hossam Mohamed Saeed avatar  avatar

iepsilonprototype's Issues

Syntax highlighting

We should study how to add syntax support for custom languages in the context of a jupyter kernel.

The first three syntaxes we may focus on are:

  • The Epsilon Object Language
  • Emfatic for Ecore metamodels
  • Flexmi for EMF models

Add model management functionality

In the context of a running kernel, we would need a mechanism to load metamodels in the workspace, and loading/disposing models.

The following Java snippet shows how a Flexmi model is loaded, based on an Emfatic metamodel. Flexmi and Emfatic are textual syntaxes used to specify EMF models and metamodels, so I believe they should be our target support (over using XMI based models and .ecore files):

public static void main(String[] args) throws Exception {
        
        // Register the Flexmi and Emfatic parsers with EMF
        Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("flexmi", new FlexmiResourceFactory());
        Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("emf", new EmfaticResourceFactory());
        
        // Parse the EOL program
        EolModule module = new EolModule();
        module.parse(new File("program.eol"));
        
        // Load the model from model.flexmi using metamodel.emf as its metamodel
        EmfModel model = new EmfModel();
        model.setName("M");
        model.setModelFile("model.flexmi");
        model.setMetamodelFile("metamodel.emf");
        model.setReadOnLoad(true);
        model.setStoredOnDisposal(false);
        model.load();
        
        // Make the model available to the program
        module.getContext().getModelRepository().addModel(model);
        
        // Execute the EOL program
        module.execute();

        // Dispose of the model
        module.getContext().getModelRepository().dispose();
    }

Jupyter kernels have a set of magic commands that can be used alongside code (e.g. see IPython magic commands here). IPython uses the % operator for this, which is also not in use in EOL (funnily enough there is no mod operator).

So, maybe we could have a %loadEMFModel magic command that receives the parameters shown above, and then a %disposeModel(modelName) to store (or simply discard) it.

Thoughts?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.