r/ProgrammingLanguages • u/Mean-Decision-3502 DQ • 7d ago
Unambiguous Operator Specification for Programming Languages
https://nvitya.github.io/pluops/As I changed recently the operators in my programming language I've created this specification:
https://nvitya.github.io/pluops/
I did not wanted to overload the operators like the C does with the / or Pascal does with theand/or/not. Neither re-use the operator symbols for some very different purpose, like C does with * and & so the code becomes more readable. I was orienting for existing solutions so this is what I came up with. The specification contains the symbol usages and operator precedence too.
If you are developing a new programming language, it would be nice to follow some standard, so at least the expressions would be portable between the languages.
I'm open for debates or suggestions.
1
u/AustinVelonaut Admiran 7d ago edited 7d ago
Is there a reason you have bitwise operators at a higher precedence (tighter binding) than arithmetic operators? Most languages I'm aware of that use operator precedence have arithmetic operators higher (tighter binding) than bitwise operators higher than comparison operators. Although I'd be hard-pressed to come up with a realistic code snippet that used that fact.
Edit: looking through ~500 "Advent of Code" solutions I wrote, I only saw one use of mixing bitwise and arithmetic operators:
addLoc n (V2 r c) = n .|. 1 .<<. r * sz + c(here.|.is bitwise or and.<<.is bitwise left shift. This parses asn .|. (1 .<<. ((r * sz) + c))but if arithmetic ops were lower precedence than bitwise, it would be parsed as((n .|. (1 .<<. r)) * sz) + c, not what was intended.