What is langium?
Langium is a tool for developing domain-specific languages (DSLs) and language servers. It provides a framework for creating custom languages with a focus on language design, parsing, and tooling support.
What are langium's main functionalities?
Language Definition
Langium allows you to define a custom language using a grammar syntax. This code sample demonstrates how to define a simple DSL with a model and elements using Langium's grammar services.
const { createLangiumGrammarServices } = require('langium');
const services = createLangiumGrammarServices();
const grammar = `grammar MyDSL
entry Model:
'model' name=ID '{'
(elements+=Element)*
'}';
Element:
'element' name=ID;`;
services.GrammarParser.parse(grammar);
Language Server
Langium can be used to create a language server that provides IDE features like auto-completion and error checking for your custom language. This code sample shows how to start a language server for a simple DSL.
const { startLanguageServer } = require('langium');
startLanguageServer({
grammar: `grammar MyDSL
entry Model:
'model' name=ID '{'
(elements+=Element)*
'}';
Element:
'element' name=ID;`,
port: 5000
});
Other packages similar to langium
antlr4
ANTLR (Another Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files. It is similar to Langium in that it allows you to define grammars and generate parsers, but it is more focused on parsing and less on providing language server features.
pegjs
PEG.js is a simple parser generator for JavaScript that produces fast parsers with excellent error reporting. It is similar to Langium in terms of grammar definition and parsing capabilities, but it does not provide built-in support for language servers or IDE features.
lezer
Lezer is a parser system for JavaScript that is designed to be small and fast. It is similar to Langium in that it allows you to define grammars and create parsers, but it is more lightweight and does not include language server capabilities.