示例#1
0
 private JSKeyword(JSToken token, string name, JSKeyword next)
 {
     m_name   = name;
     m_token  = token;
     m_length = m_name.Length;
     m_next   = next;
 }
示例#2
0
 private JSKeyword(JSToken token, string name, JSKeyword next)
 {
     this.name   = name;
     this.next   = next;
     this.token  = token;
     this.length = this.name.Length;
 }
示例#3
0
 private JSKeyword(JSToken token, string name, JSKeyword next)
 {
     m_name = name;
     m_token = token;
     m_length = m_name.Length;
     m_next = next;
 }
示例#4
0
        internal bool Exists(string target)
        {
            JSKeyword keyword = this;

            while (keyword != null)
            {
                if (keyword.m_name == target)
                {
                    return(true);
                }
                keyword = keyword.m_next;
            }
            return(false);
        }
示例#5
0
        /*internal bool Exists(string target)
         * {
         *  JSKeyword keyword = this;
         *  while (keyword != null)
         *  {
         *      if (keyword.m_name == target)
         *      {
         *          return true;
         *      }
         *      keyword = keyword.m_next;
         *  }
         *  return false;
         * }*/

        internal JSToken GetKeyword(string source, int startPosition, int wordLength)
        {
            JSKeyword keyword = this;

nextToken:
            while (null != keyword)
            {
                if (wordLength == keyword.m_length)
                {
                    // equal number of characters
                    // we know the first char has to match, so start with the second
                    for (int i = 1, j = startPosition + 1; i < wordLength; i++, j++)
                    {
                        char ch1 = keyword.m_name[i];
                        char ch2 = source[j];
                        if (ch1 == ch2)
                        {
                            // match -- continue
                            continue;
                        }
                        else if (ch2 < ch1)
                        {
                            // because the list is in order, if the character for the test
                            // is less than the character for the keyword we are testing against,
                            // then we know this isn't going to be in any other node
                            return(JSToken.Identifier);
                        }
                        else
                        {
                            // must be greater than the current token -- try the next one
                            keyword = keyword.m_next;
                            goto nextToken;
                        }
                    }

                    // if we got this far, it was a complete match
                    return(keyword.m_token);
                }
                else if (wordLength < keyword.m_length)
                {
                    // in word-length order first of all, so if the length of the test string is
                    // less than the length of the keyword node, this is an identifier
                    return(JSToken.Identifier);
                }

                keyword = keyword.m_next;
            }
            return(JSToken.Identifier);
        }
示例#6
0
        internal JSToken GetKeyword(Context context, int wordLength)
        {
            JSKeyword keyword = this;

nextToken:
            while (null != keyword)
            {
                if (wordLength == keyword.m_length)
                {
                    // we know the first char has to match
                    for (int i = 1, j = context.StartPosition + 1; i < wordLength; i++, j++)
                    {
                        char ch1 = keyword.m_name[i];
                        char ch2 = context.SourceString[j];
                        if (ch1 == ch2)
                        {
                            continue;
                        }
                        else if (ch2 < ch1)
                        {
                            return(JSToken.Identifier);
                        }
                        else
                        {
                            keyword = keyword.m_next;
                            goto nextToken;
                        }
                    }
                    return(keyword.m_token);
                }
                else if (wordLength < keyword.m_length)
                {
                    return(JSToken.Identifier);
                }

                keyword = keyword.m_next;
            }
            return(JSToken.Identifier);
        }
示例#7
0
        internal JSToken GetKeyword(Context token, int length)
        {
            JSKeyword keyword = this;

nextToken:
            while (null != keyword)
            {
                if (length == keyword.length)
                {
                    // we know the first char has to match
                    for (int i = 1, j = token.startPos + 1; i < length; i++, j++)
                    {
                        char ch1 = keyword.name[i];
                        char ch2 = token.source_string[j];
                        if (ch1 == ch2)
                        {
                            continue;
                        }
                        else if (ch2 < ch1)
                        {
                            return(JSToken.Identifier);
                        }
                        else
                        {
                            keyword = keyword.next;
                            goto nextToken;
                        }
                    }
                    return(keyword.token);
                }
                else if (length < keyword.length)
                {
                    return(JSToken.Identifier);
                }

                keyword = keyword.next;
            }
            return(JSToken.Identifier);
        }
示例#8
0
        // each list must in order or length first, shortest to longest.
        // for equal length words, in alphabetical order
        internal static JSKeyword[] InitKeywords()
        {
            JSKeyword[] keywords = new JSKeyword[26];
            // a
            // b
            keywords['b' - 'a'] = new JSKeyword(JSToken.Break, "break");
            // c
            keywords['c' - 'a'] = new JSKeyword(JSToken.Case, "case",
                                                new JSKeyword(JSToken.Catch, "catch",
                                                              new JSKeyword(JSToken.Class, "class",
                                                                            new JSKeyword(JSToken.Const, "const",
                                                                                          new JSKeyword(JSToken.Continue, "continue")))));
            // d
            keywords['d' - 'a'] = new JSKeyword(JSToken.Do, "do",
                                                new JSKeyword(JSToken.Delete, "delete",
                                                              new JSKeyword(JSToken.Default, "default",
                                                                            new JSKeyword(JSToken.Debugger, "debugger"))));
            // e
            keywords['e' - 'a'] = new JSKeyword(JSToken.Else, "else",
                                                new JSKeyword(JSToken.Enum, "enum",
                                                              new JSKeyword(JSToken.Export, "export",
                                                                            new JSKeyword(JSToken.Extends, "extends"))));
            // f
            keywords['f' - 'a'] = new JSKeyword(JSToken.For, "for",
                                                new JSKeyword(JSToken.False, "false",
                                                              new JSKeyword(JSToken.Finally, "finally",
                                                                            new JSKeyword(JSToken.Function, "function"))));
            // g
            keywords['g' - 'a'] = new JSKeyword(JSToken.Get, "get");
            // i
            keywords['i' - 'a'] = new JSKeyword(JSToken.If, "if",
                                                new JSKeyword(JSToken.In, "in",
                                                              new JSKeyword(JSToken.Import, "import",
                                                                            new JSKeyword(JSToken.Interface, "interface",
                                                                                          new JSKeyword(JSToken.Implements, "implements",
                                                                                                        new JSKeyword(JSToken.InstanceOf, "instanceof"))))));
            // l
            keywords['l' - 'a'] = new JSKeyword(JSToken.Let, "let");
            // m
            //keywords['m' - 'a'] = new JSKeyword(JSToken.Module, "module");
            // n
            keywords['n' - 'a'] = new JSKeyword(JSToken.New, "new",
                                                new JSKeyword(JSToken.Null, "null",
                                                              new JSKeyword(JSToken.Native, "native")));
            // p
            keywords['p' - 'a'] = new JSKeyword(JSToken.Public, "public",
                                                new JSKeyword(JSToken.Package, "package",
                                                              new JSKeyword(JSToken.Private, "private",
                                                                            new JSKeyword(JSToken.Protected, "protected"))));
            // r
            keywords['r' - 'a'] = new JSKeyword(JSToken.Return, "return");
            // s
            keywords['s' - 'a'] = new JSKeyword(JSToken.Set, "set",
                                                new JSKeyword(JSToken.Super, "super",
                                                              new JSKeyword(JSToken.Static, "static",
                                                                            new JSKeyword(JSToken.Switch, "switch"))));
            // t
            keywords['t' - 'a'] = new JSKeyword(JSToken.Try, "try",
                                                new JSKeyword(JSToken.This, "this",
                                                              new JSKeyword(JSToken.True, "true",
                                                                            new JSKeyword(JSToken.Throw, "throw",
                                                                                          new JSKeyword(JSToken.TypeOf, "typeof")))));
            // u
            // v
            keywords['v' - 'a'] = new JSKeyword(JSToken.Var, "var",
                                                new JSKeyword(JSToken.Void, "void"));
            // w
            keywords['w' - 'a'] = new JSKeyword(JSToken.With, "with",
                                                new JSKeyword(JSToken.While, "while"));
            // y
            keywords['y' - 'a'] = new JSKeyword(JSToken.Yield, "yield");

            return(keywords);
        }
示例#9
0
        internal static JSKeyword[] InitKeywords()
        {
            JSKeyword[] keywords = new JSKeyword[26];
            JSKeyword   keyword;

            // a
            keyword             = new JSKeyword(JSToken.Abstract, "abstract");
            keyword             = new JSKeyword(JSToken.Assert, "assert", keyword);
            keywords['a' - 'a'] = keyword;
            // b
            keyword             = new JSKeyword(JSToken.Boolean, "boolean");
            keyword             = new JSKeyword(JSToken.Break, "break", keyword);
            keyword             = new JSKeyword(JSToken.Byte, "byte", keyword);
            keywords['b' - 'a'] = keyword;
            // c
            keyword             = new JSKeyword(JSToken.Continue, "continue");
            keyword             = new JSKeyword(JSToken.Const, "const", keyword);
            keyword             = new JSKeyword(JSToken.Class, "class", keyword);
            keyword             = new JSKeyword(JSToken.Catch, "catch", keyword);
            keyword             = new JSKeyword(JSToken.Char, "char", keyword);
            keyword             = new JSKeyword(JSToken.Case, "case", keyword);
            keywords['c' - 'a'] = keyword;
            // d
            keyword             = new JSKeyword(JSToken.Debugger, "debugger");
            keyword             = new JSKeyword(JSToken.Default, "default", keyword);
            keyword             = new JSKeyword(JSToken.Double, "double", keyword);
            keyword             = new JSKeyword(JSToken.Delete, "delete", keyword);
            keyword             = new JSKeyword(JSToken.Do, "do", keyword);
            keywords['d' - 'a'] = keyword;
            // e
            keyword = new JSKeyword(JSToken.Extends, "extends");
            keyword = new JSKeyword(JSToken.Export, "export", keyword);
            keyword = new JSKeyword(JSToken.Ensure, "ensure", keyword);
            //keyword = new JSKeyword(JSToken.Event, "event", keyword);
            keyword             = new JSKeyword(JSToken.Enum, "enum", keyword);
            keyword             = new JSKeyword(JSToken.Else, "else", keyword);
            keywords['e' - 'a'] = keyword;
            // f
            keyword             = new JSKeyword(JSToken.Function, "function");
            keyword             = new JSKeyword(JSToken.Finally, "finally", keyword);
            keyword             = new JSKeyword(JSToken.Float, "float", keyword);
            keyword             = new JSKeyword(JSToken.Final, "final", keyword);
            keyword             = new JSKeyword(JSToken.False, "false", keyword);
            keyword             = new JSKeyword(JSToken.For, "for", keyword);
            keywords['f' - 'a'] = keyword;
            // g
            keyword             = new JSKeyword(JSToken.GoTo, "goto");
            keyword             = new JSKeyword(JSToken.Get, "get", keyword);
            keywords['g' - 'a'] = keyword;
            // i
            keyword             = new JSKeyword(JSToken.InstanceOf, "instanceof");
            keyword             = new JSKeyword(JSToken.Implements, "implements", keyword);
            keyword             = new JSKeyword(JSToken.Invariant, "invariant", keyword);
            keyword             = new JSKeyword(JSToken.Interface, "interface", keyword);
            keyword             = new JSKeyword(JSToken.Internal, "internal", keyword);
            keyword             = new JSKeyword(JSToken.Import, "import", keyword);
            keyword             = new JSKeyword(JSToken.Int, "int", keyword);
            keyword             = new JSKeyword(JSToken.In, "in", keyword);
            keyword             = new JSKeyword(JSToken.If, "if", keyword);
            keywords['i' - 'a'] = keyword;
            // l
            keyword             = new JSKeyword(JSToken.Long, "long");
            keywords['l' - 'a'] = keyword;
            // n
            keyword             = new JSKeyword(JSToken.Namespace, "namespace");
            keyword             = new JSKeyword(JSToken.Native, "native", keyword);
            keyword             = new JSKeyword(JSToken.Null, "null", keyword);
            keyword             = new JSKeyword(JSToken.New, "new", keyword);
            keywords['n' - 'a'] = keyword;
            // p
            keyword             = new JSKeyword(JSToken.Protected, "protected");
            keyword             = new JSKeyword(JSToken.Private, "private", keyword);
            keyword             = new JSKeyword(JSToken.Package, "package", keyword);
            keyword             = new JSKeyword(JSToken.Public, "public", keyword);
            keywords['p' - 'a'] = keyword;
            // r
            keyword             = new JSKeyword(JSToken.Require, "require");
            keyword             = new JSKeyword(JSToken.Return, "return", keyword);
            keywords['r' - 'a'] = keyword;
            // s
            keyword             = new JSKeyword(JSToken.Synchronized, "synchronized");
            keyword             = new JSKeyword(JSToken.Switch, "switch", keyword);
            keyword             = new JSKeyword(JSToken.Static, "static", keyword);
            keyword             = new JSKeyword(JSToken.Super, "super", keyword);
            keyword             = new JSKeyword(JSToken.Short, "short", keyword);
            keyword             = new JSKeyword(JSToken.Set, "set", keyword);
            keywords['s' - 'a'] = keyword;
            // t
            keyword             = new JSKeyword(JSToken.Transient, "transient");
            keyword             = new JSKeyword(JSToken.TypeOf, "typeof", keyword);
            keyword             = new JSKeyword(JSToken.Throws, "throws", keyword);
            keyword             = new JSKeyword(JSToken.Throw, "throw", keyword);
            keyword             = new JSKeyword(JSToken.True, "true", keyword);
            keyword             = new JSKeyword(JSToken.This, "this", keyword);
            keyword             = new JSKeyword(JSToken.Try, "try", keyword);
            keywords['t' - 'a'] = keyword;
            // v
            keyword             = new JSKeyword(JSToken.Volatile, "volatile");
            keyword             = new JSKeyword(JSToken.Void, "void", keyword);
            keyword             = new JSKeyword(JSToken.Var, "var", keyword);
            keywords['v' - 'a'] = keyword;
            // u
            keyword             = new JSKeyword(JSToken.Use, "use");
            keywords['u' - 'a'] = keyword;
            // w
            keyword             = new JSKeyword(JSToken.While, "while");
            keyword             = new JSKeyword(JSToken.With, "with", keyword);
            keywords['w' - 'a'] = keyword;

            return(keywords);
        }
示例#10
0
        // each list must in order or length first, shortest to longest.
        // for equal length words, in alphabetical order
        internal static JSKeyword[] InitKeywords()
        {
            JSKeyword[] keywords = new JSKeyword[26];
            // a
            // b
            keywords['b' - 'a'] = new JSKeyword(JSToken.Break, "break");
            // c
            keywords['c' - 'a'] = new JSKeyword(JSToken.Case, "case",
                new JSKeyword(JSToken.Catch, "catch",
                    new JSKeyword(JSToken.Class, "class",
                        new JSKeyword(JSToken.Const, "const", 
                            new JSKeyword(JSToken.Continue, "continue")))));
            // d
            keywords['d' - 'a'] = new JSKeyword(JSToken.Do, "do", 
                new JSKeyword(JSToken.Delete, "delete",
                    new JSKeyword(JSToken.Default, "default", 
                        new JSKeyword(JSToken.Debugger, "debugger"))));
            // e
            keywords['e' - 'a'] = new JSKeyword(JSToken.Else, "else",
                new JSKeyword(JSToken.Enum, "enum", 
                    new JSKeyword(JSToken.Export, "export", 
                        new JSKeyword(JSToken.Extends, "extends"))));
            // f
            keywords['f' - 'a'] = new JSKeyword(JSToken.For, "for", 
                new JSKeyword(JSToken.False, "false", 
                    new JSKeyword(JSToken.Finally, "finally",
                        new JSKeyword(JSToken.Function, "function"))));
            // g
            keywords['g' - 'a'] = new JSKeyword(JSToken.Get, "get");
            // i
            keywords['i' - 'a'] = new JSKeyword(JSToken.If, "if",
                new JSKeyword(JSToken.In, "in", 
                    new JSKeyword(JSToken.Import, "import", 
                        new JSKeyword(JSToken.Interface, "interface",
                            new JSKeyword(JSToken.Implements, "implements",
                                new JSKeyword(JSToken.InstanceOf, "instanceof"))))));
            // l
            keywords['l' - 'a'] = new JSKeyword(JSToken.Let, "let");
            // n
            keywords['n' - 'a'] = new JSKeyword(JSToken.New, "new",
                new JSKeyword(JSToken.Null, "null"));
            // p
            keywords['p' - 'a'] = new JSKeyword(JSToken.Public, "public",
                new JSKeyword(JSToken.Package, "package",
                    new JSKeyword(JSToken.Private, "private", 
                        new JSKeyword(JSToken.Protected, "protected"))));
            // r
            keywords['r' - 'a'] = new JSKeyword(JSToken.Return, "return");
            // s
            keywords['s' - 'a'] = new JSKeyword(JSToken.Set, "set",
                new JSKeyword(JSToken.Super, "super", 
                    new JSKeyword(JSToken.Static, "static",
                        new JSKeyword(JSToken.Switch, "switch"))));
            // t
            keywords['t' - 'a'] = new JSKeyword(JSToken.Try, "try", 
                new JSKeyword(JSToken.This, "this",
                    new JSKeyword(JSToken.True, "true", 
                        new JSKeyword(JSToken.Throw, "throw",
                            new JSKeyword(JSToken.TypeOf, "typeof")))));
            // u
            // v
            keywords['v' - 'a'] = new JSKeyword(JSToken.Var, "var", 
                new JSKeyword(JSToken.Void, "void"));
            // w
            keywords['w' - 'a'] = new JSKeyword(JSToken.With, "with",
                new JSKeyword(JSToken.While, "while"));
            // y
            keywords['y' - 'a'] = new JSKeyword(JSToken.Yield, "yield");

            return keywords;
        }
示例#11
0
 private JSKeyword(JSToken token, string name, JSKeyword next){
   this.name = name;
   this.next = next;
   this.token = token;
   this.length = this.name.Length;
 }
示例#12
0
      internal static JSKeyword[] InitKeywords(){
        JSKeyword[] keywords = new JSKeyword[26];
        JSKeyword keyword;
        // a
        keyword = new JSKeyword(JSToken.Abstract, "abstract");
        keyword = new JSKeyword(JSToken.Assert, "assert", keyword);
        keywords['a' - 'a'] = keyword;
        // b
        keyword = new JSKeyword(JSToken.Boolean, "boolean");
        keyword = new JSKeyword(JSToken.Break, "break", keyword);
        keyword = new JSKeyword(JSToken.Byte, "byte", keyword);
        keywords['b' - 'a'] = keyword;
        // c
        keyword = new JSKeyword(JSToken.Continue, "continue");
        keyword = new JSKeyword(JSToken.Const, "const", keyword);
        keyword = new JSKeyword(JSToken.Class, "class", keyword);
        keyword = new JSKeyword(JSToken.Catch, "catch", keyword);
        keyword = new JSKeyword(JSToken.Char, "char", keyword);
        keyword = new JSKeyword(JSToken.Case, "case", keyword);
        keywords['c' - 'a'] = keyword;
        // d
        keyword= new JSKeyword(JSToken.Debugger, "debugger");
        keyword = new JSKeyword(JSToken.Default, "default", keyword);
        keyword = new JSKeyword(JSToken.Double, "double", keyword);
        keyword = new JSKeyword(JSToken.Delete, "delete", keyword);
        keyword = new JSKeyword(JSToken.Do, "do", keyword);
        keywords['d' - 'a'] = keyword;
        // e
        keyword = new JSKeyword(JSToken.Extends, "extends");
        keyword = new JSKeyword(JSToken.Export, "export", keyword);
        keyword = new JSKeyword(JSToken.Ensure, "ensure", keyword);
        keyword = new JSKeyword(JSToken.Event, "event", keyword);
        keyword = new JSKeyword(JSToken.Enum, "enum", keyword);
        keyword = new JSKeyword(JSToken.Else, "else", keyword);
        keywords['e' - 'a'] = keyword;
        // f
        keyword = new JSKeyword(JSToken.Function, "function");
        keyword = new JSKeyword(JSToken.Finally, "finally", keyword);
        keyword = new JSKeyword(JSToken.Float, "float", keyword);
        keyword = new JSKeyword(JSToken.Final, "final", keyword);
        keyword = new JSKeyword(JSToken.False, "false", keyword);
        keyword = new JSKeyword(JSToken.For, "for", keyword);
        keywords['f' - 'a'] = keyword;
        // g
        keyword = new JSKeyword(JSToken.Goto, "goto");
        keyword = new JSKeyword(JSToken.Get, "get", keyword);
        keywords['g' - 'a'] = keyword;
        // i
        keyword = new JSKeyword(JSToken.Instanceof, "instanceof");
        keyword = new JSKeyword(JSToken.Implements, "implements", keyword);
        keyword = new JSKeyword(JSToken.Invariant, "invariant", keyword);
        keyword = new JSKeyword(JSToken.Interface, "interface", keyword);
        keyword = new JSKeyword(JSToken.Internal, "internal", keyword);
        keyword = new JSKeyword(JSToken.Import, "import", keyword);
        keyword = new JSKeyword(JSToken.Int, "int", keyword);
        keyword = new JSKeyword(JSToken.In, "in", keyword);
        keyword = new JSKeyword(JSToken.If, "if", keyword);
        keywords['i' - 'a'] = keyword;
        // l
        keyword = new JSKeyword(JSToken.Long, "long");
        keywords['l' - 'a'] = keyword;
        // n
        keyword = new JSKeyword(JSToken.Namespace, "namespace");
        keyword = new JSKeyword(JSToken.Native, "native", keyword);
        keyword = new JSKeyword(JSToken.Null, "null", keyword);
        keyword = new JSKeyword(JSToken.New, "new", keyword);
        keywords['n' - 'a'] = keyword;
        // p
        keyword = new JSKeyword(JSToken.Protected, "protected");
        keyword = new JSKeyword(JSToken.Private, "private", keyword);
        keyword = new JSKeyword(JSToken.Package, "package", keyword);
        keyword = new JSKeyword(JSToken.Public, "public", keyword);
        keywords['p' - 'a'] = keyword;
        // r
        keyword = new JSKeyword(JSToken.Require, "require");
        keyword = new JSKeyword(JSToken.Return, "return", keyword);
        keywords['r' - 'a'] = keyword;
        // s
        keyword = new JSKeyword(JSToken.Synchronized, "synchronized");
        keyword = new JSKeyword(JSToken.Switch, "switch", keyword);
        keyword = new JSKeyword(JSToken.Static, "static", keyword);
        keyword = new JSKeyword(JSToken.Super, "super", keyword);
        keyword = new JSKeyword(JSToken.Short, "short", keyword);
        keyword = new JSKeyword(JSToken.Set, "set", keyword);
        keywords['s' - 'a'] = keyword;
        // t
        keyword = new JSKeyword(JSToken.Transient, "transient");
        keyword = new JSKeyword(JSToken.Typeof, "typeof", keyword);
        keyword = new JSKeyword(JSToken.Throws, "throws", keyword);
        keyword = new JSKeyword(JSToken.Throw, "throw", keyword);
        keyword = new JSKeyword(JSToken.True, "true", keyword);
        keyword = new JSKeyword(JSToken.This, "this", keyword);
        keyword = new JSKeyword(JSToken.Try, "try", keyword);
        keywords['t' - 'a'] = keyword;
        // v
        keyword = new JSKeyword(JSToken.Volatile, "volatile");
        keyword = new JSKeyword(JSToken.Void, "void", keyword);
        keyword = new JSKeyword(JSToken.Var, "var", keyword);
        keywords['v' - 'a'] = keyword;
        // u
        keyword = new JSKeyword(JSToken.Use, "use");
        keywords['u' - 'a'] = keyword;
        // w
        keyword = new JSKeyword(JSToken.While, "while");
        keyword = new JSKeyword(JSToken.With, "with", keyword);
        keywords['w' - 'a'] = keyword;

        return keywords;
      }