{"id":21680108,"url":"https://github.com/matthisk/rmonia","last_synced_at":"2026-05-21T05:37:40.075Z","repository":{"id":30759351,"uuid":"34315975","full_name":"matthisk/RMonia","owner":"matthisk","description":"Msc. Thesis project (JavaScript language extension with language workbenches)","archived":false,"fork":false,"pushed_at":"2015-08-16T20:29:49.000Z","size":43800,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-25T11:08:01.754Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/matthisk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-04-21T08:59:44.000Z","updated_at":"2015-08-16T20:29:24.000Z","dependencies_parsed_at":"2022-09-15T16:40:31.297Z","dependency_job_id":null,"html_url":"https://github.com/matthisk/RMonia","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthisk%2FRMonia","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthisk%2FRMonia/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthisk%2FRMonia/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthisk%2FRMonia/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/matthisk","download_url":"https://codeload.github.com/matthisk/RMonia/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244594039,"owners_count":20478181,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-25T15:14:35.262Z","updated_at":"2026-05-21T05:37:35.028Z","avatar_url":"https://github.com/matthisk.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# JavaScript language extension with language workbenches\nauthor: Matthisk Heimensen, supervisor: Tijs van der Storm\n\n## Summary\n\nExtending programming languages is an activity undertaken by many programmers, mostly through the use of syntax macros but there exist different manners through which to achieve extensible programming languages.  Extension enables any programmer to introduce new language constructs, not just the creators of a language. Language extensions are dedicated modular grammars including a transformation step to the base language. They enable programmers to create their own syntax on top of a base language and embed domain specific knowledge not just in semantics but also in syntax. For implementation of language extensions a tool called a language workbench can be used. Language workbenches promise to provide an environment which improves the efficiency of language oriented programming. To evaluate this promise of the language workbench we implement the latest JavaScript specification (ECMAScript 6) as a set of language extensions on top of current JavaScript and compare our implementation against tools created without the help of a language workbench.\n\n## Rascal\n\nRMonia is implemented in the Rascal metaprogramming language ([rascal-mpl.org](http://www.rascal-mpl.org)). API\ndocumentation for standard Rascal functions and types is available online\n([http://tutor.rascal-mpl.org/Rascal/Rascal.html](http://tutor.rascal-mpl.org/Rascal/Rascal.html)).\nIn this project, we particularly use Rascal's support for [syntax definitions\nand\nparsing](http://tutor.rascal-mpl.org/Rascal/Rascal.html#/Rascal/Declarations/SyntaxDefinition/SyntaxDefinition.html).\n\n\n## Installation instructions\n\n0.  Install JDK 1.8 from [Oracle](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html).\n\n1.  Install a fresh [Eclipse](http://www.eclipse.org), version Luna (RCP \u0026 RAP).\n\n2.  The following link contains an archive of the current repository:\n    [https://github.com/matthisk/RMonia/archive/master.zip](https://github.com/matthisk/RMonia/archive/master.zip).\n\n3.  From within the new Eclipse, go to Help \u003e Install New Software...; click\n    on Add... and then Local...; browse to the `update-site` directory of the\n    cloned repository and press OK. After giving a name to the update site\n    (doesn't matter what name), you'll be able to select Rascal for\n    installation.  Finish the process by clicking on Yes when asked to restart\n    Eclipse.\n\n4.  In the restarted Eclipse, go to the File menu, and select Import..., then\n    General \u003e Existing Projects into Workspace, as root directory, select the\n    `RMonia` directory in the cloned repo. Import the project there.\n    You're now set up to explore the code, write ECMAScript 6 JavaScript, transform to ECMAScript 5, and run the compatibility tests.\n\n## Project outline\n\nThe main code is stored in the RMonia Eclipse project. Below we summarize its contents. \n\nThe two most important folders are `src/extensions` and `src/core`. The former contains\nall ECMAScript 6 language extensions and the latter the ECMAScript 5 grammar which all\nextensions extend.\n\nThese are the most important folders in the repository:\n\n* `input/examples`: Example ECMAScript 6 JavaScript code\n* `input/compatibility`: Compatibility tests\n* `src/core`: Example format descriptors for the Derric case study\n* `src/desugar`: Source code of name-fix and case studies\n* `src/extensions`: Implementation of name-fix and required data structures\n* `src/test`: Additional utilities for running unit/compatibility tests\n\nEach language extension consists of a `Syntax.rsc` file defining the language extension's grammar.\nA `Desugar.rsc` defining the extension's desugar steps and a folder `test` containing some basic unit tests. Several language extensions also contain a folder named `desugar` which has additional Rascal modules that contain code to help with the desugaring.\n\n* `src/core/resolve`: Contains the original v-fix hygiene algorithm\n* `src/extensions/letconst/Resolve.rsc`: Contains the duplicated v-fix algorithm for transformation of block-binding and hygiene\n\n## Running RMonia\n\nWhen Eclipse is loaded with the RMonia project any file created inside the `input` folder with the extension `.sjs` will automatically be parsed and transformed by RMonia. The compatibility tests can either be invoked by opening one of the tests from the folders inside `input/compatibility` or by importing the module `src/test/Compatibility` on the command line and invoking the function `run`. The `NODEBIN` and `COREJS` should be set as absolute paths to respectivly the nodejs command and core-js ES6 shim (this file resides in the folder `src/runtime/`).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatthisk%2Frmonia","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatthisk%2Frmonia","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatthisk%2Frmonia/lists"}