13 kLiteral
, kCallRuntime
,
19 virtual ~AstNode() { }
21 virtual Type
node_type() const = 0;
24 IsLiteral() { return node_type() == AstNode::kLiteral
; }
27 AsLiteral() { return IsLiteral() ? reinterpret_cast<Literal
*>(this)
31 IsCallRuntime() { return node_type() == AstNode::kCallRuntime
; }
34 AsCallRuntime() { return IsCallRuntime() ? reinterpret_cast<CallRuntime
*>(this)
39 class Expression
: public AstNode
{
45 class Literal
: public Expression
{
48 virtual AstNode::Type
node_type() const { return AstNode::kLiteral
; }
51 std::string
ToString();
55 class CallRuntime
: public Expression
{
58 virtual AstNode::Type
node_type() const { return AstNode::kCallRuntime
; }
65 ExpressionCheck (bool *ok
)
68 return new CallRuntime();
70 return new Literal ();
76 GetExpression (bool *ok
)
78 Expression
*expression
= ExpressionCheck (ok
);
79 Expression
*return_expr
= NULL
;
81 if (expression
!= NULL
&& expression
->AsLiteral() != NULL
)
82 return_expr
= new Literal();
83 else if (expression
!= NULL
&& expression
->AsCallRuntime() != NULL
)
84 return_expr
= expression
;
90 main (int argc
, char **argv
)
94 AstNode
*node
= GetExpression (&a_bool
);