Re: [m-users.] Parsing source files / tem-rewriting
Volker Wysk <[email protected]> Fri, 16 Aug 2024 08:04:30 +0200
| Newsgroups | gmane.comp.lang.mercury.general |
|---|---|
| Message-ID | <[email protected]> |
Am Freitag, dem 16.08.2024 um 06:37 +0100 schrieb Sean Charles (emacstheviking): > Yes, there is something *special* that Mercury does to your mind! I think it's its strictness and cleanness - the logic programming paradigm, with modes and determinism categories... And the type system too... Cheers, Volker > > > On 15 Aug 2024, at 16:26, Volker Wysk <[email protected]> wrote: > > > > Hi, Sean! > > > > I see, you've adopted the philosophy "Don't give in until it's done > > right." > > > > That's not bad, I've adopted it too, not very long ago. It was after > > I've learned Mercury. > > > > Keep hacking, and make that transpiler of yours a success. :-) > > > > Cheers, > > Volker > > > > > > Am Donnerstag, dem 15.08.2024 um 07:29 +0100 schrieb Sean Charles > > (emacstheviking): > > > > > > > > > > On 15 Aug 2024, at 04:18, Volker Wysk <[email protected]> wrote: > > > > > > > > Am Mittwoch, dem 14.08.2024 um 19:19 +0100 schrieb Sean Charles > > > > (emacstheviking): > > > > > Yes, I have resisted the urge to use it, Uncle Bens rule applies > > > > > here! :D > > > > > > > > Hmm... I couldn't find out what Uncle Ben's rule is. > > > > > > > > > Ah, it's from a Spiderman movie: > > > " > > > <DreamHaven_May_30_2020_storeboards.jpg>With great power comes great > > > responsibility > > > en.wikipedia.org > > > > > > " > > > > > > https://en.wikipedia.org/wiki/Uncle_Ben > > > Sorry! > > > > > > > > > > > > I am working on a FORTH engine in Mercury right now, it's going > > > > > well, it > > > > > will basically expose the strictness of Mercury through a stack > > > > > based > > > > > system... currently the core words are hand assembled but they > > > > > have a very > > > > > common pattern so far, and when the dust settles I think there > > > > > MIGHT be a > > > > > case for term rewriting to create that data. > > > > > > > > You have a lot of projects. But what would you want to do with a > > > > Forth > > > > engine? Is it just for the fun of programming? ;-) > > > > > > > > > Well, a loooooooong time ago I wrote this, felt-lang.com, since then I > > > have rewritten it in Haskell, SWI-Prolog and C as POCs but wasn't > > > hasppy, then the Universe showed my Mercury. It's been a very > > > rewarding journey since and lots of what I have learned has filtered > > > into my daily coding, mostly improved rigour in thinking about things. > > > > > > The concept of a transpiler is not new, I've used HaXe in the past, > > > but *I* have never written one, currently the Mercury version parses > > > s-expressions into working C code, which compiles, but the more I got > > > into the weeds, the more I realised that I wanted a faster REPL based > > > interactive/explorative environment for the code render phase, with > > > the view that users vould use a glue language for the AT-->Code part > > > to do whatever they want with the parsed s-expression tree. > > > > > > For reasons best known to me3, and to avoid triggering Greenspun's > > > tenth law, I decided I needed a custom FORTH dialect and so now I find > > > myself engaged in hand-to-keyboard, I already have implemented basic > > > stack ops, basic arithmetic, and a bunch of words, > > > > > > > > > ➜ mercury-merth git:(main) ✗ ./dstack > > > > words > > > > > > System words: > > > * + - -> . .S .SEEVM .STATUS .STRICT / /MOD : ; >IOP >IOW BYE > > > CLEARSTACK CONSTANT CR DROP DUP ELSE EMIT ENDIF IF MOD OVER RECURSE > > > ROT SEE SPACE SPACES SWAP THEN TYPE T{ WORDS }T > > > > > > User words: > > > > > > > > > > : hv "Hello Volker!" type cr ; > > > New word defined: hv > > > > words > > > > > > System words: > > > * + - -> . .S .SEEVM .STATUS .STRICT / /MOD : ; >IOP >IOW BYE > > > CLEARSTACK CONSTANT CR DROP DUP ELSE EMIT ENDIF IF MOD OVER RECURSE > > > ROT SEE SPACE SPACES SWAP THEN TYPE T{ WORDS }T > > > > > > User words: > > > HV > > > > > > > hv > > > Hello Volker! > > > > > > > > > > I implemented the test words, T{ -> }T early on, and I copy the > > > relevant tests from the Forth standards site and so far all passing > > > which feels nice, for example, > > > from https://forth-standard.org/standard/core/IF > > > > > > "If/Else/Then" suite > > > T{ : GI1 IF 123 THEN ; -> }T > > > T{ : GI2 IF 123 ELSE 234 THEN ; -> }T > > > T{ 0 GI1 -> }T > > > T{ 1 GI1 -> 123 }T > > > T{ -1 GI1 -> 123 }T > > > T{ 0 GI2 -> 234 }T > > > T{ 1 GI2 -> 123 }T > > > T{ -1 GI1 -> 123 }T > > > > > > > > > My dialect will expose all the Mercury basic types and modules, the > > > stack only allows int and string at the moment but I have some planned > > > features to allow a Lua like table structure, stack signature > > > checking, there is NO coercion of types, as I say, under the hood I > > > intend to 'expose' Mercurys world view into the dialect, it will be a > > > strict strict puppy that's for sure, > > > > > > The other feature I've designed is Forth->Mercury, by analysing the > > > stack signatures, I plan to generate raw Mercury code so I use the > > > engine for rapid prototyping of code, then it can be printed and > > > incorporated into my custom IDE as I go, the IDE being written in > > > Mercury too, still on paper that one but heavily inspired by 'that > > > Doug Englebart demo' and the Squeak Smalltalk Morphic engine. > > > > > > So much to do, so little time. > > > > > > And, it's *always* for the fun of programming! > > > > > > :D > > > > > > Sean > > > > > > > > > > > > > > > > > Cheers, > > > > Volker > > > > > > > > > > > > > > Thanks again. > > > > > Sean > > > > > > > > > > > > > > > > On 14 Aug 2024, at 19:16, Volker Wysk <[email protected]> > > > > > > wrote: > > > > > > > > > > > > Am Mittwoch, dem 14.08.2024 um 19:10 +0100 schrieb Sean > > > > > > Charles (emacstheviking): > > > > > > > That's the chap! > > > > > > > > > > > > > > Thanks Volker, I just could see it, my brain was convinced it > > > > > > > was in a folder! > > > > > > > > > > > > That thing is ridiculously small, for what it does. > > > > > > > > > > > > Enjoy it! :-) > > > > > > > > > > > > Bye, > > > > > > V.W. > > > > > > > > > > > > > > On 14 Aug 2024, at 19:00, Volker Wysk <[email protected]> > > > > > > > > wrote: > > > > > > > > > > > > > > > > Am Mittwoch, dem 14.08.2024 um 18:29 +0100 schrieb Sean > > > > > > > > Charles > > > > > > > > (emacstheviking): > > > > > > > > > Hi, > > > > > > > > > > > > > > > > > > There was an example of term rewriting but I cannot seem > > > > > > > > > to find it > > > > > > > > > anywhere! > > > > > > > > > > > > > > > > > > Is there any code I can leverage to scan a .m file and > > > > > > > > > produce an AST or > > > > > > > > > at least scan the terms... I know the rewrite example > > > > > > > > > pretty has all the > > > > > > > > > answers I need but I just can't find it. > > > > > > > > > > > > > > > > I think you mean samples/expand_terms.m. > > > > > > > > > > > > > > > > Cheers, > > > > > > > > Volker > > > > > > > > _______________________________________________ > > > > > > > > users mailing list > > > > > > > > [email protected] > > > > > > > > https://lists.mercurylang.org/listinfo/users > > > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > > users mailing list > > > [email protected] > > > https://lists.mercurylang.org/listinfo/users > > > > > > _______________________________________________ > > users mailing list > > [email protected] > > https://lists.mercurylang.org/listinfo/users > _______________________________________________ users mailing list [email protected] https://lists.mercurylang.org/listinfo/users