Esempio n. 1
0
 public override void HandleToken(Token<ScriptToken> token)
 {
     switch (token.Type) {
     case ScriptToken.String:
         if (!String.IsNullOrEmpty(_varname) && _equals) {
             int bv=Variable.StringToBool(token.ToString());
             if (bv!=-1) {
                 AddVariableAndReset(_currentnode, new BoolVariable(bv==1 ? true : false, _varname), false, false);
                 break;
             } else {
                 AddVariableAndReset(_currentnode, new StringVariable(token.ToString(), _varname), false, false);
             }
         } else if ((!String.IsNullOrEmpty(_varname) || _currentiden!=null) && !_equals) {
             MakeIdentifier(token);
             int bv=Variable.StringToBool(token.ToString());
             if (bv!=-1) {
                 AddVariableAndReset(_currentiden, new BoolVariable(bv==1 ? true : false), false, false);
                 break;
             }
             AddVariableAndReset(_currentiden, new StringVariable(token.ToString()), false, false);
         } else {
             _varname=token.ToString();
         }
         break;
     case ScriptToken.QuotedString:
         if (!String.IsNullOrEmpty(_varname) && _equals) {
             AddVariableAndReset(_currentnode, new StringVariable(token.ToString(), _varname), false, false);
         } else if ((!String.IsNullOrEmpty(_varname) || _currentiden!=null) && !_equals) {
             MakeIdentifier(token);
             AddVariableAndReset(_currentiden, new StringVariable(token.ToString()), false, false);
         } else {
             _varname=token.ToString();
         }
         break;
     case ScriptToken.Number:
         if (!String.IsNullOrEmpty(_varname) && _equals) {
             _currentvalue=new IntVariable(token.ToInt(), _varname);
             AddVariableAndReset(_currentnode, _currentvalue, false, false);
         } else if ((!String.IsNullOrEmpty(_varname) || _currentiden!=null) && !_equals) {
             MakeIdentifier(token);
             AddVariableAndReset(_currentiden, new IntVariable(token.ToInt()), false, false);
         } else {
             //new ScriptParserException(ScriptParserError.PARSER, "StandardScriptParserHandler.HandleToken", token, _parser, "A number cannot be an identifier");
             _varname=token.ToString();
         }
         break;
     case ScriptToken.Double:
         if (!String.IsNullOrEmpty(_varname) && _equals) {
             _currentvalue=new FloatVariable((float)token.ToDouble(), _varname);
             AddVariableAndReset(_currentnode, _currentvalue, false, false);
         } else if ((!String.IsNullOrEmpty(_varname) || _currentiden!=null) && !_equals) {
             MakeIdentifier(token);
             AddVariableAndReset(_currentiden, new FloatVariable((float)token.ToDouble()), false, false);
         } else {
             new ScriptParserException(ScriptParserError.PARSER, "StandardScriptParserHandler.HandleToken", token, _parser, "A number cannot be an identifier");
             _varname=token.ToString();
         }
         break;
     case ScriptToken.Equals:
         if (_currentiden!=null)
             new ScriptParserException(ScriptParserError.PARSER, "StandardScriptParserHandler.HandleToken", token, _parser, "Unexpected equality sign after identifier declaration");
         else if (_varname.Length==0)
             new ScriptParserException(ScriptParserError.PARSER, "StandardScriptParserHandler.HandleToken", token, _parser, "Expected string, got equality sign");
         else if (_equals)
             new ScriptParserException(ScriptParserError.PARSER, "StandardScriptParserHandler.HandleToken", token, _parser, "Expected value, got equality sign");
         else
             _equals=true;
         break;
     case ScriptToken.OpenBrace:
         if (_currentiden!=null)
             new ScriptParserException(ScriptParserError.PARSER, "StandardScriptParserHandler.HandleToken", token, _parser, "Node cannot contain values (possible openbrace typo)");
         Node tempnode=new Node(_varname, _currentnode);
         AddVariableAndReset(_currentnode, tempnode, false, false);
         _currentnode=tempnode;
         break;
     case ScriptToken.CloseBrace:
         if (_currentnode.Parent==null) {
             new ScriptParserException(ScriptParserError.PARSER, "StandardScriptParserHandler.HandleToken", token, _parser, "Mismatched node brace");
         } else if (_equals) {
             new ScriptParserException(ScriptParserError.PARSER, "StandardScriptParserHandler.HandleToken", token, _parser, "Expected value, got close-brace");
         } else {
             if (_currentiden!=null)
                 Reset(true, true);
             _currentnode=(Node)_currentnode.Parent;
         }
         break;
     case ScriptToken.Comment:
     case ScriptToken.CommentBlock:
         // Do nothing
         break;
     case ScriptToken.EOL:
     case ScriptToken.EOF:
         Finish();
         break;
     //default:
     //	//DebugLog("(StandardScriptParserHandler.handleToken) Unhandled token of type "+token.typeAsString())
     //	break;
     }
 }