(2012年05月28日 02:31), d coder wrote:
Generally a parser generated by other tool and accepting tokens
returns the abstract syntax tree, but it return the evaluated value
in the example.
In other words, it does lexical analysis, parsing and (type)
converting at a time.
If you want simply abstract syntax tree, it may be a little pain to
use ctpg.
Hello Youkei
I am trying to use CTPG for compile time parsing for a DSL I am working
on. I have tried the examples you created in the examples directory.
I would like the parser to effect some side effects. For this purpose, I
tried including the parser mixin into a class, but I got a strange error
saying:
Error: need 'this' to access member parse
I have copied the code I am trying to compile at the end of the email.
Let me know what I could be doing wrong here.
Regards
- Puneet
import ctpg;
import std.array: join;
import std.conv: to;
class Foo
{
int result;
mixin(generateParsers(q{
int root = mulExp $;
int mulExp =
primary !"*" mulExp >> (lhs, rhs){ return lhs * rhs; }
/ primary;
int primary = !"(" mulExp !")" / [0-9]+ >> join >> to!int;
}));
void frop() {
result = parse!root("5*8");
}
}
void main(){
Foo foo = new Foo();
foo.frop();
}
Hello Puneet,
Thank you for your report. I fixed it. Now CTPG creates a static
function as a parser.
But I'm afraid this fix doesn't help you because I don't understand what
a side effect you said is.
Can you show me some examples which include the side effect?
Thanks,
Hisayuki Mima