Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Yes it is horrible, but it doesn't make a grammar less real, labels don't matter...


labels definitely matter. Naming is one of the two hardest things [0].

The point in this case is that the names are hard because they're making up for limitations in left-recursive grammars. Personally, I still find "Addable_expr" to be more intuitive than "additive_expr": where it means "an expression that can be added". Both are more intuitive (to me) than "Expr2". But that's personal preference, and part of why naming is hard :).

[0] https://martinfowler.com/bliki/TwoHardThings.html


I am not disagreeing with you, I just think that the "grammar" still works even with terrible naming. It is harder to read, it is harder to maintain, but it is still real. Perhaps I am missing some subtler point here...


When I wrote "real grammars" above I meant the grammars that people write to specify "real" widely used production-quality programming languages.

I linked to the C standard elsethread: https://web.archive.org/web/20161223125339/http://flash-gord...

Here is the Java specification: https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.htm...

Here is the Python language reference (with terser names, but definitely "m" for multiplicative and "a" for additive expressions): https://docs.python.org/3/reference/expressions.html#binary-...

These are "real" grammars. As opposed to a "toy" grammar that someone throws on GitHub to demonstrate an "X in 100 lines" thing.


Thanks, i am enjoying reading this!


Try your idea. It won't work. The reason is that they aren't "addable", they are precedence1 and precedence2.

You can change Exp to Precedence if you wanted but that's just longer.


"It won't work" is a hilarious claim seeing how actual language standards do exactly this, and it works well. See the C standard for example: https://web.archive.org/web/20161223125339/http://flash-gord... . Search for "additive-expression" to see the relevant grammar rules.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: