blob: 0d1eb5280f16848fc058c221753189eddc684dce [file] [log] [blame]
<!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 &amp; 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>