You know Flash?
So I've been busy doing taxes, getting over my cold, and refreshing my C++. As part of the C++ refreshing I was using Antlr and some STL libraries. While looking at the STL libs I also went to look at Boost, only to find Spirit, a C++ recursive descent parser. I haven't looked at it much, but I'm going to re-do the first couple examples using it, and compare them to the Antlr versions. It may be better suited for what I'm doing since Antlr 3 doesn't have a (working?) C++ output. I know already that if I switch, I'm going to miss AntlrWorks. ;-)
I started working with rule actions in Antlr 3 + C (A3C). In section 3.2 of the book Terence adds an action to load a stored value from a recognized ID. I decided to keep it simple and just print out some information for that recognized ID. My action grammar:
atom returns [int value]
: INT
| ID
{
printf("Position: \%d\nToken Index: \%d\nText: \%s\n", $ID.pos, $ID.index, $ID.text->chars);
}
| '(' expr ')'
As you can see, the rule for atom is looking for ID which is defined as ('a'..'z'|'A'..'Z')+. When it finds this alphabetic string it's going to print out the position of where it appeared on the line, its index and the value of the token (the matched text).
The action token ID.text is very similar to the Java equivalent, the difference being that it is a struct and to get to the characters you have to use the struct's chars variable. You can find the struct defined in antlr3string.h.
There are a couple of other properties that you can use off of the token variables. Other than .text, you can use: (this is mostly for my own reference). ;-)
Today Yahoo! released the AS3 version of their maps API. They also released the hack that Jon and I worked on back in Q2. Check it out, and if you don't have Flash9 and refuse to upgrade, you can try spinning and flicking your iPhone to simulate it*. You almost get the same effect.
*You assume full responsibility for any damages done to your iPhone.
I've been a fan of Antlr for a while now. I've used it to generate intrinsic classes for ActionScript2 so that our team could build an incremental compiler. I just bought the Antlr3 book (in PDF format) and have been going through the examples as I reach them.
As I went through the book I decided that I wanted to combine learning Antlr with my recent LLVM fascination. LLVM is in C/C++ so I decided to use the 'C' output language option in Antlr. I haven't found any documentation on line on how to use the C API, but through some trials I've ported the first example in the book to C.
The first big trial that I faced was that XCode defaults to C++ mode, which is fine for compiling C code as long as you use the right decorations. Some of the Antlr3C support lib uses 'or' which the preprocessor converts to '||'. I spent a day and found that you can disable this by using the '-fno-operator-names' compiler flag.
Most of the code is very similar to the Java version. The second problem I ran into is when you try to connect the dots between creating the lexer and the parser. In Java you just create a CommonTokenStream and pass the lexer into its constructor. In the C version you have to drill down the nested structs to find the token stream. It's not hard to find, it just takes way to long to drill down through the files.
Well, I made it to the end of chapter four. I'd have gone on but www.swa.hpi.uni-potsdam.de seems to have died for the moment. The tutorial is writtem for Squeak which means that those of us running VisualWorks get to debug learn more.
Some of the subtle differences betwen Squeak and VisualWorks crop up. The Date objects in Squeak have a 'yesterday' and 'tomorrow' versus the Date object in VisualWorks which has a 'today' which you can add and subtract days from. OrderedCollections are different enough to make you go look up function names.
Hopefully the server comes back up so I can finish the other 6 chapters. KTHNXBAI!
On their site they have a couple of examples, the 'easiest' is a counter. I have no idea how to replicate that in VisualWorks/Seaside. This is my first VisualWorks/Seaside app. Lets see how well it goes.
I've found a neat tutorial: http://www.swa.hpi.uni-potsdam.de/seaside/tutorial
Hopefully it explains some things. It seems objects have an odd lifespan. :-S
So last week I installed VisualWorks. Tonight I installed Seaside on it. All I had to do to install it was open up the StORE and select the latest SeasideForWebToolkit version and select "Load". Towards the end it asked me a couple questions (admin id and password) then it was done.
Now I'm off to make my first Seaside app. TTFN
Early this past week I installed VisualWorks (NonCommercial) to play with. I've used Dolphin Smalltalk before and liked how the system works.
Installing VisualWorks was easy enough, I filled out the form and was given access to the downloads page. The net installer didn't work so I used the CD ISO download (10 minute download on the cable modem).
I've been pleasantly suprised at the StORE that is in VisualWorks. If Dolphin Smalltalk had that sort of repository I couldn't imagine moving away from it. Dolphin is Win32 only and doesn't seem to have the repository. Ah well, I might see a VisualWorks purchase in my future.