| <!DOCTYPE html> |
| <html> |
| |
| <head> |
| <meta charset="UTF-8"> |
| <title>Xtext - Language Engineering Made Easy!</title> |
| |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <meta name="description" |
| content="The website of Eclipse Xtext, an open-source framework for development of programming languages and domain-specific languages"> |
| <meta name="author" content="Sven Efftinge"> |
| <meta name="author" content="Miro Spoenemann"> |
| <!-- styles --> |
| <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> |
| <!--[if lt IE 9]> |
| <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> |
| <![endif]--> |
| |
| <!-- Le fav and touch icons --> |
| <link rel="shortcut icon" href="/Xtext/images/favicon.png"> |
| |
| <link href="/Xtext/css/bootstrap.css" rel="stylesheet" type='text/css'> |
| <link href="/Xtext/css/bootstrap-responsive.css" rel="stylesheet" type='text/css'> |
| <link href="/Xtext/css/shield-responsive.css" rel="stylesheet" type='text/css'> |
| <link href='/Xtext/css/fonts.css' rel='stylesheet' type='text/css'> |
| <link href="/Xtext/css/prettyPhoto.css" rel="stylesheet" media="screen" type='text/css'> |
| <link href="/Xtext/css/prettify.css" type="text/css" rel="stylesheet"/> |
| <link href="/Xtext/css/style.css" rel="stylesheet" type='text/css'> |
| <!-- cover flow --> |
| <link href="/Xtext/css/coverflow.css" rel="stylesheet" type='text/css'> |
| <!--[if lt IE 9]> |
| <link href="/css/iebugs.css" rel="stylesheet" type='text/css'> |
| <![endif]--> |
| |
| <!-- BEGIN Cookie Consent |
| <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.css" /> |
| <script src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.js"></script> |
| <script> |
| window.addEventListener("load", function(){ |
| window.cookieconsent.initialise({ |
| "palette": { |
| "popup": { |
| "background": "#000" |
| }, |
| "button": { |
| "background": "#f1d600" |
| } |
| }, |
| "theme": "edgeless", |
| "type": "opt-in", |
| onInitialise: function (status) { |
| var type = this.options.type; |
| var didConsent = this.hasConsented(); |
| if (type == 'opt-in' && didConsent) { |
| // TODO: enable cookies |
| } |
| if (type == 'opt-out' && !didConsent) { |
| // TODO: disable cookies |
| } |
| }, |
| onStatusChange: function(status, chosenBefore) { |
| var type = this.options.type; |
| var didConsent = this.hasConsented(); |
| if (type == 'opt-in' && didConsent) { |
| // TODO: enable cookies |
| } |
| if (type == 'opt-out' && !didConsent) { |
| // TODO: disable cookies |
| } |
| }, |
| onRevokeChoice: function() { |
| var type = this.options.type; |
| if (type == 'opt-in') { |
| // TODO: disable cookies |
| } |
| if (type == 'opt-out') { |
| // TODO: enable cookies |
| } |
| }, |
| "content": { |
| "href": "http://www.eclipse.org/legal/privacy.php" |
| } |
| })}); |
| </script> |
| END Cookie Consent --> |
| </head> |
| |
| |
| <body> |
| |
| <header class="site-header"> |
| |
| <!-- Navbar --> |
| <div class="navbar navbar-fixed-top"> |
| <div class="navbar-inner"> |
| <div class="container"> |
| <a class="btn btn-navbar" data-toggle="collapse" |
| data-target=".nav-collapse"> <span class="icon-bar"></span> <span |
| class="icon-bar"></span> <span class="icon-bar"></span> |
| </a> <a class="brand" href="/Xtext/index.html"></a> |
| <div class="nav-collapse collapse" style="height: 0px;"> |
| <ul class="nav"> |
| <!--li ><a href="/Xtext/news.html">News</a></li--> |
| <li ><a href="/Xtext/download.html">Download</a></li> |
| <li ><a href="/Xtext/documentation/index.html">Documentation</a></li> |
| <li ><a href="/Xtext/community.html">Community</a></li> |
| <li class="dropdown"> |
| <a class="dropdown-toggle" data-toggle="dropdown" href="#">Support & Trainings<span class="caret"></span></a> |
| <ul class="dropdown-menu"> |
| <li><a href="https://www.itemis.com/en/xtext/support-and-team/" target="_blank">itemis</a></li> |
| <li><a href="https://www.typefox.io/language-engineering/" target="_blank">TypeFox</a></li> |
| </ul> |
| </li> |
| <li ><a href="http://xtend-lang.org">Xtend</a></li> |
| </ul> |
| <!--div class="nav pull-right"> |
| <li ><a><iframe src="https://ghbtns.com/github-btn.html?user=eclipse&repo=xtext&type=star&count=true" frameborder="0" scrolling="0" width="170px" height="20px"></iframe></a></li> |
| </div--> |
| </div> |
| <!--/.nav-collapse --> |
| </div> |
| </div> |
| </div> |
| <!-- Navbar End --> |
| |
| </header> |
| |
| |
| <a href="https://github.com/eclipse/xtext"><img id="fork-button" alt="Fork me on GitHub" src="/Xtext/images/forkme_right_white_ffffff.png"></a> |
| <script> |
| (function forkButtonQuickFix() { |
| var move = function() { |
| document.querySelector('#fork-button').style.top = |
| document.querySelector('.navbar-inner').offsetHeight + 'px' |
| } |
| document.addEventListener('DOMContentLoaded', move) |
| window.addEventListener('resize', move) |
| }()) |
| </script> |
| <!--Container--> |
| <div id="header_wrapper"> |
| <div class="container image-slider"> |
| <div class="row"> |
| <h2> |
| Language Engineering For Everyone! |
| </h2> |
| <p>Xtext is a framework for development of programming languages |
| and domain-specific languages. With Xtext you define your language using a powerful grammar language. As a result you get a full infrastructure, |
| including <b>parser</b>, <b>linker</b>, <b>typechecker</b>, <b>compiler</b> as well as editing support for <b>Eclipse</b>, <b>any editor that supports the Language Server Protocol</b> and your favorite <b>web browser</b>. |
| <br/><i><a href="#intro-quotes">Learn more...</a></i></p> |
| </div> |
| </div> |
| <div class="row" style="text-align:center"> |
| <div> |
| <div id="coverflow"> |
| <img class="intro-screenshot" style="display:none;" src="/Xtext/images/web_screenshot.png" alt="Xtext in Web Browser"> |
| <img class="intro-screenshot" src="/Xtext/images/eclipse_screenshot.png" alt="Xtext in Eclipse"> |
| <img class="intro-screenshot" style="display:none;" src="/Xtext/images/vscode_screenshot.png" alt="Xtext in Visual Studio Code via Language Server Protocol"> |
| </div> |
| </div> |
| <div class="cta-section"> |
| <a href="/Xtext/download.html" style="margin:10px;" class="has-popover btn btn-primary btn-large pull_right">Download</a> |
| <a href="/Xtext/documentation/index.html" style="margin:10px;" class="has-popover btn btn-success btn-large pull_right">Getting Started</a> |
| </div> |
| </div> |
| </div> |
| |
| <div id="intro-quotes" class="intro-reference"> |
| <div class="container"> |
| <ul id="newsticker" class="newsticker"> |
| <li>Event: <a href="https://www.eclipsecon.org/2021/sessions/proposed?keys=Xtext&field_experience_value=All&field_session_type_value=All&og_vocabulary_target_id=" target="_blank" style="text-decoration: underline; color: #fff;">EclipseCon Europe 2021</a></li> |
| </ul> |
| </div> |
| </div> |
| |
| <div id="why-xtext"> |
| <div class="container"> |
| <div class="row quick-overview"> |
| <div class="span12"> |
| <h1>Why Xtext?</h1> |
| </div> |
| <div class="span4"> |
| <h4><img src="/Xtext/images/xtext-bullet.png"/> |
| Easy To Learn</h4> |
| <p> |
| Xtext is designed to onboard you smoothly. Simple languages are easily done within minutes. |
| Yet Xtext is flexible enough to build fully-featured, statically-typed programming languages. |
| </p> |
| </div> |
| <div class="span4"> |
| <h4><img src="/Xtext/images/xtext-bullet.png"/> |
| High Quality</h4> |
| <p>The core framework has been in development for eight years and is used throughout the world in many research and industry projects and even commercial products.</p> |
| </div> |
| <div class="span4"> |
| <h4><img src="/Xtext/images/xtext-bullet.png"/> |
| Multi Platform</h4> |
| <p> |
| Whether you are targeting developers or domain experts, you will be able to provide a dedicated smart editor. Eclipse, any editor that supports the Language Server Protocol and various browser |
| editors are supported. Have a look at our <a href="#platform-comparison">platform comparison chart</a>. |
| </p> |
| </div> |
| <div class="span4"> |
| <h4><img src="/Xtext/images/xtext-bullet.png"/> |
| Performance</h4> |
| <p> |
| We know that tools need to be fast in order to be helpful. That is why we spend considerable effort on optimization in every release. |
| You can also fine-tune your language if needed, thanks to the configurability of Xtext. |
| </p> |
| </div> |
| <div class="span4"> |
| <h4><img src="/Xtext/images/xtext-bullet.png"/> |
| Easy JVM languages</h4> |
| <p>You can build languages for any target platform with Xtext. |
| If you target the JVM you can reuse Xbase, a statically typed expression language. |
| Linking against Java types, code generation and debugging work out of the box. |
| </p> |
| </div> |
| <div class="span4"> |
| <h4><img src="/Xtext/images/xtext-bullet.png"/> |
| Continuous Integration</h4> |
| <p> |
| Xtext supports both Gradle and Maven to build your language and use it in downstream projects. |
| For Gradle builds, you even get incremental compilation of your language files. |
| </p> |
| </div> |
| <div class="span12"> |
| <p><br/><i><a href="#feature-overview">Check out the features...</a></i></p> |
| </div> |
| </div> |
| </div> |
| </div> |
| |
| <div id="intro-companies" class="intro-reference"> |
| <div class="container"> |
| <ul class="companies"> |
| <li><img src="/Xtext/images/logo-google.png" alt="Google"/> |
| <img src="/Xtext/images/Siemens-logo.svg" alt="Siemens"/> |
| <li> |
| <img src="/Xtext/images/Bosch-Logo.svg" alt="Bosch"/> |
| <img src="/Xtext/images/SAP-Logo.svg" alt="SAP"/></li> |
| </ul> |
| </div> |
| </div> |
| |
| <div id="feature-overview"> |
| <div class="container"> |
| <div class="row quick-overview"> |
| <div class="span12"> |
| <h1>Features</h1> |
| </div> |
| <div class="span4"> |
| <h4><img src="/Xtext/images/xtext-bullet.png"/> |
| Build the Language You Want!</h4> |
| <p>Xtext can build full-featured text editors for both general-purpose and domain-specific languages. |
| In the background it uses the <i>LL(*)</i> parser generator of |
| ANTLR, allowing to cover a wide range of syntaxes. |
| Xtext editors have already been implemented for JavaScript, VHDL, Xtend, and many other languages.</p> |
| </div> |
| <div class="span4"> |
| <h4><img src="/Xtext/images/xtext-bullet.png"/> |
| Compile to Whatever You Want!</h4> |
| <p>You define the target format to which your language is compiled. No matter if it's Java, C, XML, |
| comma-separated values, or even a binary format, Xtext does not limit your choice. |
| And in combination with <a href="http://xtend-lang.org" target="_blank">Xtend</a> writing a compiler |
| becomes easier than ever before.</p> |
| </div> |
| <div class="span4"> |
| <h4><img src="/Xtext/images/xtext-bullet.png"/> |
| Highly Customizable</h4> |
| <p>The default behavior of Xtext is optimized to cover a wide range of languages and use cases. |
| However, every language has characteristics that must be reflected in the IDE. Therefore Xtext |
| allows to insert custom behavior for every single feature by replacing the default implementation. |
| This is done through dependency injection based on |
| <a href="https://github.com/google/guice" target="_blank">Google Guice</a>.</p> |
| </div> |
| <div class="span4"> |
| <h4><img src="/Xtext/images/xtext-bullet.png"/> |
| Single Sourcing</h4> |
| <p>The grammar definition language of Xtext is not just for the parser. Many IDE features provided |
| by Xtext adapt to your language automatically, so whenever you change your grammar definition, |
| the behavior of the text editor is updated without any further code changes. This includes complex |
| features such as handling of cross-references, code completion, navigation, syntax coloring, |
| validation, and more.</p> |
| </div> |
| <div class="span4"> |
| <h4><img src="/Xtext/images/xtext-bullet.png"/> |
| Incremental Compiler</h4> |
| <p>Xtext is built to scale, so no matter if you have a few source files written in your language |
| or hundreds of them, the IDE remains responsive and reacts smoothly to any text change. This is |
| realized through an incremental compiler that maintains an index of the available source files |
| for fast look-up of language elements.</p> |
| </div> |
| <div class="span4"> |
| <h4><img src="/Xtext/images/xtext-bullet.png"/> |
| Compatible with Graphical Editors</h4> |
| <p>You can combine the text-based formats created with Xtext with many graphical editing frameworks, |
| e.g. <a href="https://www.eclipse.org/gef/" target="_blank">GEF</a>, |
| <a href="https://www.eclipse.org/sirius/" target="_blank">Sirius</a> or |
| <a href="https://www.eclipse.org/graphiti/" target="_blank">Graphiti</a>. Xtext offers this flexibility |
| by supporting <a href="https://www.eclipse.org/modeling/emf/" target="_blank">EMF</a> as common data |
| layer. An Xtext language can be used as storage format for another primary editor, and you can even |
| embed text editors inside a graphical editor.</p> |
| </div> |
| </div> |
| </div> |
| </div> |
| |
| <div id="platform-comparison" class="container"> |
| <h2>Editor Features By Platform</h2> |
| <table class="table table-bordered"> |
| <thead> |
| <tr> |
| <th></th> |
| <th style="width:25%;vertical-align: middle;">LSP</th> |
| <th style="width:25%;vertical-align: middle;"><img src="/Xtext/images/logo_eclipse.png" alt="Eclipse" style="width:100%;"></th> |
| <th style="width:25%;vertical-align: middle;"><img src="/Xtext/images/logo_browsers.png" alt="Web Browser" style="width:100%;"></th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr class="has-popover" |
| data-content="Keywords, comments, strings, and other basic text elements are colored according to the syntax definition."> |
| <td>Syntax Coloring</td> |
| <td><div class="partly-supported"></div></td> |
| <td><div class="supported"></div></td> |
| <td><div class="supported"></div></td> |
| </tr> |
| <tr class="has-popover" |
| data-content="Text elements with special meaning in the context of your language can be highlighted with a custom text style, e.g. static fields in Java have an italic font."> |
| <td>Semantic Coloring</td> |
| <td><div class="not-supported"></div></td> |
| <td><div class="supported"></div></td> |
| <td><div class="supported"></div></td> |
| </tr> |
| <tr class="has-popover" |
| data-content="General errors in the text files are marked automatically, e.g. violations of the specified syntax or references to undefined elements. Additionally, Xtext offers a simple API to implement language-specific checks."> |
| <td>Error Checking</td> |
| <td><div class="supported"></div></td> |
| <td><div class="supported"></div></td> |
| <td><div class="supported"></div></td> |
| </tr> |
| <tr class="has-popover" |
| data-content="Auto-completion is a powerful tool to speed up writing text in your language. Type Ctrl+Space to invoke it at the current cursor position."> |
| <td>Auto-Completion</td> |
| <td><div class="supported"></div></td> |
| <td><div class="supported"></div></td> |
| <td><div class="supported"></div></td> |
| </tr> |
| <tr class="has-popover" |
| data-content="Once you have defined rules for handling white space (line breaks, tabs etc.) in your language, you can apply automatic formatting to whole files or parts of them."> |
| <td>Formatting</td> |
| <td><div class="supported"></div></td> |
| <td><div class="supported"></div></td> |
| <td><div class="supported"></div></td> |
| </tr> |
| <tr class="has-popover" |
| data-content="Display additional information when the mouse hovers over a specific language element, e.g. the comments associated with that element."> |
| <td>Hover Information</td> |
| <td><div class="supported"></div></td> |
| <td><div class="supported"></div></td> |
| <td><div class="supported"></div></td> |
| </tr> |
| <tr class="has-popover" |
| data-content="When the cursor is moved to a language element that is referenced from multiple places, all these occurrences are highlighted."> |
| <td>Mark Occurrences</td> |
| <td><div class="supported"></div></td> |
| <td><div class="supported"></div></td> |
| <td><div class="supported"></div></td> |
| </tr> |
| <tr class="has-popover" |
| data-content="Press F3 to navigate directly to the declaration of a referenced element."> |
| <td>Go To Declaration</td> |
| <td><div class="supported"></div></td> |
| <td><div class="supported"></div></td> |
| <td><div class="not-supported"></div></td> |
| </tr> |
| <tr class="has-popover" |
| data-content="When you rename a language element, automatically update all references to it."> |
| <td>Rename Refactoring</td> |
| <td><div class="supported"></div></td> |
| <td><div class="supported"></div></td> |
| <td><div class="not-supported"></div></td> |
| </tr> |
| <tr class="has-popover" |
| data-content="If your language interoperates with Java, the source files are considered during debug sessions in your IDE, i.e. you can set breakpoints and step through statements."> |
| <td>Debugging</td> |
| <td><div class="not-supported"></div></td> |
| <td><div class="supported"></div></td> |
| <td><div class="not-supported"></div></td> |
| </tr> |
| <tr class="has-popover" |
| data-content="Disable the selected lines of code by inserting comments into each line, or reenable them by removing such comments."> |
| <td>Toggle Comments</td> |
| <td><div class="partly-supported"></div></td> |
| <td><div class="supported"></div></td> |
| <td><div class="not-supported"></div></td> |
| </tr> |
| <tr class="has-popover" |
| data-content="Display an outline of a file highlighting its structure. This is useful for quick navigation."> |
| <td>Outline / Structure View</td> |
| <td><div class="supported"></div></td> |
| <td><div class="supported"></div></td> |
| <td><div class="not-supported"></div></td> |
| </tr> |
| <tr class="has-popover" |
| data-content="Automatic fixes can be proposed for problems that have been found by the error checker."> |
| <td>Quick Fix Proposals</td> |
| <td><div class="supported"></div></td> |
| <td><div class="supported"></div></td> |
| <td><div class="not-supported"></div></td> |
| </tr> |
| <tr class="has-popover" |
| data-content="Generate a list of all references to the selected language element."> |
| <td>Find References</td> |
| <td><div class="supported"></div></td> |
| <td><div class="supported"></div></td> |
| <td><div class="not-supported"></div></td> |
| </tr> |
| <tr class="has-popover" |
| data-content="If your language interoperates with Java, a tree view of all directly and indirectly called methods can be generated for the selected method."> |
| <td>Call Hierarchy</td> |
| <td><div class="not-supported"></div></td> |
| <td><div class="supported"></div></td> |
| <td><div class="not-supported"></div></td> |
| </tr> |
| <tr class="has-popover" |
| data-content="If your language interoperates with Java, a tree view of all directly and indirectly inherited classes and interfaces can be generated for the selected type."> |
| <td>Type Hierarchy</td> |
| <td><div class="not-supported"></div></td> |
| <td><div class="supported"></div></td> |
| <td><div class="not-supported"></div></td> |
| </tr> |
| <tr class="has-popover" |
| data-content="Collapse parts of a file that are not important for your current task."> |
| <td>Folding</td> |
| <td><div class="not-supported"></div></td> |
| <td><div class="supported"></div></td> |
| <td><div class="not-supported"></div></td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| |
| |
| <footer class="site-footer"> |
| <div id="extra"> |
| <div class="inner"> |
| <div class="container"> |
| <div class="row"> |
| <div class="span6"> |
| <h3 class="footer-links-header">Quick Links</h3> |
| <ul class="footer-links clearfix"> |
| <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li> |
| <li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li> |
| <li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li> |
| <li><a href="http://www.eclipse.org/legal/">Legal</a></li> |
| </ul> |
| <ul class="footer-links clearfix"> |
| <li><a href="http://www.eclipse.org">Eclipse Home</a></li> |
| <li><a href="http://marketplace.eclipse.org/">Market Place</a></li> |
| <li><a href="http://www.planeteclipse.org/">Eclipse Planet</a></li> |
| <li><a href="https://www.eclipse.org/forums/index.php/f/27/">Xtext Forum</a></li> |
| </ul> |
| </div> |
| <div class="span6"> |
| <!-- Social Media Links --> |
| <h3 class="footer-links-header"">Social Media</h3> |
| <ul class="footer-links clearfix"> |
| <li> |
| <a href="https://twitter.com/xtext"><img src="/Xtext/images/Twitter-bird-darkgray.png" class="img-responsive" style="margin-right: 5px;height: 1em;" alt="Twitter icon">@xtext on Twitter</a> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| <a href="#" class="scrollup fadeOutRight animated" style="display: none;">ScrollUp</a> |
| <!-- Le javascript |
| ================================================== --> |
| <!-- Placed at the end of the document so the pages load faster --> |
| |
| <script src="/Xtext/js/jquery-1.11.3.min.js"></script> |
| <script src="/Xtext/js/bootstrap.min.js"></script> |
| <script src="/Xtext/js/jquery.easing.1.3.js" type="text/javascript"></script> |
| <script src="/Xtext/js/jquery.prettyPhoto.js" type="text/javascript"></script> |
| <script src="/Xtext/js/prettify.js" type="text/javascript"></script> |
| <script src="/Xtext/js/lang-xtend.js" type="text/javascript"></script> |
| <script src="/Xtext/js/lang-common.js" type="text/javascript"></script> |
| <script src="/Xtext/js/custom.js" type="text/javascript"></script> |
| <!--script src="https://apis.google.com/js/platform.js" async defer></script--> |
| <!--script type="text/javascript"> |
| var _gaq = _gaq || []; |
| _gaq.push([ '_setAccount', 'UA-2429174-3' ]); |
| _gaq.push([ '_trackPageview' ]); |
| (function() { |
| var ga = document.createElement('script'); |
| ga.type = 'text/javascript'; |
| ga.async = true; |
| ga.src = ('https:' == document.location.protocol ? 'https://ssl' |
| : 'http://www') |
| + '.google-analytics.com/ga.js'; |
| var s = document.getElementsByTagName('script')[0]; |
| s.parentNode.insertBefore(ga, s); |
| })(); |
| </script--> |
| <script src="/Xtext/js/coverflow.min.js" type="text/javascript"></script> |
| <script> |
| $(function() { |
| $('#coverflow').coverflow({ |
| active : 1, |
| visibleAside: 2, |
| overlap : 0.5, |
| scale : 0.9, |
| angle : 20, |
| trigger : { |
| "itemfocus" : true, |
| "swipe" : true, |
| "mousewheel" : false |
| } |
| }); |
| $('#coverflow :hidden').toggle(); |
| $(window).resize(function() { |
| $('#coverflow').coverflow(); |
| }); |
| }); |
| |
| </script> |
| </footer> |
| |
| |
| </body> |
| |
| </html> |