Welcome to my personal wiki space. Mainly it organizes Terence's blog
Spent hours and hours on airplanes recently bouncing around Europe giving talks. had some time to think about increasing the recognition strength of LL by increasing the prediction mechanism from a DFA to a pushed down machine, either LL or LR. I've scanned my notes and diagrams; see the attachments on this news item. I tried all sorts of things trying to approximate non-regular lookahead languages but didn't really come up with anything great. One thing of note,...
Last changed Jun 11, 2008 01:34 by Terence Parr
As Java gets more and more complicated with generics, closures, etc... I keep looking for simplicity. I have the Mantra prototype, but even that subset is kind of complicated. I decided to look at Smalltalk again. Coincidentally, Nik Boyd, who built Bistro years ago contacted me; he's moved to SF Bay area, which means we can chat in person....
Last changed Jun 06, 2008 13:35 by Terence Parr
The Default error handling mechanisms that does single token insertion and deletion works really well in many cases. The one area where I think ANTLR need some work is during no viable alternative exceptions and loops around rule references. For example, what happens if you have a fragment like:
d : decl+ ;
decl: 'foo'
| 'bar'
;
If you have input ")) foo bar foo", which is valid except for the crazy "))" at the front,...
Last changed May 09, 2008 16:50 by Terence Parr
Currently syntax errors cause invalid trees and possibly even runtime exceptions when building ASTs. What we really need I believe is to have rules that encounter syntax errors return an ERROR node of some sort that records where the error occurred and, with luck, the tokens consumed during recovery. I started an improvement request:
http://www.antlr.org:8888/browse/ANTLR-193
The basic idea is that ERROR nodes get used in place of ASTs that would normally be produced by rule indications....
Last changed May 03, 2008 10:43 by Terence Parr
just had some cool ideas about a semantic rule specification language...i should write that up too... (also think about multi-threaded rewriting; no side-effects required
Some language translation problems can be described with a few rewrite rules that are predicated upon their context and potentially an arbitrary Boolean expression. For example, consider a few identity transformations such as
expr: // in context of expr, match left side,...
Last changed Apr 11, 2008 11:37 by Terence Parr
Currently ANTLR does not create templates for you automatically when you use output=template option. This is because, when I first implemented it, I had no idea what the right answer was here. I did not know how to deal with whitespace and so on. I think I have the answer now. First, let me remind you that output=AST builds a completely flat tree given no instructions to the contrary. Similarly, the template output should reproduce the input given no instructions.
...
Last changed Jun 19, 2008 07:09 by Terence Parr
Ok, Kay Roepke is in town and we've been discussing the faster expression parsing, among other things. Look for another entry on default StringTemplate generation or a parsing and tree parsing.
Found a ref to Keith Clarke's original recursive-descent precedence work
ANTLR v3.2 will allow special rules for specifying expressions that are particularly efficient both in speed and space....
Last changed Apr 08, 2008 15:23 by Terence Parr
I should be working on something else but got to thinking about how annoying it is specifying expressions in recursive descent parsers. You have to have a new rule for each precedence level. This is also very slow. Just to match 34 it has to descend about 15 method calls. I built a prototype single-rule (plus primary and suffix) operator matching thingie which I enclose below. I should be able to generate it from some metameta syntax in antlr. For example,...
Last changed Oct 11, 2007 12:22 by Terence Parr
I replaced my blocking queue sitting between pipeline actors (threaded consumer/producers) and speed of my word freq program dropped from 5.2s to 3.5s on 5M file simply by replacing the blocking queue with my new ping-pong buffered version. That is close to the 3.0s achieved by the nonthreaded version.
f => Words() => { string w | ... }
// nonthreaded, nested map operation on big list; 3.0s
f....
So I am narrowing down my understanding of how to use mixins. The Comparable example is awesome, but does not need fields. In my effort to reduce the size of the average mantra object, I needed to remove the in and out fields from every object. The should be moved to an element that all of the actors can include or inherit from. I did not want to force all actors to inherit from the same base class, so I decided that a mixin was perfect but mixins don't currently allow fields....
Finally got something ready for people to look at. Main components are in.
http://www.linguamantra.org/
Last changed Oct 03, 2007 14:07 by Terence Parr
Awesome. Mantra does a dynamic mixin. Just map a string to a closure with "self" as first arg:
int.mixin("toHex",
{int self | return java {new mstring(Integer.toHexString(((mint)self).v))};}
);
println(32.toHex());
also note you could alter the MetaClass per object (set .class field) to alter behavior per instance! You can ask about meta object now:
To avoid strange bugs,</int>...
Check this out:
ErrorMgr errors = ErrorMgr(); Vehicle.delegate(errors);
Car c = Car(); c.error("we crashed");
here I am calling the delegate method on the Vehicle class, of which Car is a subclass. I make an instance of a car and then send it the error message, which is forwarded to the error manager....
Last changed Sep 30, 2007 19:58 by Terence Parr
See http://www.linguamantra.org for more information.
Type annotations
Mantra is not a statically typed language like Java, though you'll see types specified in the code. These types are annotations kind of like "executable documentation". For example how many times have you done this in other dynamically typed languages like Ruby and Python:
f(a): ......
Last changed Sep 21, 2007 13:58 by Terence Parr
Mantra is coming along nicely. Added type annotations, but am not doing anything with them yet. Without much optimization (and huge amounts of memory allocation), Mantra loop and list append are looking good:
a = [];
1..5000000:{int i | a += i;};
The equivalent python:
a = [];
for i in range(5000000):
a.append(i);
My unscientific wallclock measurements on my dual cpu mac (powerpc) with Java 1.5 shows Java doing about 3.0s vs 3.9s in python....
|
|