Discussion:
Making custom DSLs starting with "!" and "@"
Abhijit Nandy
2018-11-08 10:40:47 UTC
Permalink
Hi,

I want to support some custom syntax like the following in a Lua console I
have implemented:

!ls -lrt
or
@name{....}

The exclamation mark and "@" are not valid Lua syntax so currently I detect
them in the typed string and replace with valid Lua code - macro
pre-processing.

But is there a way to make it valid given the flexibility of Lua to make
DSLs.

Thanks
Abhijit
Luiz Henrique de Figueiredo
2018-11-08 10:53:50 UTC
Permalink
Post by Abhijit Nandy
!ls -lrt
or
@name{....}
But is there a way to make it valid given the flexibility of Lua to make DSLs.
Experiment with ltokenp. See
http://lua-users.org/lists/lua-l/2018-07/msg00683.html.
Abhijit Nandy
2018-11-08 11:20:09 UTC
Permalink
Thanks Luiz. That should do it!!

ltokenp uses a separate Lua interpretor. How different is it from the usual
Lua 5.3.x code and can it be merged?

Thanks,
Abhijit

On Thu, Nov 8, 2018 at 4:24 PM Luiz Henrique de Figueiredo <
Post by Abhijit Nandy
I want to support some custom syntax like the following in a Lua console
!ls -lrt
or
@name{....}
detect them in the typed string and replace with valid Lua code - macro
pre-processing.
Post by Abhijit Nandy
But is there a way to make it valid given the flexibility of Lua to make
DSLs.
Experiment with ltokenp. See
http://lua-users.org/lists/lua-l/2018-07/msg00683.html.
Luiz Henrique de Figueiredo
2018-11-08 11:46:57 UTC
Permalink
ltokenp uses a separate Lua interpretor. How different is it from the usual Lua 5.3.x code and can it be merged?
ltokenp is a preprocessor. You need to save its output and run it separately.

If your DSL contains Lua as a subset, then you can embed a token
processor by using the modified llex.c (one line) and a suitable
proxy.c. I have posted several examples here in lua-l. Search the
archives for proxy.c. However, writing a custom proxy.c is not fun for
anything complicated and requires some understanding of the internals
of Lua (mainly the lexer). This was the motivation for ltokenp, where
you can write token filters in Lua.

Loading...