Channels ▼

Christopher Diggins

Dr. Dobb's Bloggers

Implementing a Quick and Dirty Interpreter

February 21, 2009

So what is the quickest way to build a programming language interpreter? Embed another interpreter in your code!

 As programmers we sometimes shy away from some great solutions to problems because we consider them inelegant. I think one of the reasons is because they don't demonstrate our prowess as a programmer. As I am finally starting to grow out of that phase of trying to prove my abilities in every program I write and realizing that working solutions are better than elegant ones, I find I am starting to consider solutions to problems I would never have previously.

A great example of this, is a recent programming language interpreter I had to build to demo for a potential customer. I had a very short amount of time, so what I did was embed a Lua interpreter in my own interpreter.

Lua is great for this kind of task, because it is designed to be embedded in C and C++ applications, and it is incredibly powerful. My interpreter would at load-time translate from my source language called Heron (a JavaScript like language designed for executing UML models) into Lua. All I needed was a parser front-end (I used my own C++ PEG parsing library YARD for this) and a wrapper library around the Lua primitives to give them Heron semantics.

If you are not familiar with Lua you should take a look at it ( It is very stable and quite well known in the game development community. Lua reminds me a lot of JavaScript and Scheme in that the the basic semantics are very simple, yet provide sufficient expressiveness to model virtually any other language.

Perhaps you have some other neat hacks that worked surprisingly well, but are almost embarassed to share?

Related Reading

More Insights

Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.