Rendered at 11:18:18 GMT+0000 (Coordinated Universal Time) with Cloudflare Workers.
aappleby 6 hours ago [-]
Yes, but it doesn't need any funny parsing trick to handle them. Just parse the whole statement as a list of expressions joined by operators, and then you can convert the flat list into a precedence-respecting tree with a few lines of code and an operator-to-precedence table.
childintime 6 hours ago [-]
Yes, it's as easy as that. Or check out Jonathan Blow on precedence.
The infamous dragon book convinced people to use the wrong tools and have the wrong mindset. It was a work of incompetence. There were no dragons, but the book itself.
fjfaase 4 hours ago [-]
Just a single function per level is sufficient for implementing both right and left association. I do not see the problem.
recursivedoubts 10 hours ago [-]
hyperscript has some operator precedence, but within a given general precedence level you have to explicitly parenthesize if you use different operators:
this eliminates most practical precendence questions
NB: one thing that may strike people as strange is that the parse methods are on the parse elements themselves, I like to localize everything about a parse element in one place
bitwize 11 hours ago [-]
Not if it's s-expression-based! (laughs in smug lisp weenie)
aleph_minus_one 10 hours ago [-]
Or, if the programming language uses infix binary operators:
Not if the programming language has evaluation order from left to right, e.g.
“All J verbs (functions and operators) have the same priority and associate right-to-left. For example, a b + c is equivalent to a * (b + c), not (a * b) + c.”*
Your point about not needing operator precedence still stands, though.
aleph_minus_one 30 minutes ago [-]
> J is APL-inspired, and APL is right-associative, so that would surprise me.
You are indeed right (it has been quite a long time since I experimented with J):
The infamous dragon book convinced people to use the wrong tools and have the wrong mindset. It was a work of incompetence. There were no dragons, but the book itself.
https://github.com/bigskysoftware/_hyperscript/blob/06f9078a...
https://github.com/bigskysoftware/_hyperscript/blob/06f9078a...
this eliminates most practical precendence questions
NB: one thing that may strike people as strange is that the parse methods are on the parse elements themselves, I like to localize everything about a parse element in one place
Not if the programming language has evaluation order from left to right, e.g.
2+3*4
is evaluated as
(2+3)*4.
For example J uses this kind of evaluation.
“All J verbs (functions and operators) have the same priority and associate right-to-left. For example, a b + c is equivalent to a * (b + c), not (a * b) + c.”*
Your point about not needing operator precedence still stands, though.
You are indeed right (it has been quite a long time since I experimented with J):
> https://www.jsoftware.com/help/jforc/preliminaries.htm (scroll down to "Order of Evaluation")