< 1682380821 811966 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :that said, I do think that C or C++ shouldn't be extended to accept spaces inside numbers < 1682380861 56355 :zzo38!~zzo38@host-24-207-14-22.public.eastlink.ca PRIVMSG #esolangs :I think you are right; I would prefer to use underscores inside numbers < 1682380892 700628 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :zzo38: it's too late for the underscores, they'd conflict with some user-defined literals in C++ now < 1682380904 686485 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :there are also lots of languages which ignore the first line if it starts with #, but otherwise handle # differnetly < 1682380966 338497 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :zzo38: as in, 0x0000_A000 is parsed a user-defined literal that calls a function named operator ""_A000 < 1682381097 991439 :zzo38!~zzo38@host-24-207-14-22.public.eastlink.ca PRIVMSG #esolangs :O, OK < 1682381151 190015 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :zzo38: that said, I do wish C++ allowed not only apostrophe but multiple adjacent apostrophes as digit separator < 1682381191 498220 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :so that you can balance your apostrophes to avoid confusing partial tokenizing tools that don't know the new rules < 1682381210 976774 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :(yes, there are other ways to balance them, with extra numbers or comments or whatnot, but still) < 1682381289 709609 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :I have at least one, and probably more, Perl file with comments containing punctuation marks at the end of lines that syntax-highlight incorrectly < 1682381327 521599 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :part of the reason I installed Kate was to have an editor that was good at syntax-highlighting Perl in complicated cases, it handles it better than the other editors I tried < 1682381361 742081 :Lord_of_Life_!~Lord@user/lord-of-life/x-2819915 JOIN #esolangs Lord_of_Life :Lord < 1682381423 855806 :Lord_of_Life!~Lord@user/lord-of-life/x-2819915 QUIT :Ping timeout: 264 seconds < 1682381437 587090 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :I don't like syntax highlighting to be clear, but still I'd prefer if multiple apostrophes were accepted < 1682381439 227769 :Lord_of_Life_!~Lord@user/lord-of-life/x-2819915 NICK :Lord_of_Life < 1682381486 146542 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :(I mean for ordinary program; if you are trying to understand or build obfuscated programs or esoteric languages and a syntax highlighting helps with the crazy language rules then I'm fine with it.) < 1682382186 763899 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :what's your opinion on automated bracket-matchers? (either that color all the brackets, or that color the matching bracket when you cursor/hover over a bracket)? < 1682382368 727221 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :ais523: I'm fine with thos and I do use those commands < 1682382419 408501 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :over my time programming, I've got a lot of use out of auto-indent to catch typos < 1682382435 778120 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :(if I mismatch brackets the next line will be indented incorrectly, then I look back to see what caused the auto-indent to break) < 1682382447 337733 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :syntax highlighting is sort-of useful in the same way, but mostly only for catching mismatched quotes < 1682382473 84506 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :ais523: sure, and these days we can also have a compiler/interpreter warn you about indents that don't seem to match your braces < 1682382537 327155 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :this is one reason I dislike Python – it doesn't have that redundant information, so if you misindent a line, the resulting program will often be meaningful but not what you want, and the compiler has no way to catch it < 1682382555 572869 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :ais523: that's only part of the problem < 1682382608 687677 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :oh, syntax highlighting also catches misspelled keywords, that's also useful on occasion < 1682382650 990654 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :I wonder when the consensus in language design moved towards "keywords and identifiers are written the same way as each other, and keywords aren't valid as identifiers" – early language design seemed to avoid that < 1682382675 528627 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :even in Perl, the syntax is designed so that new keywords can be added without conflicts, because variables have sigils on them < 1682382699 421432 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :the other part is that sometimes you forget a closing parenthesis and python thinks that the next line is a continuation, unless you're methodical and put a semicolon at the end of every simple statement. but on the plus side, the interpreter has been improved in the last few years and it now usually points you at the right location when it finally discovers the error, whereas it used to give a < 1682382704 738600 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :nonsensical error message < 1682382737 236598 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :older whitespace-sensitive languages normally had an explicit line continuation marker (like the backslash-at-end-of-line in C) < 1682382759 214644 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :ais523: python has that too, a backslash at the end of the line for continuation < 1682382760 473480 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :e.g. in Visual Basic (which uses newline as a semicolon substitute), you end a line with an underscore to continue it onto the next line < 1682382776 189935 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :but when a parenthesis or bracket or brace is open then the continuation mark is optional < 1682382803 150335 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :(ruby is or used to be even more lax in this I think, allows implicit continuation in even more cases) < 1682382851 378727 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :I didn't realise Ruby was whitespace-sensitive < 1682382872 421561 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :ais523: but on the plus side, python's syntax could be extended in a reasonable way to add a braced syntax, sort of like how haskell has one, and I'm sort of thinking of implementing this as a long term project, < 1682382883 170033 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :the hard part isn't the implementation of course but the marketing < 1682382890 279418 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :from __future__ import braces < 1682382894 553168 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :no no < 1682382908 63368 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :what I want is better < 1682382932 854694 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :because it's compatible, doesn't break any existing program, nor will interpret any likely mistake as a valid program < 1682382940 388650 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :and you can use it in just parts of your code, which makes it easier to sell < 1682382954 465509 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :fwiw, I've been thinking a bit about basic loop syntax recently < 1682382955 532832 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :because I can say as one of the arguments, sure, write most of your code in the normal whitespace-sensitive style, < 1682382971 338427 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :and came up with "while condition do { commands }" which I don't think any major language uses at the moment? < 1682382994 25822 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :Ocaml is close < 1682382994 231617 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :but in that one place where you have a twenty line thing for what should be two very simple lines handling some unimportant cases so that your function does error handling properly, that's where you use this < 1682383009 227740 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :the other case is of course when you write snippets on IRC or inline in paragraphs of text < 1682383015 363118 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :b_jonas: that's pretty much how Haskell is written at the moment, I think < 1682383016 639873 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :that's when you write your whole program with braces < 1682383027 526225 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :Haskell does whitespace-sensitivity pretty well (apart from the offside rule being hard to understand) < 1682383048 63886 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :I might as well explain the syntax because this one isn't a secret < 1682383148 308949 :int-e!~noone@int-e.eu PRIVMSG #esolangs :ais523: what do you need the "do" for? < 1682383163 944074 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :the advantages of "while condition do { commands }" are a) it's easy to read even if the condition somehow ends up spanning several lines, b) you can easily extend it to add modifiers between the while and the do < 1682383189 108323 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :so currently in python, you have compound statements starting with a keyword (class, def, if, else, while, for, with, try, except, finally, match, case), then possibly some condition or whatnot, then a colon, then either one (logical) line right after the colon, or a line break after the colon and an indented block of lines. < 1682383192 936582 :int-e!~noone@int-e.eu PRIVMSG #esolangs :Without it you'll have Rust. < 1682383194 950989 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :my Rust sometimes ends up in the form "while { complicated condition spanning several lines } { loop body }" which is a pain to find a readable indentation for < 1682383211 979024 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :that's what inspired me to think that a keyword between condition and body was needed < 1682383222 255767 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :I'd add a third possibility, which is that instead of the colon you have an opening brace immediately followed by a semicolon followed by python code in braced syntax followed by a matching closing brace < 1682383247 417842 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :the semicolon after the brace is to avoid it parsing as a dictionary literal? < 1682383257 496639 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :exactly < 1682383268 258398 :int-e!~noone@int-e.eu PRIVMSG #esolangs :ais523: I see. So you don't like having } { on a line by itself < 1682383282 437932 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :int-e: right, it's hard to immediately mentally parse what it means < 1682383298 61288 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :in python code in brace syntax, newlines aren't special, they just work as spaces, so indentation doesn't matter either, and after a compound statement you can never use a colon, only a braced block of python code in braced syntax, except that time the semicolon is optional < 1682383309 677576 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :and also in python code in brace syntax, the semicolon has a different meaning from normal: < 1682383322 837673 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :it separates lines from each other, just like newlines do in normal python code < 1682383349 365575 :int-e!~noone@int-e.eu PRIVMSG #esolangs :ais523: tbh I'd probably blame the existence of block expressions for this conundrum :-P < 1682383349 894959 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :so you'd write if A {; if B { C; D } else { E; F } G } < 1682383381 829064 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :you can add extra semicolons almost anywhere inside that block of braced syntax pythohn, like before braces, after braces < 1682383407 383453 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :OCaml ifs are nice, they're "if expression then expression end expression" and you can put newlines before the then and the else < 1682383422 197340 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :or turn any of them into blocks (but OCaml doesn't use {} for blocks) < 1682383424 516852 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :these are the important rules but there are a few auxiliary ones: < 1682383434 268536 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :I like the three-way symmetry < 1682383476 502898 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :namely a decorator can be closed with a semicolon (definitely in braced syntax but ideally also outside for simplicity, those are two different kinds of semicolons but still); < 1682383605 439290 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :there's a new compound command whose heading is empty so you can just write a colon followed by a newline followed by an indented block -- you'd usually use this to write your whole code in indented syntax, like you'd do in IRC or inline in a paragraph of text or on the shell command-line like python3 -e'{; import secrets; for _x in range(10) { print(secrets.randbelow(100) } }' < 1682383693 551612 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :and, perhaps delayed to the next proposal, there's a way to configure an interactive python session to parse braced python syntax at the top level instead of normal indented syntax, for that's another one of those places where the newlines and indents are very inconvenient, < 1682383709 150205 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :and to support this the compile function and some C APIs gain new flags to support this < 1682383769 443788 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :wait, interactive python interpreters are written using the C API? I kind-of assumed they'd be written in Python < 1682383769 569019 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :also we'd probably want to modify that python pretty-formatter tool so it can convert a program source code with possibly braced syntax inside it to a program that doesn't use braced syntax anywhere, which is pretty easy actually once you can tokenize python < 1682383832 254709 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :ais523: I don't know how the interactive interpreter is written, but that's irrelevant, you want to modify the C API anyway for when you embed python into a non-python program (think of vim) as a macro language and you want to input a line of braced python from the user and run it < 1682383882 629070 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :or if you prefer, think of those games that have an in-game debug console that can take lua commands and imagine that in python < 1682383889 923316 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :you can usually input just one line conveniently < 1682383931 361164 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :(there's a good reason why they use lua rather than python, but still) < 1682383955 79079 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :I learned Python using EsoBot's predecessor < 1682383978 347974 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :using one-liners consisting of exec("…") with \n for newline followed by spaces for indentation < 1682384029 441959 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :sure, there are workarounds like that < 1682384040 452413 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :and that is another thing we can use in the marketing: < 1682384055 528406 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :point out how many stupid workarounds people already use to be able to write one-line python < 1682384059 70831 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :not just the exec but others < 1682384069 120906 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :and say that those hurt more than just allowing the braced extension < 1682384080 919127 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :(I was thinking about this quite a bit as you can tell) < 1682384141 571265 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :I will probably have to start by implementing it and putting an interpreter into HackEso of course, to get experience using it < 1682384383 170398 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :Python is intentionally LL(1), isn't it? (assuming that indentation is handled by the lexer) < 1682384393 563091 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :I think this wouldn't break that, but am not immediately sure < 1682384481 824006 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :ais523: indentation is handled by the lexer, and after that the grammar is reasonably simple, except some of the fixups after parsing that are in line with what you'd see in normal languages. I don't know if it's LL(1) off the top of my head right now, but possibly. < 1682384586 184778 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :it's notable because sticking to LL(1) is weird, most languages are happy with LR(1) or even with needing a few special cases < 1682384617 426928 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :although, subtraction is hard to do sensibly in LL(1) < 1682384658 15167 :joast!~rick@cpe-98-146-180-36.natnow.res.rr.com QUIT :Quit: Leaving. < 1682384660 589522 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :`! ipython3 -c "print(1 - 2 - 3 - 4)" < 1682384662 526289 :HackEso!~h@techne.zem.fi PRIVMSG #esolangs :​/hackenv/bin/!: line 4: /hackenv/ibin/ipython3: No such file or directory < 1682384673 72655 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :`! ipython -c "print(1 - 2 - 3 - 4)" < 1682384674 247431 :HackEso!~h@techne.zem.fi PRIVMSG #esolangs :​/hackenv/bin/!: line 4: /hackenv/ibin/ipython: No such file or directory < 1682384678 809812 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :the few special cases is that when you start to parse a statement you can't tell if it's an assignment starting with an lvalue-like expression or an expression statement that's an rvalue expression, so you have to parse it in a way that works for both and then check and fix it up afterwards < 1682384682 208957 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :`` ipython3 -c "print(1 - 2 - 3 - 4)" < 1682384683 255112 :HackEso!~h@techne.zem.fi PRIVMSG #esolangs :​/hackenv/bin/`: line 5: ipython3: command not found < 1682384688 268679 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :`` ipython -c "print(1 - 2 - 3 - 4)" < 1682384689 198754 :HackEso!~h@techne.zem.fi PRIVMSG #esolangs :​/hackenv/bin/`: line 5: ipython: command not found < 1682384706 69080 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :`` python3 -c "print(1 - 2 - 3 - 4)" < 1682384707 302690 :HackEso!~h@techne.zem.fi PRIVMSG #esolangs :​-8 < 1682384711 324170 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :there we go < 1682384723 223854 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :the tree will have the same shape, it's not like symbols have different precedences in lvalue versus rvalue, just some things are invalid in rvalues < 1682384726 121891 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :it is quite hard to parse "1 - 2 - 3 - 4" to -8 in LL(1) < 1682384816 833053 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :what? < 1682384820 701657 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :that sounds fishy < 1682384861 439780 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :I think scan (my very old and bad toy language) has an LL parser that parses 1 - 2 - 3 - 4 to -8 < 1682384863 790924 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :to make it work in LL(1) you need to parse it as (1 + (-2 + (-3 + (-4)))) < 1682384874 873562 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :doable but not very intuitive < 1682384892 494451 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :there are no plus signs, they're all subtractions < 1682384899 424048 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :but I assume that's what you're thinking too < 1682384931 212462 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :LL(1) can't parse it as (((1 - 2) -3) -4) because it would need to know how many brackets to open before it had read past the first - sign < 1682384942 724116 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :* (((1 - 2) - 3) - 4) < 1682384964 625218 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :ok, maybe the parser of scan isn't LL then < 1682385136 7494 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :the function Parse_expr that parses an expression first parses an expression that doesn't have (unparenthisized) infix operators, then has a do-while loop that peeks one token, checks if it's an infix operator, and if is then replaces the current expression with an infix operator expression by consuming its operator and parsing its right hand side, then continues the do loop < 1682385160 699905 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :so that makes it not an LL parser? < 1682385190 16861 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :it's a bit more complicated than this < 1682385212 152957 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :it actually sometimes decides that it doesn't want the infix operator that it peeked because it's too low precedence for the expression that it's parsing < 1682385230 525457 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :the parsing function takes a numeric argument for what precedence of expression it's parsing < 1682385310 597435 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :there's some more magic but I've no idea how it works, this code is ugly and I forgot it < 1682385342 240625 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :though I think in principle parsing this way is fine, it's just a lot of other things that are wrong < 1682385375 257456 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :that sounds a bit like a Pratt parser, or a modification of one < 1682385410 869755 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :I ended up independently reinventing those when working with ayacc (I wasn't the first to discover them, but came up with the technique before seeing the prior art) < 1682385428 123437 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :yeah, I think ayacc can write these < 1682385432 435027 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :it's basically a compressed form of LR parser, specialised for expressions (also very efficient) < 1682385462 200408 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :it kind of has to as an optimization because yacc allows operators with precedences in its yacc input < 1682385653 98117 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :oddly, ayacc's optimization is independent of how yacc does things, and yacc precedences don't work like you'd expect < 1682385663 619145 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :they're implemented as static resolutions for shift/reduce conflicts < 1682385722 392063 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :which is a silly way to do it – better would be to explicitly split the cases for a rule into precedence groups, then say that a rule can't call higher-precedence (or equal-predecence and wrong-associativity) cases of itself recursively < 1682385745 311003 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :yacc's method of specifying precedence is very tied to implementation details of yacc, which has lead to interesting bugs in practice < 1682385755 624547 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :(because the precedence declaration doesn't do what the programmer thought it did) < 1682385779 188986 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :ais523: do you mean the optimization emits the same code no matter whether (you use yacc's %left and %right feature as a shortcut) or (you write the grammar the ordinary BNF way with separate productions for expressions at different precedences)? < 1682385823 587976 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :ah I see, yacc's method can cause strange problems < 1682385867 504736 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :ok, so what I should ask is, can ayacc emit the optimization if you write the grammar the ordinary BNF way with separate productions for each precedence? < 1682385905 790943 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :b_jonas: in theory yes, because the optimizer ignores information about where the shift/reduce table comes from and just looks at the table < 1682385920 975899 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :in practice, it doesn't – I think it's because it finds a different optimized form first and the optimizer isn't confluent < 1682385957 971162 :ais523!~ais523@31.94.4.45 PRIVMSG #esolangs :the naive implementation is O(n²) in terms of the parser size, the optimized version for both yacc-precedence and manual-BNF-precedence are O(n), but the two are different from each other < 1682386002 40683 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :I see < 1682386088 477763 :b_jonas!~x@89.134.29.98 PRIVMSG #esolangs :and yes, I think the naive yacc implementation emits a table where one axis is about as large as there are terminal tokens, the other axis about as large as the grammar because that's how many states there are or something < 1682388674 1365 :ais523!~ais523@31.94.4.45 QUIT :Quit: quit > 1682390536 747423 PRIVMSG #esolangs :14[[07Brainfunct14]]4 10 02https://esolangs.org/w/index.php?diff=108387&oldid=108379 5* 03Nurdle 5* (+0) 10 > 1682390629 209642 PRIVMSG #esolangs :14[[07User:Nurdle14]]4 10 02https://esolangs.org/w/index.php?diff=108388&oldid=108370 5* 03Nurdle 5* (+28) 10/* Things I've Made */ > 1682390642 815809 PRIVMSG #esolangs :14[[07User:Nurdle14]]4 10 02https://esolangs.org/w/index.php?diff=108389&oldid=108388 5* 03Nurdle 5* (-1) 10/* Esolangs */ > 1682391081 375937 PRIVMSG #esolangs :14[[07Esolang talk:Featured languages14]]4 10 02https://esolangs.org/w/index.php?diff=108390&oldid=81109 5* 03Nurdle 5* (+103) 10 < 1682398555 127458 :example99!~example99@2001:9e8:e1f8:7200:1372:ca55:bddc:4b81 JOIN #esolangs * :[https://web.libera.chat] example99 < 1682399723 128791 :example99!~example99@2001:9e8:e1f8:7200:1372:ca55:bddc:4b81 QUIT :Ping timeout: 260 seconds < 1682409427 86749 :Sgeo!~Sgeo@user/sgeo QUIT :Read error: Connection reset by peer < 1682413491 540316 :chiselfuse!~chiselfus@user/chiselfuse QUIT :*.net *.split < 1682419307 653246 :__monty__!~toonn@user/toonn JOIN #esolangs toonn :Unknown > 1682420014 158944 PRIVMSG #esolangs :14[[07Trainfck14]]4 10 02https://esolangs.org/w/index.php?diff=108391&oldid=108386 5* 03Mujk 5* (+37) 10/* operators */ < 1682422909 831023 :sprout_!~quassel@2a02-a448-3a80-1-95d8-6f47-7e50-a25d.fixed6.kpn.net JOIN #esolangs * :sprout < 1682423102 207389 :sprout!~quassel@2a02-a448-3a80-1-b82d-3522-bbd-2edb.fixed6.kpn.net QUIT :Ping timeout: 246 seconds < 1682425109 734935 :sprout_!~quassel@2a02-a448-3a80-1-95d8-6f47-7e50-a25d.fixed6.kpn.net NICK :sprout > 1682428565 522299 PRIVMSG #esolangs :14[[07Sheep14]]4 N10 02https://esolangs.org/w/index.php?oldid=108392 5* 03Ashli Katt 5* (+3447) 10Created page with "{{infobox proglang |name=Sheep |paradigms=Functional |author=[[User:Ashli Katt|Ashli Katt]] |year=[[:Category:2023|2023]] |class=[[:Category:Unknown_computational_class|Unknown]] |files=.sheep }} == About == Sheep is a functional esolang where the only da > 1682428594 521163 PRIVMSG #esolangs :14[[07Trainfck14]]4 M10 02https://esolangs.org/w/index.php?diff=108393&oldid=108391 5* 03PkmnQ 5* (-22) 10 > 1682428620 913429 PRIVMSG #esolangs :14[[07Sheep14]]4 10 02https://esolangs.org/w/index.php?diff=108394&oldid=108392 5* 03Ashli Katt 5* (+1) 10 > 1682428692 690445 PRIVMSG #esolangs :14[[07Sheep14]]4 10 02https://esolangs.org/w/index.php?diff=108395&oldid=108394 5* 03Ashli Katt 5* (+134) 10 > 1682428927 298473 PRIVMSG #esolangs :14[[07User:Ashli Katt14]]4 N10 02https://esolangs.org/w/index.php?oldid=108396 5* 03Ashli Katt 5* (+316) 10Created page with "Hello, I'm Ashli K. I enjoy programming languages, especially the ones found here! ==== Languages I've Made ==== * [[Tupilled]], a functional language with nothing but tuples. * [[Foreach]], a language with only arrays, with only for-each and functions as con > 1682428965 673543 PRIVMSG #esolangs :14[[07User:Ashli Katt14]]4 10 02https://esolangs.org/w/index.php?diff=108397&oldid=108396 5* 03Ashli Katt 5* (+14) 10/* Languages I've Made */ > 1682429102 369372 PRIVMSG #esolangs :14[[07Twoee14]]4 M10 02https://esolangs.org/w/index.php?diff=108398&oldid=72657 5* 03PkmnQ 5* (-22) 10 < 1682429385 834696 :ais523!~ais523@31.94.6.244 JOIN #esolangs ais523 :(this is obviously not my real name) < 1682429407 367539 :chiselfuse!~chiselfus@user/chiselfuse JOIN #esolangs chiselfuse :chiselfuse < 1682429748 906530 :example99!~example99@2001:9e8:e1f8:7200:1e3c:d8f2:4bf6:1ac4 JOIN #esolangs * :[https://web.libera.chat] example99 < 1682429754 802444 :example99!~example99@2001:9e8:e1f8:7200:1e3c:d8f2:4bf6:1ac4 PRIVMSG #esolangs :hi < 1682429764 27303 :example99!~example99@2001:9e8:e1f8:7200:1e3c:d8f2:4bf6:1ac4 PRIVMSG #esolangs :i had some problems < 1682430262 697454 :river!river@tilde.team/user/river PRIVMSG #esolangs :what are they? < 1682431107 928065 :example99!~example99@2001:9e8:e1f8:7200:1e3c:d8f2:4bf6:1ac4 PRIVMSG #esolangs :i could not connect to #esolangs < 1682431119 742192 :example99!~example99@2001:9e8:e1f8:7200:1e3c:d8f2:4bf6:1ac4 PRIVMSG #esolangs :and i had 2 restart < 1682431124 212911 :example99!~example99@2001:9e8:e1f8:7200:1e3c:d8f2:4bf6:1ac4 PRIVMSG #esolangs :to fix it < 1682431154 584862 :__monty__!~toonn@user/toonn QUIT :Quit: leaving < 1682431917 528770 :example99!~example99@2001:9e8:e1f8:7200:1e3c:d8f2:4bf6:1ac4 PRIVMSG #esolangs :wut < 1682431986 766388 :example99!~example99@2001:9e8:e1f8:7200:1e3c:d8f2:4bf6:1ac4 QUIT :Quit: Client closed < 1682431995 902921 :example99!~example99@2001:9e8:e1f8:7200:1e3c:d8f2:4bf6:1ac4 JOIN #esolangs * :[https://web.libera.chat] example99 < 1682432996 798755 :Sgeo!~Sgeo@user/sgeo JOIN #esolangs Sgeo :realname < 1682437544 628288 :ChanServ!ChanServ@services.libera.chat MODE #esolangs +o :int-e < 1682437553 600821 :int-e!~noone@int-e.eu MODE #esolangs -bo *!*@2001:9e8:6735:5500:* :int-e < 1682437615 338389 :example99!~example99@2001:9e8:e1f8:7200:1e3c:d8f2:4bf6:1ac4 PRIVMSG #esolangs :hi < 1682439993 19 :example99!~example99@2001:9e8:e1f8:7200:1e3c:d8f2:4bf6:1ac4 QUIT :Quit: Client closed > 1682442051 890068 PRIVMSG #esolangs :14[[07Brainfunct14]]4 10 02https://esolangs.org/w/index.php?diff=108399&oldid=108387 5* 03Nurdle 5* (+105) 10 > 1682442886 10017 PRIVMSG #esolangs :14[[07Talk:Brainfunct14]]4 N10 02https://esolangs.org/w/index.php?oldid=108400 5* 03Nurdle 5* (+658) 10Created page with "==Computational Class== Neither version of brainfunct is truly Turing Complete due to the way brainfunct calls functions, the maximum amount of functions would be 255, though the nested version may be able to make it potentially infinite. ===brainfunct-slashes=== < 1682443025 904344 :example99!~example99@2001:9e8:e1f8:7200:d807:b6b:d7b1:9bf9 JOIN #esolangs * :[https://web.libera.chat] example99 < 1682443032 865466 :example99!~example99@2001:9e8:e1f8:7200:d807:b6b:d7b1:9bf9 PRIVMSG #esolangs :hi > 1682443114 570087 PRIVMSG #esolangs :14[[07Ulioisc14]]4 10 02https://esolangs.org/w/index.php?diff=108401&oldid=108354 5* 03Example99 5* (-1) 10/* labels and short form */ > 1682443114 696485 PRIVMSG #esolangs :14[[07Brainfunct14]]4 10 02https://esolangs.org/w/index.php?diff=108402&oldid=108399 5* 03Nurdle 5* (+140) 10/* Computational Class */ < 1682443763 903727 :example99!~example99@2001:9e8:e1f8:7200:d807:b6b:d7b1:9bf9 QUIT :Ping timeout: 245 seconds > 1682444134 959512 PRIVMSG #esolangs :14[[07Talk:Brainfunct14]]4 10 02https://esolangs.org/w/index.php?diff=108403&oldid=108400 5* 03Nurdle 5* (+153) 10/* Computational Class */ > 1682445054 545754 PRIVMSG #esolangs :14[[07Brainfunct14]]4 10 02https://esolangs.org/w/index.php?diff=108404&oldid=108402 5* 03Nurdle 5* (+139) 10 > 1682445148 41102 PRIVMSG #esolangs :14[[07Brainfunct14]]4 10 02https://esolangs.org/w/index.php?diff=108405&oldid=108404 5* 03Nurdle 5* (-11) 10 > 1682445357 494612 PRIVMSG #esolangs :14[[07BrainFn14]]4 10 02https://esolangs.org/w/index.php?diff=108406&oldid=108381 5* 03Nurdle 5* (+102) 10 > 1682445517 250271 PRIVMSG #esolangs :14[[07BrainFn14]]4 10 02https://esolangs.org/w/index.php?diff=108407&oldid=108406 5* 03Nurdle 5* (+225) 10 < 1682447447 656571 :vyv!~vyv@bras-vprn-nrbaon0452w-lp130-22-76-65-6-194.dsl.bell.ca JOIN #esolangs vyv :vyv verver < 1682448698 845474 :vyv!~vyv@bras-vprn-nrbaon0452w-lp130-22-76-65-6-194.dsl.bell.ca QUIT :Quit: Konversation terminated! > 1682448792 751852 PRIVMSG #esolangs :14[[07Esolang talk:Categorization14]]4 10 02https://esolangs.org/w/index.php?diff=108408&oldid=108343 5* 03Peter 5* (-87) 10/* Proposed category: RISC */ > 1682448818 892127 PRIVMSG #esolangs :14[[07Esolang talk:Categorization14]]4 10 02https://esolangs.org/w/index.php?diff=108409&oldid=108408 5* 03Peter 5* (-225) 10/* List of all categories? */ < 1682450191 833464 :FreeFull!~freefull@46.205.212.119.nat.ftth.dynamic.t-mobile.pl JOIN #esolangs FreeFull :FreeFull < 1682451652 176627 :Noisytoot!~noisytoot@sourcehut/user/noisytoot QUIT :Quit: ZNC 1.8.2 - https://znc.in < 1682451688 118951 :Noisytoot!~noisytoot@sourcehut/user/noisytoot JOIN #esolangs Noisytoot :Ron > 1682455956 253505 PRIVMSG #esolangs :14[[07Special:Log/newusers14]]4 create10 02 5* 03Gatesolang 5* 10New user account > 1682456162 699714 PRIVMSG #esolangs :14[[07Esolang:Introduce yourself14]]4 10 02https://esolangs.org/w/index.php?diff=108410&oldid=108364 5* 03Gatesolang 5* (+155) 10 > 1682466684 984128 PRIVMSG #esolangs :14[[07Special:Log/upload14]]4 upload10 02 5* 03Nurdle 5* 10uploaded "[[02File:BrainFn-logo.png10]]": The official logo of brainFn > 1682466906 967455 PRIVMSG #esolangs :14[[07BrainFn14]]4 10 02https://esolangs.org/w/index.php?diff=108412&oldid=108407 5* 03Nurdle 5* (+93) 10