1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
<<
#include ATOKPTR_H // define smart pointers
class ANTLRToken : public ANTLRCommonToken {
public:
int muck;
public:
ANTLRToken(ANTLRTokenType t, ANTLRChar *s) : ANTLRCommonToken(t,s)
{ muck = atoi(s); }
ANTLRToken() {;}
ANTLRChar *getText() const { return ""; }
void setText(const ANTLRChar *s) { ; }
virtual ANTLRAbstractToken *makeToken(ANTLRTokenType t, char *s, int line)
{
ANTLRToken *tk = new ANTLRToken(t,s);
tk->muck = atoi(s);
return tk;
}
};
#include "DLGLexer.h"
#include "PBlackBox.h"
int main()
{
ParserBlackBox<DLGLexer, Expr, ANTLRToken> p(stdin);
p.parser()->calc();
return 0;
}
>>
#token "[\ \t\n]+" <<skip();>>
class Expr {
calc: <<int r;>>
e>[r]
<<printf("result is %d\n", r);>>
;
e > [int r]
: <<int b;>>
e2>[$r] ( "\+" e2>[b] <<$r+=b;>> )*
;
e2 > [int r]
: NUMBER <<$r=mytoken($1)->muck;>>
( "\*" NUMBER <<$r*=mytoken($2)->muck;>> )*
;
}
#token NUMBER "[0-9]+"
|