[m-users.] Parsing source files / tem-rewriting

Sean Charles (emacstheviking) objitsu at gmail.com
Fri Aug 16 15:37:06 AEST 2024


Yes, there is something *special* that Mercury does to your mind!

> On 15 Aug 2024, at 16:26, Volker Wysk <post at volker-wysk.de> 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 <post at volker-wysk.de> 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:
>> "
>> https://en.wikipedia.org/wiki/With_great_power_comes_great_responsibility"
>> 
>> 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 <http://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 <post at volker-wysk.de> 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 <post at volker-wysk.de> 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
>>>>>>> users at lists.mercurylang.org
>>>>>>> https://lists.mercurylang.org/listinfo/users
>>>>>> 
>>>> 
>>> 
>> 
>> 
>> _______________________________________________
>> users mailing list
>> users at lists.mercurylang.org <mailto:users at lists.mercurylang.org>
>> https://lists.mercurylang.org/listinfo/users
> 
> _______________________________________________
> users mailing list
> users at lists.mercurylang.org
> https://lists.mercurylang.org/listinfo/users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurylang.org/archives/users/attachments/20240816/d1f0188f/attachment.html>


More information about the users mailing list