diff --git a/parser/nodes.h b/parser/nodes.h index b6ee582..68254e1 100644 --- a/parser/nodes.h +++ b/parser/nodes.h @@ -22,11 +22,8 @@ class Node void addChildren(refptr other); std::vector< refptr > & getChildren() { return m_children; } - virtual int getInteger() - { - std::cerr << "Warning: Node::getInteger() called!" << std::endl; - return 0; - } + virtual int getInteger() { return getNumber(); } + virtual double getNumber() { std::cerr << "Warning: Node::getNumber() called!" << std::endl; @@ -73,17 +70,6 @@ class Node typedef refptr NodeRef; -class IntegerNode : public Node -{ - public: - IntegerNode(int number) { m_number = number; } - virtual int getInteger() { return m_number; } - virtual double getNumber() { return m_number; } - - protected: - int m_number; -}; - class NumberNode : public Node { public: @@ -139,10 +125,10 @@ class AmbientNode : public VectorNode AmbientNode(NodeRef vector) : VectorNode(vector) {} }; -class AmbientOcclusionNode : public IntegerNode +class AmbientOcclusionNode : public NumberNode { public: - AmbientOcclusionNode(int i) : IntegerNode(i) {} + AmbientOcclusionNode(NodeRef e) : NumberNode(e) {} }; class BoxNode : public Node @@ -185,10 +171,10 @@ class ExtrudeNode : public Node bool isShape() { return true; } }; -class HeightNode : public IntegerNode +class HeightNode : public NumberNode { public: - HeightNode(int i) : IntegerNode(i) {} + HeightNode(NodeRef e) : NumberNode(e) {} }; class IdentifierNode : public Node @@ -246,16 +232,16 @@ class MaterialRefNode : public IdentifierNode bool isMaterial() { return true; } }; -class MaxDepthNode : public IntegerNode +class MaxDepthNode : public NumberNode { public: - MaxDepthNode(int i) : IntegerNode(i) {} + MaxDepthNode(NodeRef e) : NumberNode(e) {} }; -class MultisampleNode : public IntegerNode +class MultisampleNode : public NumberNode { public: - MultisampleNode(int i) : IntegerNode(i) {} + MultisampleNode(NodeRef e) : NumberNode(e) {} }; class NGonNode : public NumberNode @@ -452,10 +438,10 @@ class VFOVNode : public NumberNode VFOVNode(NodeRef e) : NumberNode(e) {} }; -class WidthNode : public IntegerNode +class WidthNode : public NumberNode { public: - WidthNode(int i) : IntegerNode(i) {} + WidthNode(NodeRef e) : NumberNode(e) {} }; /******** scripting nodes ********/ diff --git a/parser/parser.lex b/parser/parser.lex index 97ce09a..112fd89 100644 --- a/parser/parser.lex +++ b/parser/parser.lex @@ -40,7 +40,7 @@ \< return LESS; \> return GREATER; -[0-9]+ *yylval = new IntegerNode(atoi(yytext)); return DEC_NUMBER; +[0-9]+ *yylval = new NumberNode(atof(yytext)); return REAL_NUMBER; [0-9]*\.[0-9]+ *yylval = new NumberNode(atof(yytext)); return REAL_NUMBER; ambient return AMBIENT; diff --git a/parser/parser.yy b/parser/parser.yy index c8ccf46..16f4cd6 100644 --- a/parser/parser.yy +++ b/parser/parser.yy @@ -61,7 +61,6 @@ refptr parser_scope; %token LESS; %token GREATER; -%token DEC_NUMBER; %token REAL_NUMBER; %token AMBIENT; @@ -341,8 +340,7 @@ material_ref: MATERIAL IDENTIFIER { } ; -number: DEC_NUMBER { $$ = $1; } - | REAL_NUMBER { $$ = $1; } +number: REAL_NUMBER { $$ = $1; } ; ngon: NGON expression COMMA expression { @@ -393,17 +391,17 @@ options_items: /* empty */ } ; -options_item: WIDTH DEC_NUMBER { - $$ = new WidthNode($2->getInteger()); +options_item: WIDTH expression { + $$ = new WidthNode($2); } - | HEIGHT DEC_NUMBER { - $$ = new HeightNode($2->getInteger()); + | HEIGHT expression { + $$ = new HeightNode($2); } - | MULTISAMPLE DEC_NUMBER { - $$ = new MultisampleNode($2->getInteger()); + | MULTISAMPLE expression { + $$ = new MultisampleNode($2); } - | MAXDEPTH DEC_NUMBER { - $$ = new MaxDepthNode($2->getInteger()); + | MAXDEPTH expression { + $$ = new MaxDepthNode($2); } | EXPOSURE expression { $$ = new ExposureNode($2); @@ -411,8 +409,8 @@ options_item: WIDTH DEC_NUMBER { | AMBIENT vector3 { $$ = new AmbientNode($2); } - | AMBIENT_OCCLUSION DEC_NUMBER { - $$ = new AmbientOcclusionNode($2->getInteger()); + | AMBIENT_OCCLUSION expression { + $$ = new AmbientOcclusionNode($2); } ;