> > > 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(); }