[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: LPEG output
- From: Kees Jan Hermans <foxkjhermans@...>
- Date: Tue, 25 Jun 2019 12:38:32 +0200
Hi Roberto (and everyone else in Lua PEG),
A couple of questions:
- the white paper says that a 'commit' pops the first element off the
stack, which it states must be a 'choice' stack element. However, if
there was a 'call' instruction in between, the 'choice' and the
'commit' or 'fail' instructions, there will be another type of element
on the stack.
- what does the 'closeruntime' instruction do?
On Wed, 19 Jun 2019 at 14:31, Roberto Ierusalimschy
<roberto@inf.puc-rio.br> wrote:
>
> > I've just finished reading Mr Ierusalemschi's 2008 paper on Lua
> > Parsing Expression Grammars, and I'm very enthusiastic about the
> > possibilities of PEG in general. Especially the intermediate language
> > that it produces (because I want to play with creating an engine that
> > executes that code). And there lies a bit of a problem for me: I
> > cannot seem to make the traditional PEG libraries output the
> > intermediate language, for example in the form that is also used in
> > the paper (the 'ASM' of the language, with the instructions 'Char',
> > 'Jump', etc). Is there a way to use the PEG library much more
> > modularly, in a way that, for example, a C compiler can generally also
> > output ASM? Thanks!
>
> The current version (now at github [1]) has a method to print
> these bytecodes. ('pattern:pcode()', when compiled with LPEG_DEBUG
> defined.) However, there is no explicit way to export or have
> other access to the code. But it shouldn't be difficult for another
> library to access that code inside the corresponding userdata.
> (See the print function 'lp_printcode' for inspiration.)
>
> Please keep in mind that the current instruction set is different from
> the one used back there in that paper, but the general idea is the same.
>
> [1] https://github.com/roberto-ieru/LPeg
>
> -- Roberto
>