Summary
I've recently posted the Cat source code to CodeProject.com with a reasonably detailed description of the design and implementation.
Advertisement
Even though the Cat language has relatively simple syntax and semantics, the type system is not trivial. To help people who are interested in using or modifying the source code I decided to write an article which supplements the internal documentation, and could aid people in understanding the design and implementation of the interpreter. The article is available on CodeProject.com at http://www.codeproject.com/useritems/cat.asp
Cat is implemented in C# and the source code is public domain, which means it easily used in commercial or open-source projects, and is compatible with any kind of license you desire. To download the source code through CodeProject.com you have to register, but you can also download the source code from my site at http://www.cat-language.com/download.html.
The article should prove to be interesting for those of you interested in the implementation of interpreters and compilers. Also for those of you interested in using the Cat interpreter (or some variant of Cat) as a scripting add-on to an existing application. Cat of course is also interesting as a stand alone package, and could be used with wrapper applications. Some of the ideas I for projects I'd like to develop are:
A Cat with macros extension language
An EcmaScript style syntax wrapper around Cat
A Scheme to Cat translator
An implementation of Cat without types in C++, Scheme and F#/OCaml
A Cat to C translator
Cat is an extremely easy to implement language, if you disregard type inference. I would estimate that it shouldn't take more than one or two person weeks to implement in a modern language, assuming you leave out all type checking and type inference code and you use the pre-existing code as a model.
This means that Cat is also easy to port, translate to, and translate from. I expect over the next year to see various implementation of Cat pop up all over the place This is based on the interest expressed by various people over the internet.
Cat can also be easily used as a scripting language to extend applications. If you don't like the Cat postfix notation, it is a relatively easy task to implement a prefix notation front-end. In fact this one of the projects on my to-do list.
I'd love to hear whether the Cat source code comes in useful to you, or finds its way into any of your projects, or if you decide to extend Cat to make your pet language.
I'm going to take a look at it today. May I reserve the name 'Tiger' for the adapted version? I just want to check that I'm not using a name that you were keen on using.
BTW, I can't put it in public domain. Here in Canada, that only applies to expired Copyrights and government records. So I'll give an equivalent worldwide, perpetual license where everyone can do whatever they want with it. If I actually get something done (no promises), I'll leave your creds in it.
> I'm going to take a look at it today. May I reserve the > name 'Tiger' for the adapted version?
I have no objections but Andrew Appel already named a language Tiger in his series of books "Modern Compilation Implementation in {Java,ML,C}". There are other instances of the languages being called Tiger as well, so you might want to consider a new name.
> I just want to > check that I'm not using a name that you were keen on > using.
I haven't made my mind up on anything yet. So no need to worry about me.
> BTW, I can't put it in public domain.
You don't have to. You can use public domain work in anyway you want. Your derived work can have any license. The only thing that you are prevented from doing is patenting my work.
> Here in Canada, > that only applies to expired Copyrights and government > records.
I'm Canadian as well, I just happen to live and work in the US for the time being.
I am quite confident that even in Canad nothing prevents an individual from releasing work into the public domain, if they so choose, but I am not an expert an IP law.
However, your license choice is entirely up to you.
> So I'll give an equivalent worldwide, perpetual > license where everyone can do whatever they want with it. > If I actually get something done (no promises), I'll > l leave your creds in it.
That would be very generous. Realize though that you are under no obligations. Public domain work often surprises people in that it truly is a gift to the entire world with no strings attached. That said, I would love to get credit.
I just thought Tiger related well to Cat and there was nothing on it on Google. Oh well, I'm sure there are other animals in the feline category.
I looked at the code and although I could convert most of the C# data structures to C++, I'm not sure I'm up to the task of converting your custom Enumeration classes. I don't know if implementing a class that does the same or subclassing a container class is the best way. Although I could port it as is, I'm not sure it would be clean C++ and I'm not sure how I would implement the features I want in such an environment. This would also take away time from my own project. So it'll have to wait for another day. I'll have to give it some thought before I commit to it. I have my own LR(1) parser generator and it seems to me this would be a lot easier to use with action routines. This way, I can follow along what it's doing in the grammar.
Christopher, what did you use for parsing? I didn't look too far into it, just the data structures. Do you have a custom parser? What about tokens? A complete grammar would shave off many many hours. Do you have a complete one? The one on your site seemed odd, but I can't remember why. I'll have to check again. BTW, I don't care if it's LR, LALR, or LL. I can convert them all.
In Canada, you can only transfer ownership of copyright. You can't put it in the public domain. At least there's no provision for doing so in the Copyright Act. I'm not a lawyer, but I doubt it matters much because intent is usually what's used in a court of law (as much as I hate them). Soonest I'll be able to get time to work on this is probably Feb, so we'll see. Either way, I think creds are a sign of respect.