diff --git a/parser/nodes.h b/parser/nodes.h index 6b55bf2..5d63aa2 100644 --- a/parser/nodes.h +++ b/parser/nodes.h @@ -168,10 +168,7 @@ class IdentifierNode : public Node { public: IdentifierNode(const std::string & str) { m_string = str; } - std::string getString() - { - return m_string; - } + std::string getString() { return m_string; } protected: std::string m_string; }; @@ -442,5 +439,14 @@ class BinOpNode : public ExpressionNode refptr two; }; +class VarRefNode : public Node +{ + public: + VarRefNode(const std::string & str) { m_string = str; } + std::string getString() { return m_string; } + protected: + std::string m_string; +}; + #endif diff --git a/parser/parser.lex b/parser/parser.lex index d1a3707..ba08110 100644 --- a/parser/parser.lex +++ b/parser/parser.lex @@ -85,6 +85,10 @@ width return WIDTH; *yylval = new IdentifierNode(yytext); return IDENTIFIER; } +\$[a-zA-Z_][a-zA-Z_0-9]* { + *yylval = new VarRefNode(yytext+1); + return VARREF; +} #.*\n yylloc->first_line++; yylloc->last_line++; \n yylloc->first_line++; yylloc->last_line++; diff --git a/parser/parser.yy b/parser/parser.yy index f029932..64a38ef 100644 --- a/parser/parser.yy +++ b/parser/parser.yy @@ -101,6 +101,7 @@ static refptr parsed_scene_node; %token WIDTH; %token IDENTIFIER; +%token VARREF; %left PLUS MINUS %left TIMES DIVIDE @@ -583,6 +584,7 @@ term: factor { $$ = $1; } ; factor: number { $$ = $1; } + | VARREF { $$ = $1; } | LPAREN expression RPAREN { $$ = $2; } ;