The science, tools, strategies, patterns and tools behind the creation and processing of languages

You Cannot Do Everything with Excel

Are You Abusing Excel? You Need Something Different

Excel is a great software but… for some tasks is just not the right tool. In this article we share a story of how Excel ended up costing billions of dollars because of a simple error. Luckily there is none in your spreadsheets 🙂 We all know how this happens: you start creating a short list […]

Getting started with ANTLR in C++

Getting Started with ANTLR in C++

ANTLR can generate parsers in many languages: Java, C#, Python (2 and 3), JavaScript, Go, Swift, and C++. We have written an article to use an ANTLR C# parser and we have also written a mega tutorial to teach you how to use ANTLR with Java, C#, Python and JavaScript. In this article we are […]

How to Add JARs to a Jetbrains MPS project

How to Add JARs to a Jetbrains MPS Project

Jetbrains MPS is a wonderful tool to create DSLs. We love it and use it regularly in our consultancy work. So we have written about Jetbrains MPS before. Being a projectional editor allows you to easily create DSLs that can be used through a graphical interface or things like mathematical formulas. Though all this power […]

Getting started with ANTLR in C#

Getting started with ANTLR in C#

Readers of this website will know that ANTLR is a great tool to quickly create parsers and help you in working with a known language or create your DSL. While the tool itself is written in Java, it can also be used to generate parsers in several other languages, for instance Python, C# or Javascript (with […]

Understand WebAssembly

Understand WebAssembly: Why It Will Change the Web

There is a new weapon in the great war against JavaScript the struggle to allow developers to choose their favorite style of programming while improve performance and their productivity. That weapon is WebAssembly, that will revolutionize client-side web development. WebAssembly, or wasm, is a low-level bytecode format for in-browser client-side scripting. If you are writing […]

A Guide to Natural Language Processing

A Guide to Natural Language Processing

What can you use Natural Language Processing for? Natural Language Processing (NLP) comprises a set of techniques that can be used to achieve many different objectives. Take a look at the following table to figure out which technique can solve your particular problem. What You Need Where To Look Grouping similar words for search Stemming, […]

A Guide To Parsing: Algorithms And Terminology

A Guide to Parsing: Algorithms and Terminology

We have already introduced a few parsing terms, while listing the major tools and libraries used for parsing in Java, C#, Python and JavaScript. In this article we make a more in-depth presentation of the concepts and algorithms used in parsing, so that you can get a better understanding of this fascinating world. We have […]

Parsing HTML: A Guide To Select The Right Library

Parsing HTML: A Guide to Select the Right Library

HTML is a markup language with a simple structure. It would be quite easy to build a parser for HTML with a parser generator. Actually, you may not need even to do that, if you choose a popular parser generator, like ANTLR. That is because there are already available grammars ready to be used. HTML […]

EBNF-The extended backus-naur form

EBNF: How to describe the grammar of a language

The EBNF is the most commonly used formalism to describe the structure of languages. In this article we are going to see: What the EBNF Examples of grammars defined with EBNF How we can define a grammar using EBNF A few things to consider when using EBNF How to use EBNF in practice today A summary […]

Parsing in Python: Tools and Libraries

Parsing In Python: Tools And Libraries

This is an article similar to a previous one we wrote: Parsing in Java, so the introduction is the same. Skip to chapter 3 if you have already read it. If you need to parse a language, or document, from Python there are fundamentally three ways to solve the problem: use an existing library supporting […]