Insert <it’s not much but it’s honest work> meme. It only supports ints and bools, some logic and simple arithmetics and it compiles to Java but damn was it hard to get that far.

Can you guess what everything does?

  • bleistift2@feddit.de
    link
    fedilink
    English
    arrow-up
    8
    arrow-down
    1
    ·
    7 months ago

    It only supports ints and bools, some logic and simple arithmetics and it compiles to Java but damn was it hard to get that far.

    I have a bachelor’s in computer science and I don’t think I would be able to do that…

    • swordsmanluke@programming.dev
      link
      fedilink
      arrow-up
      5
      ·
      7 months ago

      Compilers are a specialized topic - and syntax design is fiddly - but it really is no harder than any other sort of program. A lot of the hard theoretical work was done back in the sixties and seventies. You don’t have to start from scratch. These days it’s “only” a matter of implementing the features you want and making sure your syntax doesn’t leave itself open to multiple interpretations. (just as arithmetic, e.g. ‘5 × 4 - 1’ requires some rules to make sure there’s only one correct interpretation, so do language syntaxes need to be unambiguous to parse. )

      Don’t get me wrong - writing a language is a lot of work and it’s super cool that OP has done this! I just want to stress that language development is 100% doable with an undergrad degree. If you understand recursion and how to parse a string you already have all the theory you need to get started.

      • prof@infosec.pubOP
        link
        fedilink
        arrow-up
        2
        ·
        7 months ago

        Valuable input! I actually am an undergrad student. There are a lot of frameworks out there that support writing languages, with MPS being one of them.

        If I’d start from scratch again and had a little more time, I’d frankly try writing an interpreter myself, instead of trying to conform to weird framework syntax, which I won’t be able to reuse in any other context.

        Saying syntax design is fiddly is an understatement. I focused very hard on getting an abstract syntax somehow finished before working on generation in my first iteration. Then I had so much technical debt, that I couldn’t get anything to work and had to rewrite a lot. So I scrapped it all and started again, starting with top level concepts including generation and only implementing some lower level ones, once everything around it worked properly.

      • pivot_root@lemmy.world
        link
        fedilink
        arrow-up
        3
        ·
        7 months ago

        My college must have been full of sadists. They had undergrad compiler courses and required students to take them.

        • Adramis@lemmy.world
          link
          fedilink
          arrow-up
          1
          ·
          edit-2
          7 months ago

          Same, it usually whacked about half the attempted majors into another major. In the first half of senior year. They kept wondering why their program wasn’t growing much even though similar colleges’ programs were growing like mold on a dorm shower curtain. I enjoyed the course and never used the primary skills taught in it again.

          • pivot_root@lemmy.world
            link
            fedilink
            arrow-up
            1
            ·
            7 months ago

            It really depends on what you do, but somehow, I actually did end up using some of the things those courses were teaching. It turns out the visitor pattern is extremely useful for writing JavaScript code transformers.

        • WanakaTree@lemm.ee
          link
          fedilink
          arrow-up
          1
          ·
          7 months ago

          I definitely read this as you were a third year French major being forced to taking a compiler course for a moment and went wtf. Then my brain slapped itself and realized you mean you’re a student in France.

  • phoneymouse@lemmy.world
    link
    fedilink
    arrow-up
    2
    ·
    edit-2
    7 months ago

    Why aren’t the booleans like “facts” or “no cap” for true and cap for “false”?

    Also, you could have exceptions be called “Sus”

    • prof@infosec.pubOP
      link
      fedilink
      arrow-up
      1
      ·
      7 months ago

      Because it was easier to use Java primitives than implement the constants myself.

  • bleistift2@feddit.de
    link
    fedilink
    English
    arrow-up
    2
    ·
    edit-2
    7 months ago
    class Scratch {
      // Start of file
    
      public static void main(args: string[]) {
        int number1 = 2;
        number 1 = 10;
        int number2 = 13;
        boolean fo_sure = true;
      
        if (fo_sure) {
          number1 = number1 + 5 - 10 * 2 / 3;
        }
      
        System.out.println(number1);
      
        boolean canYouSeeMee = false;
        System.out.println(canYouSeeMe);
        if (false) {
          canYouSeeMe = false;
        } else {
          canYouSeeMe = true;
        }
        System.out.println(canYouSeeMe);
      } 
    }
    

    What’d I win?

    I find it interesting and unnerving that I understood the code, but not the youthspeak.

    • prof@infosec.pubOP
      link
      fedilink
      arrow-up
      2
      ·
      7 months ago

      Well done, here’s your price: 🏅

      You may redeem it for a star on a GitHub repo of your choice.

      It all gets put into the main method though in this version 😄

    • AMDIsOurLord@lemmy.ml
      link
      fedilink
      arrow-up
      1
      ·
      7 months ago

      We think alike friend

      Don’t lose your passion, doing things the shit old way can also make you a better programmer in the newer paradigms

      Although, I recommend you at least learn C++23

    • MinekPo1 [She/Her]@lemmygrad.ml
      link
      fedilink
      arrow-up
      1
      ·
      7 months ago

      don’t worry , it can always get worse . source : I implemented a esoteric programming language of my own making with just a parser (no lexer !) and a tree walking interpreter while reimplementing a standard library and depending on undefined behavior in python . honestly I fear that code more each time I look at it

  • bleistift2@feddit.de
    link
    fedilink
    English
    arrow-up
    1
    ·
    7 months ago

    It only supports ints and bools, some logic and simple arithmetics

    That’s more than you need.

  • Z4rK@lemmy.world
    link
    fedilink
    English
    arrow-up
    1
    ·
    7 months ago

    It’s really cool, but the example doesn’t produce any sensible output? If you have created something like this, why wouldn’t you have your demo output something sensible like Fibonacci or 1337 or whatever.

  • porgamrer@programming.dev
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    7 months ago

    I swear, Zoomers are like the steve buscemi “fellow kids” meme, but somehow everyone in the scene is young

    Anyway, nice compiler. Might feel basic to you, but writing a back end for a low level IR format is not that much harder.

    • prof@infosec.pubOP
      link
      fedilink
      arrow-up
      1
      ·
      7 months ago

      It’s a tool for designing domain specific languages. Really interesting!

  • neatchee@lemmy.world
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    7 months ago

    Vibe check is your scope declaration (class?)

    num is obviously your int class

    fr? is your Boolean class

    if __ no cap is ’ if __ then’, if cap is ‘else’, sheesh ends the conditional

    flex __ on the haters is your echo/print

    frfr is your scope ending

    • prof@infosec.pubOP
      link
      fedilink
      arrow-up
      1
      ·
      7 months ago

      Correct!

      Vibe check is pretty much the scope. Classes aren’t a thing (yet).

  • MajorHavoc@programming.dev
    link
    fedilink
    arrow-up
    1
    ·
    7 months ago

    It’s so beautiful!

    Now I’m thinking about how to alias “flex X on the haters” into other development environments…

  • pivot_root@lemmy.world
    link
    fedilink
    arrow-up
    1
    ·
    7 months ago

    Does it compile into JVM bytecode or Java source code?

    JVM bytecode is one of the most infuriating IRs I ever had the displeasure to work with, and if you managed to make a compiler for that, I applaud you.

    • prof@infosec.pubOP
      link
      fedilink
      arrow-up
      1
      ·
      7 months ago

      Fortunately I generate Java source code from it. However MPS generates both source and byte code when you build the solution. For some reason I can’t get the byte code to run though, but the source code does, so I don’t care too much.