Exemple #1
0
        /*
         * /// <summary>
         * /// Register a system plugin.
         * /// </summary>
         * /// <param name="plugin"></param>
         * /// <param name="sort">Whether or not to sort the plugin by precedence after adding it to the system.</param>
         * public void RegisterStmtPlugin(IStmtPlugin plugin, bool sort)
         * {
         *  var map = plugin.IsSystemLevel ? _sysStmtPlugins : _stmtPlugins;
         *  RegisterPlugin(map, plugin, plugin.StartTokens, sort);
         * }
         */

        /// <summary>
        /// Register an expression plugin.
        /// </summary>
        /// <param name="plugin"></param>
        /// <param name="sort">Whether or not to sort the plugin by precedence after adding it to the system.</param>
        public void RegisterExprPlugin(IExprPlugin plugin, bool sort)
        {
            _totalExpPlugins++;

            var tokens = plugin.StartTokens;

            // Case 1: Postfix plugin - single start token
            if (tokens.Length == 1 && tokens[0] == "$Suffix")
            {
                AddPlugin(_postfixPlugins, plugin, "$Suffix", sort);
                _hasPostfixPlugins = true;
            }
            else
            {
                // Case 2: Expression plugin
                foreach (var token in tokens)
                {
                    AddPlugin(_expPlugins, plugin, token, sort);
                    if (plugin.IsSystemLevel)
                    {
                        AddPlugin(_sysStmtPlugins, plugin, token, sort);
                    }

                    else if (plugin.IsStatement)
                    {
                        AddPlugin(_expStmtPlugins, plugin, token, sort);
                    }

                    if (token == "$NumericLiteralToken")
                    {
                        _hasLiteralCombinators = true;
                    }
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Whether or not there is a statement plugin that can handle the token supplied.
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        public bool CanHandleStmt(Token token)
        {
            var plugin = GetStmt(token);

            if (plugin == null)
            {
                return(false);
            }
            _lastMatchedExtStmt = plugin;
            return(true);
        }
Exemple #3
0
        /// <summary>
        /// Whether or not there is a expression plugin that can handle the token supplied.
        /// </summary>
        /// <param name="token">The token to check against combinators.</param>
        /// <returns></returns>
        public bool CanHandleExp(Token token)
        {
            var plugin = GetExp(token);

            _lastMatchedExp = plugin;
            if (plugin == null)
            {
                return(false);
            }
            return(true);
        }
Exemple #4
0
        private string ExprMetaData(IExprPlugin plugin, int id)
        {
            var name         = plugin.GetType().Name.Replace("Plugin", "");
            var filepath     = @"C:\Dev\Kishore\Apps\FluentScript\fluentscript_latest2\build\plugin_template.js";
            var content      = System.IO.File.ReadAllText(filepath);
            var replacements = new Dictionary <string, string>();

            replacements["name"]        = name;
            replacements["desc"]        = "";
            replacements["type"]        = "expr";
            replacements["precedence"]  = plugin.Precedence.ToString();
            replacements["isStatement"] = plugin.IsStatement.ToString().ToLower();
            replacements["isEndOfStatementRequired"] = plugin.IsEndOfStatementRequired.ToString().ToLower();
            replacements["isSystemLevel"]            = plugin.IsSystemLevel.ToString().ToLower();
            replacements["isAssignmentSupported"]    = plugin.IsAssignmentSupported.ToString().ToLower();

            var tokens = "";

            for (var ndx = 0; ndx < plugin.StartTokens.Count(); ndx++)
            {
                if (ndx != 0)
                {
                    tokens += ", ";
                }

                tokens += "'" + plugin.StartTokens[ndx] + "'";
            }

            var examples = "";

            if (plugin.Examples != null)
            {
                for (var ndx = 0; ndx < plugin.Examples.Count(); ndx++)
                {
                    if (ndx != 0)
                    {
                        examples += ", ";
                    }

                    examples += "'" + plugin.Examples[ndx] + "'";
                }
            }

            replacements["starttokens"] = tokens;
            replacements["examples"]    = examples;

            foreach (var pair in replacements)
            {
                content = content.Replace("${" + pair.Key + "}", pair.Value);
            }
            return(content);
        }