示例#1
0
        private static ProjectSection GetProjectSection(LexicalAnalizer lexan)
        {
            ProjectSection ps = new ProjectSection();
            lexan.Expect(Semantics.PROJECT_SECTION);
            lexan.MoveNext();

            lexan.Expect(Semantics.OPEN_PARENTHESIS);
            lexan.MoveNext();

            // Project Section Name
            lexan.Expect(Semantics.STRING_VALUE);
            ps.Name = lexan.Current.Value;
            lexan.MoveNext();

            lexan.Expect(Semantics.CLOSE_PARENTHESIS);
            lexan.MoveNext();

            lexan.Expect(Semantics.EQUALS);
            lexan.MoveNext();

            // Project Section Name
            lexan.Expect(Semantics.STRING_VALUE);
            ps.Value = lexan.Current.Value;
            lexan.MoveNext();

            lexan.Expect(Semantics.EOL);

            while (lexan.MoveNext())
            {
                switch (lexan.Current.Token)
                {
                    case Semantics.END_PROJECT_SECTION:
                        return ps;
                    case Semantics.STRING_VALUE:
                        {
                            lexan.Expect(Semantics.STRING_VALUE);
                            string key = lexan.Current.Value;
                            lexan.MoveNext();

                            lexan.Expect(Semantics.EQUALS);
                            lexan.MoveNext();

                            lexan.ExpectQuotedOrString();
                            string value = lexan.Current.Value;
                            ps.Map.Add(key.Trim(' ', '\n', '\t'), value);
                            lexan.MoveNext();

                            lexan.Expect(Semantics.EOL);

                        }
                        break;
                    case Semantics.QUOTED_STRING:
                        {
                            lexan.Expect(Semantics.QUOTED_STRING);
                            string key = lexan.Current.Value;
                            lexan.MoveNext();

                            lexan.Expect(Semantics.EQUALS);
                            lexan.MoveNext();

                            lexan.ExpectQuotedOrString();
                            string value = lexan.Current.Value;
                            ps.Map.Add(key.Trim(' ', '\n', '\t'), value);
                            lexan.MoveNext();

                            lexan.Expect(Semantics.EOL);

                        }
                        break;
                    case Semantics.EOL:
                        break;
                    default:
                        throw new Exception("Invalid ProjectSection Entry!");
                }

            }

            throw new Exception("Expecting EndProjectSection!");
        }
示例#2
0
        private static GlobalSection GetGlobalSection(LexicalAnalizer lexan)
        {
            GlobalSection gs = new GlobalSection();

            lexan.Expect(Semantics.GLOBAL_SECTION);
            lexan.MoveNext();

            lexan.Expect(Semantics.OPEN_PARENTHESIS);
            lexan.MoveNext();

            lexan.Expect(Semantics.STRING_VALUE);
            gs.Name = lexan.Current.Value;
            lexan.MoveNext();

            lexan.Expect(Semantics.CLOSE_PARENTHESIS);
            lexan.MoveNext();

            lexan.Expect(Semantics.EQUALS);
            lexan.MoveNext();

            lexan.Expect(Semantics.STRING_VALUE);
            gs.Value = lexan.Current.Value;
            lexan.MoveNext();

            lexan.Expect(Semantics.EOL);



            while (lexan.MoveNext())
            {
                switch (lexan.Current.Token)
                {
                case Semantics.END_GLOBAL_SECTION:
                    return(gs);

                case Semantics.STRING_VALUE:
                {
                    lexan.Expect(Semantics.STRING_VALUE);
                    string key = lexan.Current.Value;
                    lexan.MoveNext();

                    lexan.Expect(Semantics.EQUALS);
                    lexan.MoveNext();

                    lexan.ExpectQuotedOrString();
                    string value = lexan.Current.Value;
                    gs.Map.Add(key.Trim(' ', '\n', '\t'), value);
                    lexan.MoveNext();

                    lexan.Expect(Semantics.EOL);
                }
                break;

                case Semantics.QUOTED_STRING:
                {
                    lexan.Expect(Semantics.QUOTED_STRING);
                    string key = lexan.Current.Value;
                    lexan.MoveNext();

                    lexan.Expect(Semantics.EQUALS);
                    lexan.MoveNext();

                    lexan.ExpectQuotedOrString();
                    string value = lexan.Current.Value;
                    gs.Map.Add(key.Trim(' ', '\n', '\t'), value);
                    lexan.MoveNext();

                    lexan.Expect(Semantics.EOL);
                }
                break;

                case Semantics.EOL:
                    break;

                default:
                    throw new Exception("Invalid GlobalSection Entry!");
                }
            }


            throw new Exception("Expecting EndGlobalSection!");
        }