Esempio n. 1
0
            public KeyToken(TermFlags flags = TermFlags.None) : base(Token.Value, Token.Value)
            {
                this.Flags |= flags;

                if (this.FlagIsSet(TermFlags.IsKeyword) && !Keywords.ContainsKey(this.Text))
                {
                    Keywords[this.Text] = this;
                }
            }
Esempio n. 2
0
        public static TokenType LookupIdentifier(string identifier)
        {
            if (Keywords.ContainsKey(identifier))
            {
                return(Keywords[identifier]);
            }

            return(TokenType.IDENT);
        }
Esempio n. 3
0
        public void RemoveKeywordGroup(string group)
        {
            group = group.ToLower().Trim();

            if (!Keywords.ContainsKey(group.ToLower()))
            {
                return;
            }
            Keywords.Remove(group.ToLower());
        }
Esempio n. 4
0
        public string[] GetKeywords(string group)
        {
            group = group.ToLower().Trim();

            if (Keywords.ContainsKey(group))
            {
                return(Keywords[group].ToArray());
            }
            else
            {
                throw new FieldNotFoundException("Could not find Keyword Group in source");
            }
        }
Esempio n. 5
0
 public Token(TokenType type, Position pos, string val, BindingList <Error> errors)
 {
     Type = type;
     if (Keywords.ContainsKey(val))
     {
         Type = Keywords[val];
     }
     if (type == TokenType.Label && Type != TokenType.Label)
     {
         errors.Add(new Error("Cannot use '" + val + "' as a label", pos));
     }
     Pos = pos;
     Val = val;
 }
Esempio n. 6
0
        public bool KeywordGroupContains(string keywordGroup, string value)
        {
            if (Keywords.ContainsKey(keywordGroup))
            {
                foreach (var kwd in Keywords[keywordGroup])
                {
                    if (kwd.ToLower().Contains(value.Trim().ToLower()))
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Esempio n. 7
0
        public bool KeywordGroupContainsRange(string keywordGroup, string lower, string upper)
        {
            if (Keywords.ContainsKey(keywordGroup))
            {
                foreach (var kwd in Keywords[keywordGroup])
                {
                    if (string.Compare(kwd, lower, StringComparison.Ordinal) >= 0 &&
                        string.Compare(kwd, lower, StringComparison.Ordinal) <= 0)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Esempio n. 8
0
        public void RenameKeywordGroup(string originalName, string newName)
        {
            originalName = originalName.ToLower().Trim();
            newName      = newName.ToLower().Trim();

            if (Keywords.ContainsKey(originalName))
            {
                if (!Keywords.ContainsKey(newName))
                {
                    Keywords.Add(newName, new List <string>(Keywords[originalName]));
                }
                else
                {
                    Keywords[originalName].ForEach((keyword) => Keywords[newName].Add(keyword));
                }
            }
        }
Esempio n. 9
0
        /// <summary>
        /// 识别关键字和标识符
        /// </summary>
        /// <param name="input">输入内容</param>
        /// <param name="index">位置索引</param>
        /// <param name="builder">临时存储变量</param>
        /// <param name="result">返回结果</param>
        private static bool identifyKeywordOrIdentifier(string input, ref int index, StringBuilder builder, List <KeyValuePair <string, int> > result)
        {
            int start = index;

            if (char.IsNumber(input[start]))
            {
                return(false);
            }
            bool returnValue = false;

            while (char.IsLetter(input[index]) || char.IsNumber(input[index]))
            {
                builder.Append(input[index]);
                if (!char.IsLetter(input[index + 1]) && !char.IsNumber(input[index
                                                                             + 1]))
                {
                    string word = builder.ToString();
                    if (Keywords.ContainsKey(word))
                    {
                        int value;
                        Keywords.TryGetValue(word, out value);
                        result.Add(new KeyValuePair <string, int>(word, value));//返回关键字的种别编码
                    }
                    else
                    {
                        string keyWordPattern = @"(\d{1,})([A-Za-z]{2,})";//数字开头的数字、字母串
                        if (!Regex.IsMatch(word, keyWordPattern))
                        {
                            result.Add(new KeyValuePair <string, int>(word, 33));//返回标识符的种别编码33
                        }
                        else
                        {
                            error += "[" + ErrorMessageResource.IdStartWithNumber + "," + word + "],";
                            Match match = Regex.Match(word, keyWordPattern);
                            result.Add(new KeyValuePair <string, int>(match.Groups[1].Value.ToString(), 34));
                        }
                    }
                    builder.Clear();
                    returnValue = true;
                }
                index++;
                continue;
            }
            return(returnValue);
        }
Esempio n. 10
0
        private void IdentifierOut(StringBuilder sb)
        {
            var str = sb.ToString();

            //handle keyword
            if (Keywords.ContainsKey(str))
            {
                Output.Add(Keywords[str]);
            }
            else if (Identifiers.ContainsKey(str)) //handle existing user identifier
            {
                Output.Add(Identifiers[str]);
            }
            else //create new identifier
            {
                Identifiers.Add(str);
                Output.Add(Identifiers[str]);
            }
        }
Esempio n. 11
0
        // Sets all values within a specific KeywordGroup
        public void SetKeywordGroup(string group, params string[] keywords)
        {
            group = group.ToLower().Trim();

            if (Keywords.ContainsKey(group))
            {
                Keywords[group].Clear();
            }
            if (keywords == null)
            {
                return;
            }

            if (!Keywords.ContainsKey(group.ToLower()))
            {
                Keywords.Add(group, new List <string>(keywords));
            }
            else
            {
                Keywords[group.ToLower()].AddRange(keywords);
            }
        }
Esempio n. 12
0
        private static bool CheckKeyword(string searchstring, Item item)
        {
            if (item is CommodityDeed && ((CommodityDeed)item).Commodity != null)
            {
                item = ((CommodityDeed)item).Commodity;
            }

            if (item is IResource)
            {
                var resName = CraftResources.GetName(((IResource)item).Resource);

                if (resName.ToLower().IndexOf(searchstring.ToLower()) >= 0)
                {
                    return(true);
                }
            }

            if (item is ICommodity)
            {
                var commodity = (ICommodity)item;

                string name = commodity.Description.String;

                if (string.IsNullOrEmpty(name) && commodity.Description.Number > 0)
                {
                    name = StringList.GetString(commodity.Description.Number);
                }

                if (!string.IsNullOrEmpty(name) && name.ToLower().IndexOf(searchstring.ToLower()) >= 0)
                {
                    return(true);
                }
            }

            return(Keywords.ContainsKey(searchstring.ToLower()) && Keywords[searchstring.ToLower()] == item.GetType());
        }
Esempio n. 13
0
 private static bool CheckKeyword(string searchstring, Item item)
 {
     return(Keywords.ContainsKey(searchstring.ToLower()) && Keywords[searchstring.ToLower()] == item.GetType());
 }