From 442a7bdeda42a4f08bf313a4bddb092532b95232 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Wed, 29 Sep 2010 20:59:26 +0000 Subject: [PATCH] added VARREF in lexer matching $[a-zA-Z_][a-zA-Z_0-9]*, added VarRefNode class git-svn-id: svn://anubis/fart/branches/scene-file-scripting@325 7f9b0f55-74a9-4bce-be96-3c2cd072584d --- parser/nodes.h | 14 ++++++++++---- parser/parser.lex | 4 ++++ parser/parser.yy | 2 ++ 3 files changed, 16 insertions(+), 4 deletions(-) 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; } ;