There is far less of a difference here than might appear at first blush. These graphs might be useful for getting an overview of the grammar productions for these languages, but I don't think they are very helpful for comparing them.<p>The author processed Ruby's YACC file into something that ANTLR would accept and I'm not sure that all of the relevant information made it through. For one, it looks like Ruby's operator precedence is not captured here at all. Between this, and the fact that Ruby doesn't have separate statement and expression concepts, everything that's left ends up in one large highly connected graph.<p>The Java and Javascript graphs, generated as they are from the EBNF-like ANTLR, strike me as much more true to the productions of their respective grammars. Since they were both generated in the same way, they're also more directly comparable to one another. The most eye-catching thing about these two are of probably the chains of expressions which encode the precedence rules of their operators. Java has a boatload of operators, which account for the top half of its graph. It then has two snarls at the bottom, one for statements on the left, one for declarations on the right. Most modern languages in the algol family will have statement syntax rather similar to Java's here; if you're interested in what sets Java apart syntactically you'd likely find it clustered about the bottom right corner of the graph.<p>Javascript's operators are only slightly simpler than Java's, and there are two variations, one that allows the 'in' operator, and one that does not. This creates the two chains running down the bottom-right hand side. One interesting thing to note is the lack of tight, complicated snarls in the javascript graph. Javascript's grammar is fairly simple, and ignoring the 'in' operator, quite straightforwards, so I suppose this shouldn't be too surprising.