Esempio n. 1
0
        private void khs2xml(AxMap pMap, ref XmlTextWriter wr)
        {
            wr.WriteStartElement("KyHieus");
            wr.WriteAttributeString("CX", pMap.CenterX.ToString("#.0000"));
            wr.WriteAttributeString("CY", pMap.CenterY.ToString("#.0000"));
            wr.WriteAttributeString("Zoom", pMap.Zoom.ToString());
            checked
            {
                try
                {
                    IEnumerator enumerator = this.List.GetEnumerator();
                    while (enumerator.MoveNext())
                    {
                        CSymbol mKH = (CSymbol)enumerator.Current;
                        wr.WriteStartElement("KyHieu");
                        bool flag = mKH.Description.Length > 0;
                        if (flag)
                        {
                            wr.WriteAttributeString("Desc", mKH.Description);
                        }
                        flag = mKH.Blinking;
                        if (flag)
                        {
                            wr.WriteAttributeString("Blink", mKH.Blinking.ToString());
                        }
                        wr.WriteAttributeString("Zoom", mKH.Zoom.ToString());
                        wr.WriteAttributeString("MWi", mKH.MWidth.ToString());
                        wr.WriteAttributeString("GocX", mKH.GocX.ToString("#.0000"));
                        wr.WriteAttributeString("GocY", mKH.GocY.ToString("#.0000"));
                        try
                        {
                            IEnumerator enumerator2 = mKH.GObjs.GetEnumerator();
                            while (enumerator2.MoveNext())
                            {
                                GraphicObject mPart = (GraphicObject)enumerator2.Current;
                                wr.WriteStartElement("Part");
                                OBJECTTYPE mType = mPart.GetObjType();
                                wr.WriteAttributeString("Type", mType.ToString());
                                flag = (mType == OBJECTTYPE.Text);
                                if (flag)
                                {
                                    TextGraphic mTextObj = (TextGraphic)mPart;
                                    wr.WriteAttributeString("Text", mTextObj.Text);
                                    wr.WriteAttributeString("FName", mTextObj.Font.Name);
                                    wr.WriteAttributeString("FSize", mTextObj.Font.Size.ToString());
                                    wr.WriteAttributeString("FStyle", mTextObj.Font.Style.ToString());
                                    wr.WriteAttributeString("FColor", Conversions.ToString(mTextObj.Color.ToArgb()));
                                    wr.WriteStartElement("Pos");
                                    wr.WriteAttributeString("X", mTextObj.X.ToString());
                                    wr.WriteAttributeString("Y", mTextObj.Y.ToString());
                                    wr.WriteAttributeString("A", mTextObj.Rotation.ToString());
                                    wr.WriteEndElement();
                                }
                                else
                                {
                                    flag = (mType == OBJECTTYPE.Table);
                                    if (flag)
                                    {
                                        TableGraphic mTableObj = (TableGraphic)mPart;
                                        wr.WriteStartElement("TBL");
                                        wr.WriteAttributeString("X", mTableObj.X.ToString());
                                        wr.WriteAttributeString("Y", mTableObj.Y.ToString());
                                        wr.WriteAttributeString("W", mTableObj.Width.ToString());
                                        wr.WriteAttributeString("H", mTableObj.Height.ToString());
                                        wr.WriteAttributeString("A", mTableObj.Rotation.ToString());
                                        wr.WriteAttributeString("Cols", mTableObj.ColsNo.ToString());
                                        wr.WriteAttributeString("Rows", mTableObj.RowsNo.ToString());
                                        wr.WriteAttributeString("BColor", Conversions.ToString(mTableObj.BorderColor.ToArgb()));
                                        wr.WriteAttributeString("BWidth", mTableObj.BorderWidth.ToString());
                                        wr.WriteAttributeString("LColor", Conversions.ToString(mTableObj.LineColor.ToArgb()));
                                        wr.WriteAttributeString("LWidth", mTableObj.LineWidth.ToString());
                                        wr.WriteAttributeString("FiColor", Conversions.ToString(mTableObj.FiColor.ToArgb()));
                                        string str       = Conversions.ToString(mTableObj.AWidth[0]);
                                        int    arg_47A_0 = 1;
                                        int    num       = mTableObj.ColsNo - 1;
                                        int    i         = arg_47A_0;
                                        while (true)
                                        {
                                            int arg_4A4_0 = i;
                                            int num2      = num;
                                            if (arg_4A4_0 > num2)
                                            {
                                                break;
                                            }
                                            str = str + "|" + Conversions.ToString(mTableObj.AWidth[i]);
                                            i++;
                                        }
                                        wr.WriteAttributeString("AWS", str);
                                        str = Conversions.ToString(mTableObj.AHeight[0]);
                                        int arg_4CF_0 = 1;
                                        int num3      = mTableObj.RowsNo - 1;
                                        i = arg_4CF_0;
                                        while (true)
                                        {
                                            int arg_4F9_0 = i;
                                            int num2      = num3;
                                            if (arg_4F9_0 > num2)
                                            {
                                                break;
                                            }
                                            str = str + "|" + Conversions.ToString(mTableObj.AHeight[i]);
                                            i++;
                                        }
                                        wr.WriteAttributeString("AHS", str);
                                        i = 0;
                                        try
                                        {
                                            IEnumerator enumerator3 = mTableObj.Cells.GetEnumerator();
                                            while (enumerator3.MoveNext())
                                            {
                                                CCell mCell = (CCell)enumerator3.Current;
                                                i++;
                                                wr.WriteStartElement("Cell");
                                                wr.WriteAttributeString("iR", mCell.iRow.ToString());
                                                wr.WriteAttributeString("iC", mCell.iCol.ToString());
                                                wr.WriteAttributeString("RNo", mCell.RowsNo.ToString());
                                                wr.WriteAttributeString("CNo", mCell.ColsNo.ToString());
                                                wr.WriteAttributeString("Text", mCell.Text);
                                                wr.WriteAttributeString("FName", mCell.Font.Name);
                                                wr.WriteAttributeString("FSize", mCell.Font.Size.ToString());
                                                wr.WriteAttributeString("FStyle", mCell.Font.Style.ToString());
                                                wr.WriteAttributeString("Color", Conversions.ToString(mCell.Color.ToArgb()));
                                                wr.WriteElementString("i", i.ToString());
                                                wr.WriteEndElement();
                                            }
                                        }
                                        finally
                                        {
                                            IEnumerator enumerator3;
                                            flag = (enumerator3 is IDisposable);
                                            if (flag)
                                            {
                                                (enumerator3 as IDisposable).Dispose();
                                            }
                                        }
                                        wr.WriteEndElement();
                                    }
                                    else
                                    {
                                        flag = (mType == OBJECTTYPE.EmbeddedImage);
                                        if (flag)
                                        {
                                            EmbeddedImageGraphic mImageObj = (EmbeddedImageGraphic)mPart;
                                            wr.WriteAttributeString("ITYPE", mImageObj.ImageType);
                                            wr.WriteAttributeString("IMAGEW", mImageObj.Width.ToString());
                                            wr.WriteAttributeString("IMAGEH", mImageObj.Height.ToString());
                                            string strImage  = "";
                                            string imageType = mImageObj.ImageType;
                                            if (Operators.CompareString(imageType, "wmf", false) == 0 || Operators.CompareString(imageType, "emf", false) == 0)
                                            {
                                                goto IL_74D;
                                            }
                                            if (Operators.CompareString(imageType, "kro", false) == 0)
                                            {
                                                goto IL_74D;
                                            }
                                            bool arg_74E_0 = false;
IL_74E:
                                            flag = arg_74E_0;
                                            if (flag)
                                            {
                                                try
                                                {
                                                    object mFileName = "tmp2.kro";
                                                    Image  mMetaFile = mImageObj.Image;
                                                    mMetaFile.Save(Conversions.ToString(mFileName));
                                                    byte[] arrImageByte = this.GetarrImage(Conversions.ToString(mFileName));
                                                    strImage = Convert.ToBase64String(arrImageByte);
                                                }
                                                catch (Exception expr_78D)
                                                {
                                                    ProjectData.SetProjectError(expr_78D);
                                                    Exception ex = expr_78D;
                                                    Interaction.MsgBox("kro sai: " + ex.Message, MsgBoxStyle.OkOnly, null);
                                                    ProjectData.ClearProjectError();
                                                }
                                            }
                                            else
                                            {
                                                MemoryStream memStream = new MemoryStream();
                                                mImageObj.Image.Save(memStream, ImageFormat.Bmp);
                                                strImage = Convert.ToBase64String(memStream.ToArray());
                                            }
                                            wr.WriteAttributeString("IMAGE", strImage);
                                            wr.WriteStartElement("Pos");
                                            wr.WriteAttributeString("X", mImageObj.X.ToString());
                                            wr.WriteAttributeString("Y", mImageObj.Y.ToString());
                                            wr.WriteAttributeString("A", mImageObj.Rotation.ToString());
                                            wr.WriteEndElement();
                                            goto IL_CDF;
IL_74D:
                                            arg_74E_0 = true;
                                            goto IL_74E;
                                        }
                                        ShapeGraphic mShapeObj = (ShapeGraphic)mPart;
                                        wr.WriteAttributeString("Color", Conversions.ToString(mShapeObj.LineColor.ToArgb()));
                                        wr.WriteAttributeString("Width", mShapeObj.LineWidth.ToString());
                                        flag = (mShapeObj.LineStyle > 0);
                                        if (flag)
                                        {
                                            wr.WriteAttributeString("Style", mShapeObj.LineStyle.ToString());
                                            wr.WriteAttributeString("SWidth", mShapeObj.StyleWidth.ToString());
                                        }
                                        flag = (mShapeObj.Line2Width > 0f);
                                        if (flag)
                                        {
                                            wr.WriteAttributeString("Color2", Conversions.ToString(mShapeObj.Line2Color.ToArgb()));
                                            wr.WriteAttributeString("Width2", mShapeObj.Line2Width.ToString());
                                        }
                                        flag = (mShapeObj.DValues.Length > 6);
                                        if (flag)
                                        {
                                            wr.WriteAttributeString("DV", mShapeObj.DValues);
                                        }
                                        flag = mShapeObj.Fill;
                                        if (flag)
                                        {
                                            wr.WriteAttributeString("Fill", mShapeObj.Fill.ToString());
                                            wr.WriteAttributeString("FColor", Conversions.ToString(mShapeObj.FillColor.ToArgb()));
                                            wr.WriteAttributeString("HColor", Conversions.ToString(mShapeObj.HatchColor.ToArgb()));
                                            wr.WriteAttributeString("HStyle", mShapeObj.HatchStyle.ToString());
                                        }
                                        flag = (mType == OBJECTTYPE.Ellipse);
                                        if (flag)
                                        {
                                            EllipseGraphic mEllipseObj = (EllipseGraphic)mShapeObj;
                                            wr.WriteStartElement("Rect");
                                            wr.WriteAttributeString("X", mEllipseObj.X.ToString());
                                            wr.WriteAttributeString("Y", mEllipseObj.Y.ToString());
                                            wr.WriteAttributeString("W", mEllipseObj.Width.ToString());
                                            wr.WriteAttributeString("H", mEllipseObj.Height.ToString());
                                            wr.WriteAttributeString("A", mEllipseObj.Rotation.ToString());
                                            wr.WriteEndElement();
                                        }
                                        else
                                        {
                                            flag = (mType == OBJECTTYPE.Pie);
                                            if (flag)
                                            {
                                                PieGraphic mPieObj = (PieGraphic)mShapeObj;
                                                wr.WriteStartElement("Pie");
                                                wr.WriteAttributeString("X", mPieObj.X.ToString());
                                                wr.WriteAttributeString("Y", mPieObj.Y.ToString());
                                                wr.WriteAttributeString("W", mPieObj.Width.ToString());
                                                wr.WriteAttributeString("H", mPieObj.Height.ToString());
                                                wr.WriteAttributeString("ST", mPieObj.StartAngle.ToString());
                                                wr.WriteAttributeString("SW", mPieObj.SweepAngle.ToString());
                                                flag = mPieObj.IsArc;
                                                if (flag)
                                                {
                                                    wr.WriteAttributeString("ARC", mPieObj.IsArc.ToString());
                                                }
                                                wr.WriteAttributeString("A", mPieObj.Rotation.ToString());
                                                wr.WriteEndElement();
                                            }
                                            else
                                            {
                                                int i = 0;
                                                NodesShapeGraphic mNodesShapeObj = (NodesShapeGraphic)mShapeObj;
                                                try
                                                {
                                                    IEnumerator enumerator4 = mNodesShapeObj.Nodes.GetEnumerator();
                                                    while (enumerator4.MoveNext())
                                                    {
                                                        CNODE mNode = (CNODE)enumerator4.Current;
                                                        i++;
                                                        wr.WriteStartElement("Node");
                                                        wr.WriteAttributeString("X", mNode.Pt.X.ToString());
                                                        wr.WriteAttributeString("Y", mNode.Pt.Y.ToString());
                                                        flag = mNode.IsControl;
                                                        if (flag)
                                                        {
                                                            wr.WriteAttributeString("Type", mNode.IsControl.ToString());
                                                        }
                                                        wr.WriteElementString("i", i.ToString());
                                                        wr.WriteEndElement();
                                                    }
                                                }
                                                finally
                                                {
                                                    IEnumerator enumerator4;
                                                    flag = (enumerator4 is IDisposable);
                                                    if (flag)
                                                    {
                                                        (enumerator4 as IDisposable).Dispose();
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
IL_CDF:
                                wr.WriteEndElement();
                            }
                        }
                        finally
                        {
                            IEnumerator enumerator2;
                            flag = (enumerator2 is IDisposable);
                            if (flag)
                            {
                                (enumerator2 as IDisposable).Dispose();
                            }
                        }
                        wr.WriteEndElement();
                    }
                }
                finally
                {
                    IEnumerator enumerator;
                    bool        flag = enumerator is IDisposable;
                    if (flag)
                    {
                        (enumerator as IDisposable).Dispose();
                    }
                }
                wr.WriteEndElement();
            }
        }
Esempio n. 2
0
 public void SendBack(CSymbol aKH)
 {
     this.List.Remove(aKH);
     this.List.Insert(0, aKH);
 }
Esempio n. 3
0
 public void SendFront(CSymbol aKH)
 {
     this.List.Remove(aKH);
     this.List.Add(aKH);
 }
Esempio n. 4
0
    public Production m_prod;     // current production being parsed

    internal void DoFirst()
    {
        // Rule 1: terminals only
        Production p;

        foreach (CSymbol v in m_symbols.symbols.Values)
        {
            if (v.m_symtype == CSymbol.SymType.unknown)
            {
                v.m_symtype = CSymbol.SymType.terminal;
            }
            if (v.IsTerminal())
            {
                v.m_first.CheckIn(v);
                if (!Find(v))
                {
                    erh.Error(new CSToolsException(31, "Lexer script should define symbol " + v.yytext));
                }
            }
        }
        foreach (CSymbol s in m_symbols.literals.Values)
        {
            s.m_first.CheckIn(s);
        }
        m_symbols.EOFSymbol.m_first.CheckIn(m_symbols.EOFSymbol);
        // Rule 2: Nonterminals with the rhs consisting only of actions
        int j, k;

        for (k = 1; k < prods.Count; k++)
        {
            p = (Production)prods[k];
            if (p.m_actionsOnly)
            {
                p.m_lhs.m_first.CheckIn(m_symbols.EmptySequence);
            }
        }

        // Rule 3: The real work begins
        bool donesome = true;

        while (donesome)
        {
            donesome = false;
            for (k = 1; k < prods.Count; k++)
            {
                p = (Production)prods[k];
                int n = p.m_rhs.Count;
                for (j = 0; j < n; j++)
                {
                    CSymbol t = (CSymbol)p.m_rhs[j];
                    if (t.IsAction())
                    {
                        donesome |= t.m_first.CheckIn(m_symbols.EmptySequence);
                    }
                    int pos = 0;
                    foreach (CSymbol a in t.m_first.Keys)
                    {
                        if ((a != m_symbols.EmptySequence || pos++ == t.m_first.Count - 1))
                        {
                            donesome |= p.m_lhs.m_first.CheckIn(a);
                        }
                    }
                    if (!t.m_first.Contains(m_symbols.EmptySequence))
                    {
                        break;
                    }
                }
            }
        }
    }
Esempio n. 5
0
 private Type DefineType(CSymbol CSymbol)
 {
     return(DefineType(CSymbol.Name, CSymbol.CType));
 }
Esempio n. 6
0
 public bool Contains(CSymbol value)
 {
     return(this.List.Contains(value));
 }
Esempio n. 7
0
    void _Create()
    {
        ptokens tks = new ptokens(erh);

        m_outname     = "syntax";
        tks.m_sgen    = this;
        m_lexer       = tks;
        m_symbols.erh = erh;
        m_symbols.ClassInit(this);
        m_outname = "syntax";
        m_outFile.WriteLine("using System;using Tools;");
        Production special = new Production(this, m_symbols.Special);

        m_lexer.yytext = "error";
        CSymbol e = (new CSymbol(this)).Resolve();

        e.m_symtype = CSymbol.SymType.nonterminal;
        e.m_defined = true;
        // 1: INPUT
        // top-down parsing of script
        m_lexer.Start(m_inFile);
        m_tok = (TOKEN)m_lexer.Next();
        //Console.WriteLine("Token <{0}> {1}",m_tok.yytext,m_tok.GetType().Name);
        while (m_tok != null)
        {
            ParseProduction();
        }
        // that's the end of the script
        if (!m_parserseen)
        {
            Error(30, 0, "no parser directive detected - possibly incorrect text encoding?");
        }
        m_outFile.WriteLine(m_actions);         // output the action function
        m_outFile.WriteLine("}  return null; }");
        special.AddToRhs(m_symbols.m_startSymbol);
        special.AddToRhs(m_symbols.EOFSymbol);
        // 2: PROCESSING
        Console.WriteLine("First");
        DoFirst();
        Console.WriteLine("Follow");
        DoFollow();
        Console.WriteLine("Parse Table");
        ParseState start = new ParseState(this, null);

        m_symbols.m_states[0] = start;
        start.MaybeAdd(new ProdItem(special, 0));
        start.Closure();
        start.AddEntries();
        Transition  tfinal = (Transition)start.m_transitions[m_symbols.m_startSymbol.yytext];
        ParserShift pe     = tfinal.m_next;

        m_symbols.m_accept = pe.m_next;
        if (m_symbols.m_accept == null)
        {
            m_symbols.erh.Error(new CSToolsFatalException(43, 0, 0, "", "No accept state. ParserGenerator cannot continue."));
        }
        // 2A: Reduce States for the LR(0) parser
        foreach (ParseState ps in m_symbols.m_states.Values)
        {
            ps.ReduceStates();
        }

        /*	if (m_showParser)
         *      {
         *              foreach (ParseState ps in m_symbols.m_states.Values)
         *              {
         *                      ps.Print0();
         *                      if (ps==m_symbols.m_accept)
         *                              Console.WriteLine("    EOF  accept");
         *              }
         *      } */
        // 3: Compute Look-ahead sets
        if (m_lalrParser)
        {
            m_symbols.Transitions(new Builder(Transition.BuildDR));

            /*	if (m_showParser)
             *              m_symbols.PrintTransitions(new Func(Transition.DR),"DR"); */
            m_symbols.Transitions(new Builder(Transition.BuildReads));
            new Digraph(this,
                        new Relation(Transition.reads),
                        new Func(Transition.DR),
                        new Func(Transition.Read),
                        new AddToFunc(Transition.AddToRead)).Compute();
            // detect cycles in Read TBD

            /*	if (m_showParser)
             *              m_symbols.PrintTransitions(new Func(Transition.Read),"Read"); */
            m_symbols.Transitions(new Builder(Transition.BuildIncludes));
            m_symbols.Transitions(new Builder(Transition.BuildLookback));
            new Digraph(this,
                        new Relation(Transition.includes),
                        new Func(Transition.Read),
                        new Func(Transition.Follow),
                        new AddToFunc(Transition.AddToFollow)).Compute();
            // detect cycles for which Read is non empty TBD

            /*	if (m_showParser)
             *              m_symbols.PrintTransitions(new Func(Transition.Follow),"Follow"); */
            m_symbols.Transitions(new Builder(Transition.BuildLA));
        }
        // 5: OUTPUT
        // output the run-time ParsingInfo table
        Console.WriteLine("Building parse table");
        m_symbols.Transitions(new Builder(Transition.BuildParseTable));
        foreach (CSymbol v in m_symbols.symbols.Values)
        {
            if (v.m_symtype != CSymbol.SymType.nodesymbol)
            {
                continue;
            }
            ParsingInfo pi = new ParsingInfo(v.yytext);
            CSymbol     r  = v;
            while (r.m_symtype == CSymbol.SymType.nodesymbol)
            {
                r = r.m_refSymbol;
            }
            if (m_symbols.symbolInfo[v.yytext] != null)
            {
                m_symbols.erh.Error(new CSToolsException(45, "Bad %node/%symbol hierarchy"));
            }
            pi.m_parsetable = m_symbols.GetSymbolInfo(r.yytext).m_parsetable;
            m_symbols.symbolInfo[v.yytext] = pi;
        }
        Console.WriteLine("Writing the output file");
        m_outFile.WriteLine(@"/// <summary/>");
        m_outFile.WriteLine("public yy" + m_outname + "():base() { arr = new int[] { ");
        m_symbols.Emit(m_outFile);
        // output the class factories
        CSymbol s;

        Console.WriteLine("Class factories");
        IDictionaryEnumerator de = m_symbols.symbols.GetEnumerator();

        for (int pos = 0; pos < m_symbols.symbols.Count; pos++)
        {
            de.MoveNext();
            string str = (string)de.Key;
            s = (CSymbol)de.Value;
            if ((s == null) ||        // might happen because of error recovery
                (s.m_symtype != CSymbol.SymType.nonterminal && s.m_symtype != CSymbol.SymType.nodesymbol))
            {
                continue;
            }
            //Console.WriteLine("{0} {1}",s.yytext,s.m_symtype);
            m_outFile.WriteLine("new Sfactory(this,\"{0}\",new SCreator({0}_factory));", str);
        }
        m_outFile.WriteLine("}");
        de.Reset();
        for (int pos = 0; pos < m_symbols.symbols.Count; pos++)
        {
            de.MoveNext();
            string str = (string)de.Key;
            s = (CSymbol)de.Value;
            if ((s == null) ||        // might happen because of error recovery
                (s.m_symtype != CSymbol.SymType.nonterminal && s.m_symtype != CSymbol.SymType.nodesymbol))
            {
                continue;
            }
            //Console.WriteLine("{0} {1}",s.yytext,s.m_symtype);
            m_outFile.WriteLine(@"/// <summary/>");
            m_outFile.WriteLine("public static object " + str + "_factory(Parser yyp) { return new " + str + "(yyp); }");
        }
        m_outFile.WriteLine("}");
        m_outFile.WriteLine(@"/// <summary/>");
        m_outFile.WriteLine("public class " + m_outname + ": Parser {");
        m_outFile.WriteLine(@"/// <summary/>");
        m_outFile.WriteLine("public " + m_outname + "():base(new yy" + m_outname + "(),new " + m_lexerClass + "()) {}");
        m_outFile.WriteLine(@"/// <summary/>");
        m_outFile.WriteLine("public " + m_outname + "(Symbols syms):base(syms,new " + m_lexerClass + "()) {}");
        m_outFile.WriteLine(@"/// <summary/>");
        m_outFile.WriteLine("public " + m_outname + "(Symbols syms,ErrorHandler erh):base(syms,new " + m_lexerClass + "(erh)) {}");
        m_outFile.WriteLine(m_actvars);
        m_outFile.WriteLine(" }");
        if (m_namespace)
        {
            m_outFile.WriteLine("}");
        }
        Console.WriteLine("Done");
        if (m_showParser)
        {
            foreach (ParseState ps in m_symbols.m_states.Values)
            {
                ps.Print();
                if (ps == m_symbols.m_accept)
                {
                    Console.WriteLine("    EOF  accept");
                }
            }
        }
    }
Esempio n. 8
0
    public override void SimpleAction(ParserSimpleAction a)
    {
        string str = a.yytext.Substring(1, a.yytext.Length - 1);

        if (str == "null")
        {
            m_lexer.yytext = "Null";
            a.m_sym        = (new CSymbol(this)).Resolve();
            NewConstructor(ref a.m_sym, ", " + m_prod.m_lhs.m_yynum + "){}");
            return;
        }
        if (str.Length == 0)
        {
            str = m_prod.m_lhs.yytext;
        }
        CSymbol s = (CSymbol)m_symbols.symbols[str];

        if (s == null)
        {         // not there: define a new node type
            //Console.WriteLine("Symbol {0} needs defining",str);
            m_lexer.yytext = str;
            s = new CSymbol(this);
            m_symbols.symbols[str] = s;
            s.m_symtype            = CSymbol.SymType.nodesymbol;
            s.m_refSymbol          = (CSymbol)m_prod.m_lhs;
            s.m_emitted            = true;
            m_outFile.WriteLine("public class " + str + " : " + s.m_refSymbol.yytext + " { ");
            m_outFile.WriteLine("  public " + str + "(Parser yyq):base(yyq) { }}");
        }
        else if (s.m_refSymbol != null) // 4.5c
        {
            CSymbol t = s;              // 4.5d
            while (t != null && t != (CSymbol)m_prod.m_lhs)
            {
                t = t.m_refSymbol;
            }
            if (t == null)
            {
                Error(46, m_lexer.m_pch, "Simple action " + s.yytext + " does not match symbol type " + m_prod.m_lhs.yytext); // 4.5d
            }
        }                                                                                                                     // 4.5c
        else
        {
            s.m_refSymbol = (CSymbol)m_prod.m_lhs;
        }
        a.m_sym = s;
        int ch;

        str = ")";
        NextNonWhite(out ch);
        if (ch == '(')
        {
            ch  = m_lexer.GetChar();
            str = "," + GetBracketedSeq(ref ch, ')').Substring(1);
            NextNonWhite(out ch);
        }
        if (str == ",)")       // 4.0d
        {
            str = ")";
        }
        string init = "{}";

        if (ch == '{')
        {
            ch = m_lexer.GetChar();
            string ts = GetBracketedSeq(ref ch, '}');                                      // 4.5g
            init = "{ " + m_outname + " yyp=(" + m_outname + ")yyq;\n" + ts.Substring(1);  // 4.5g 4.5h
            NextNonWhite(out ch);
        }
        init = str + init;
        NewConstructor(ref a.m_sym, init);
    }
Esempio n. 9
0
        private void LoadSymbols()
        {
            base.ClearModels();
            base.ClearBillboards();
            this.m_Symbol3Objs.Clear();
            double num;
            double num2;

            checked
            {
                num  = Convert.ToDouble(decimal.Multiply(new decimal(this.m_TexImage.Width), new decimal(1000L))) / (double)(modSaBan.myGRID_WIDTH - 1) / 1000.0;
                num2 = Convert.ToDouble(decimal.Multiply(new decimal(this.m_TexImage.Height), new decimal(1000L))) / (double)(modSaBan.myGRID_HEIGHT - 1) / 1000.0;
                Graphics graphics = Graphics.FromImage(this.m_TexImage);
            }
            try
            {
                IEnumerator enumerator = myModule.fMain.myBando.drawingSymbols.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    CSymbol cSymbol      = (CSymbol)enumerator.Current;
                    PointF  surfPosition = modSaBan.GetSurfPosition(cSymbol.GocX, cSymbol.GocY);
                    float   valueX       = (float)((double)surfPosition.X / num);
                    float   valueY       = (float)((double)(checked (modSaBan.myGRID_HEIGHT - 1)) - (double)surfPosition.Y / num2);
                    float   dHeading     = -CTerrain.DegreeToRadian(cSymbol.Heading);
                    Vector3 pPos         = new Vector3(valueX, valueY, -7f);
                    int     num3         = base.GetModelMeshIndex(cSymbol.Description);
                    if (num3 > -1)
                    {
                        base.Load1Model(cSymbol.Description, num3, pPos, dHeading);
                    }
                    else
                    {
                        num3 = base.GetBillboardMeshIndex(cSymbol.Description);
                        if (num3 > -1)
                        {
                            base.Load1Billboard(cSymbol.Description, num3, pPos, dHeading);
                        }
                        else
                        {
                            double       zoom         = cSymbol.Zoom / (double)cSymbol.MWidth * (modSaBan.my3DSoPixelsPer1000m / 1000.0);
                            CGraphicObjs cGraphicObjs = new CGraphicObjs();
                            try
                            {
                                IEnumerator enumerator2 = cSymbol.GObjs.GetEnumerator();
                                while (enumerator2.MoveNext())
                                {
                                    GraphicObject graphicObject = (GraphicObject)enumerator2.Current;
                                    GraphicObject aGObj         = graphicObject.Clone();
                                    cGraphicObjs.Add(aGObj);
                                }
                            }
                            finally
                            {
                                IEnumerator enumerator2;
                                if (enumerator2 is IDisposable)
                                {
                                    (enumerator2 as IDisposable).Dispose();
                                }
                            }
                            CSymbol3 cSymbol2 = new CSymbol3(cSymbol.Description, surfPosition, cGraphicObjs);
                            cSymbol2.Zoom    = zoom;
                            cSymbol2.Heading = cSymbol.Heading;
                            this.m_Symbol3Objs.Add(cSymbol2);
                        }
                    }
                }
            }
            finally
            {
                IEnumerator enumerator;
                if (enumerator is IDisposable)
                {
                    (enumerator as IDisposable).Dispose();
                }
            }
        }
Esempio n. 10
0
			public VariableDeclaration(PositionInfo PositionInfo, CSymbol Symbol, Expression InitialValue)
				: base(PositionInfo, InitialValue)
			{
				this.Symbol = Symbol;
				this.InitialValue = InitialValue;
			}
Esempio n. 11
0
        /// <summary>
        /// Parses whatever comes until the specified stop symbol is reached.
        /// </summary>
        void ParseObject(CSequence sequence, CSymbol stop)
        {
            CSymbol symbol;

            while ((symbol = ScanNextToken()) != CSymbol.Eof)
            {
                if (symbol == stop)
                {
                    return;
                }

                switch (symbol)
                {
                case CSymbol.Comment:
                    // ignore comments
                    break;

                case CSymbol.Integer:
                    CInteger n = new CInteger();
                    n.Value = lexer.TokenToInteger;
                    operands.Add(n);
                    break;

                case CSymbol.Real:
                    CReal r = new CReal();
                    r.Value = lexer.TokenToReal;
                    operands.Add(r);
                    break;

                case CSymbol.String:
                case CSymbol.HexString:
                case CSymbol.UnicodeString:
                case CSymbol.UnicodeHexString:
                    CString s = new CString();
                    s.Value = lexer.Token;
                    operands.Add(s);
                    break;

                case CSymbol.Name:
                    CName name = new CName();
                    name.Name = lexer.Token;
                    operands.Add(name);
                    break;

                case CSymbol.Operator:
                    COperator op = CreateOperator();
                    operands.Clear();
                    sequence.Add(op);
                    break;

                case CSymbol.BeginArray:
                    CArray array = new CArray();
                    Debug.Assert(operands.Count == 0, "Array within array...");
                    ParseObject(array, CSymbol.EndArray);
                    array.Add(operands);
                    operands.Clear();
                    operands.Add((CObject)array);
                    break;

                case CSymbol.EndArray:
                    throw new ContentReaderException("Unexpected: ']'");
                }
            }
        }
Esempio n. 12
0
			public TypeDeclaration(PositionInfo PositionInfo, CSymbol Symbol)
				: base(PositionInfo)
			{
				this.Symbol = Symbol;
			}
Esempio n. 13
0
    /// <summary>
    /// Parses whatever comes until the specified stop symbol is reached.
    /// </summary>
    void ParseObject(CSequence sequence, CSymbol stop)
    {
      CSymbol symbol;
      while ((symbol = ScanNextToken()) != CSymbol.Eof)
      {
        if (symbol == stop)
          return;

        switch (symbol)
        {
          case CSymbol.Comment:
            // ignore comments
            break;

          case CSymbol.Integer:
            CInteger n = new CInteger();
            n.Value = this.lexer.TokenToInteger;
            this.operands.Add(n);
            break;

          case CSymbol.Real:
            CReal r = new CReal();
            r.Value = this.lexer.TokenToReal;
            this.operands.Add(r);
            break;

          case CSymbol.String:
          case CSymbol.HexString:
          case CSymbol.UnicodeString:
          case CSymbol.UnicodeHexString:
            CString s = new CString();
            s.Value = this.lexer.Token;
            this.operands.Add(s);
            break;

          case CSymbol.Name:
            CName name = new CName();
            name.Name = this.lexer.Token;
            this.operands.Add(name);
            break;

          case CSymbol.Operator:
            COperator op = CreateOperator();
            this.operands.Clear();
            sequence.Add(op);
            break;

          case CSymbol.BeginArray:
            CArray array = new CArray();
            Debug.Assert(this.operands.Count == 0, "Array within array...");
            ParseObject(array, CSymbol.EndArray);
            array.Add(this.operands);
            this.operands.Clear();
            this.operands.Add((CObject)array);
            break;

          case CSymbol.EndArray:
            throw new ContentReaderException("Unexpected: ']'");
        }
      }
    }
Esempio n. 14
0
 /// <summary>
 /// Reads the next symbol that must be the specified one.
 /// </summary>
 CSymbol ReadSymbol(CSymbol symbol)
 {
   CSymbol current = this.lexer.ScanNextToken();
   if (symbol != current)
     throw new ContentReaderException(PSSR.UnexpectedToken(this.lexer.Token));
   return current;
 }
Esempio n. 15
0
 public void Add(CSymbol aSymbol)
 {
     this.List.Add(aSymbol);
 }
Esempio n. 16
0
 /// <summary>
 /// Reads the next symbol that must be the specified one.
 /// </summary>
 CSymbol ReadSymbol(CSymbol symbol)
 {
     CSymbol current = _lexer.ScanNextToken();
     if (symbol != current)
         ContentReaderDiagnostics.ThrowContentReaderException(PSSR.UnexpectedToken(_lexer.Token));
     return current;
 }
Esempio n. 17
0
 public void Remove(CSymbol aSymbol)
 {
     this.List.Remove(aSymbol);
 }
Esempio n. 18
0
        /// <summary>
        /// Parses whatever comes until the specified stop symbol is reached.
        /// </summary>
        void ParseObject(CSequence sequence, CSymbol stop)
        {
            CSymbol symbol;
            while ((symbol = ScanNextToken()) != CSymbol.Eof)
            {
                if (symbol == stop)
                    return;

                CString s;
                COperator op;
                switch (symbol)
                {
                    case CSymbol.Comment:
                        // ignore comments
                        break;

                    case CSymbol.Integer:
                        CInteger n = new CInteger();
                        n.Value = _lexer.TokenToInteger;
                        _operands.Add(n);
                        break;

                    case CSymbol.Real:
                        CReal r = new CReal();
                        r.Value = _lexer.TokenToReal;
                        _operands.Add(r);
                        break;

                    case CSymbol.String:
                    case CSymbol.HexString:
                    case CSymbol.UnicodeString:
                    case CSymbol.UnicodeHexString:
                        s = new CString();
                        s.Value = _lexer.Token;
                        _operands.Add(s);
                        break;

                    case CSymbol.Dictionary:
                        s = new CString();
                        s.Value = _lexer.Token;
                        s.CStringType = CStringType.Dictionary;
                        _operands.Add(s);
                        op = CreateOperator(OpCodeName.Dictionary);
                        //_operands.Clear();
                        sequence.Add(op);

                        break;

                    case CSymbol.Name:
                        CName name = new CName();
                        name.Name = _lexer.Token;
                        _operands.Add(name);
                        break;

                    case CSymbol.Operator:
                        op = CreateOperator();
                        //_operands.Clear();
                        sequence.Add(op);
                        break;

                    case CSymbol.BeginArray:
                        CArray array = new CArray();
                        if (_operands.Count != 0)
                            ContentReaderDiagnostics.ThrowContentReaderException("Array within array...");

                        ParseObject(array, CSymbol.EndArray);
                        array.Add(_operands);
                        _operands.Clear();
                        _operands.Add((CObject)array);
                        break;

                    case CSymbol.EndArray:
                        ContentReaderDiagnostics.HandleUnexpectedCharacter(']');
                        break;

#if DEBUG
                    default:
                        Debug.Assert(false);
                        break;
#endif
                }
            }
        }
Esempio n. 19
0
    public void RhSide(Production p)
    {
        CSymbol         s;
        ParserOldAction a = null;         // last old action seen

        while (m_tok != null)
        {
            if (m_tok.Matches(";"))
            {
                break;
            }
            if (m_tok.Matches("|"))
            {
                break;
            }
            if (m_tok.Matches(":"))
            {
                Advance();
                p.m_alias[m_tok.yytext] = p.m_rhs.Count;
                Advance();
            }
            else if (m_tok is PrecReference)
            {
                if (p.m_rhs.Count == 0)
                {
                    erh.Error(new CSToolsException(21, "%prec cannot be at the start of a right hand side"));
                }
                PrecReference pr = (PrecReference)m_tok;
                CSymbol       r  = (CSymbol)p.m_rhs[p.m_rhs.Count - 1];
                r.m_prec = pr.precref.m_prec;
                Advance();
            }
            else
            {
                s = (CSymbol)m_tok;
                if (s.m_symtype == CSymbol.SymType.oldaction)
                {
                    if (a != null)
                    {
                        Error(42, s.pos, "adjacent actions");
                    }
                    a = (ParserOldAction)s;
                    if (a.m_action < 0)
                    {                          // an OldAction that has been converted to a SimpleAction: discard it
                        s           = a.m_sym; // add the SimpleAction instead
                        s.m_symtype = CSymbol.SymType.simpleaction;
                        ParserSimpleAction sa = (ParserSimpleAction)s;
                    }
                    else                      // add it to the Actions function
                    {
                        m_actions += String.Format("\ncase {0} : {1} break;", a.m_action, a.m_initialisation);
                    }
                    a = null;
                }
                else if (s.m_symtype != CSymbol.SymType.simpleaction)
                {
                    s = ((CSymbol)m_tok).Resolve();
                }
                p.AddToRhs(s);
                Advance();
            }
        }
        Precedence.Check(p);
    }
Esempio n. 20
0
        /// <summary>
        /// Parses whatever comes until the specified stop symbol is reached.
        /// </summary>
        void ParseObject(CSequence sequence, CSymbol stop)
        {
            CSymbol symbol;

            while ((symbol = ScanNextToken()) != CSymbol.Eof)
            {
                if (symbol == stop)
                {
                    return;
                }

                CString   s;
                COperator op;
                switch (symbol)
                {
                case CSymbol.Comment:
                    // ignore comments
                    break;

                case CSymbol.Integer:
                    CInteger n = new CInteger();
                    n.Value = _lexer.TokenToInteger;
                    _operands.Add(n);
                    break;

                case CSymbol.Real:
                    CReal r = new CReal();
                    r.Value = _lexer.TokenToReal;
                    _operands.Add(r);
                    break;

                case CSymbol.String:
                case CSymbol.HexString:
                case CSymbol.UnicodeString:
                case CSymbol.UnicodeHexString:
                    s       = new CString();
                    s.Value = _lexer.Token;
                    _operands.Add(s);
                    break;

                case CSymbol.Dictionary:
                    s             = new CString();
                    s.Value       = _lexer.Token;
                    s.CStringType = CStringType.Dictionary;
                    _operands.Add(s);
                    op = CreateOperator(OpCodeName.Dictionary);
                    //_operands.Clear();
                    sequence.Add(op);

                    break;

                case CSymbol.Name:
                    CName name = new CName();
                    name.Name = _lexer.Token;
                    _operands.Add(name);
                    break;

                case CSymbol.Operator:
                    op = CreateOperator();
                    //_operands.Clear();
                    sequence.Add(op);
                    break;

                case CSymbol.BeginArray:
                    CArray array = new CArray();
                    if (_operands.Count != 0)
                    {
                        ContentReaderDiagnostics.ThrowContentReaderException("Array within array...");
                    }

                    ParseObject(array, CSymbol.EndArray);
                    array.Add(_operands);
                    _operands.Clear();
                    _operands.Add((CObject)array);
                    break;

                case CSymbol.EndArray:
                    ContentReaderDiagnostics.HandleUnexpectedCharacter(']');
                    break;

#if DEBUG
                default:
                    Debug.Assert(false);
                    break;
#endif
                }
            }
        }
Esempio n. 21
0
 public PrecReference(Lexer lx, TOKEN t) : base(lx)
 {
     precref = ((CSymbol)t).Resolve();
     new SymbolType(((ptokens)lx).m_sgen, t.yytext, true);
 }
Esempio n. 22
0
        public void DrawSelectedSymbol(AxMap pMap, Graphics g, CSymbol selectedSymbol, float Scale)
        {
            GraphicObject selectedObject = selectedSymbol.GObjs[0];

            System.Drawing.Point ltPt    = default(System.Drawing.Point);
            float         num            = (float)ltPt.X;
            float         num2           = (float)ltPt.Y;
            GraphicObject graphicObject  = selectedObject;
            double        num3           = (double)graphicObject.X;
            GraphicObject graphicObject2 = selectedObject;
            double        num4           = (double)graphicObject2.Y;

            pMap.ConvertCoord(ref num, ref num2, ref num3, ref num4, ConversionConstants.miMapToScreen);
            graphicObject2.Y = (float)num4;
            graphicObject.X  = (float)num3;
            checked
            {
                ltPt.Y = (int)Math.Round((double)num2);
                ltPt.X = (int)Math.Round((double)num);
                GraphicsContainer gCon = g.BeginContainer();
                g.ScaleTransform(Scale, Scale, MatrixOrder.Append);
                GraphicsContainer gCon2 = g.BeginContainer();
                g.PageUnit = GraphicsUnit.Pixel;
                bool flag = selectedObject != null;
                if (flag)
                {
                    Pen selectionPen = new Pen(Color.FromKnownColor(KnownColor.HotTrack));
                    selectionPen.DashStyle = DashStyle.Dot;
                    selectionPen.Width     = 1f;
                    flag = (selectedObject.Rotation != 0f);
                    if (flag)
                    {
                        Matrix myMatrix  = g.Transform;
                        Matrix arg_123_0 = myMatrix;
                        float  arg_123_1 = selectedObject.Rotation;
                        PointF point     = new PointF((float)ltPt.X, (float)ltPt.Y);
                        arg_123_0.RotateAt(arg_123_1, point, MatrixOrder.Append);
                        g.Transform = myMatrix;
                    }
                    PointF[] mPtfs = new PointF[3];
                    mPtfs[0].X = selectedObject.X;
                    mPtfs[0].Y = selectedObject.Y;
                    int mPtsCount;
                    unchecked
                    {
                        mPtfs[1].X = selectedObject.X + selectedObject.Width;
                        mPtfs[1].Y = selectedObject.Y + selectedObject.Height;
                        mPtsCount  = mPtfs.GetUpperBound(0);
                    }
                    System.Drawing.Point[] mPts = new System.Drawing.Point[mPtsCount + 1];
                    int arg_1B3_0 = 0;
                    int num5      = mPtsCount;
                    int i         = arg_1B3_0;
                    while (true)
                    {
                        int arg_281_0 = i;
                        int num6      = num5;
                        if (arg_281_0 > num6)
                        {
                            break;
                        }
                        System.Drawing.Point[] arg_1C3_0 = mPts;
                        int num7 = i;
                        num2 = (float)arg_1C3_0[num7].X;
                        System.Drawing.Point[] arg_1DA_0 = mPts;
                        int num8 = i;
                        num = (float)arg_1DA_0[num8].Y;
                        PointF[] arg_1F1_0 = mPtfs;
                        int      num9      = i;
                        num4 = (double)arg_1F1_0[num9].X;
                        PointF[] arg_208_0 = mPtfs;
                        int      num10     = i;
                        num3 = (double)arg_208_0[num10].Y;
                        pMap.ConvertCoord(ref num2, ref num, ref num4, ref num3, ConversionConstants.miMapToScreen);
                        mPtfs[num10].Y = (float)num3;
                        mPtfs[num9].X  = (float)num4;
                        mPts[num8].Y   = (int)Math.Round((double)num);
                        mPts[num7].X   = (int)Math.Round((double)num2);
                        i++;
                    }
                    float mW   = (float)Math.Abs(mPts[1].X - mPts[0].X);
                    float mH   = (float)Math.Abs(mPts[1].Y - mPts[0].Y);
                    float mPtX = (float)Math.Min(mPts[0].X, mPts[1].X);
                    float mPtY = (float)Math.Min(mPts[0].Y, mPts[1].Y);
                    System.Drawing.Rectangle rect = new System.Drawing.Rectangle((int)Math.Round((double)mPtX), (int)Math.Round((double)mPtY), (int)Math.Round((double)mW), (int)Math.Round((double)mH));
                    g.DrawRectangle(selectionPen, rect);
                }
                g.EndContainer(gCon2);
                g.EndContainer(gCon);
            }
        }
Esempio n. 23
0
    // parsing routines
    internal void ParseProduction()
    {
        TOKEN   tok = m_tok;
        CSymbol lhs = null;

        try
        {
            lhs = ((CSymbol)m_tok).Resolve();
        }
        catch (Exception e)
        {
            erh.Error(new CSToolsFatalException(45, tok, string.Format("Syntax error in Parser script - possibly extra semicolon?", e.Message)));
        }
        m_tok = lhs;
        if (m_tok.IsTerminal())
        {
            Error(39, m_tok.pos, string.Format("Illegal left hand side <{0}> for production", m_tok.yytext));
        }
        if (m_symbols.m_startSymbol == null)
        {
            m_symbols.m_startSymbol = lhs;
        }
        if (lhs.m_symtype == CSymbol.SymType.unknown)
        {
            lhs.m_symtype = CSymbol.SymType.nonterminal;
        }
        if ((!lhs.m_defined) && lhs.m_prods.Count == 0)
        {         // lhs not defined in %symbol statement and not previously a lhs
            // so declare it as a new symbol
            m_outFile.WriteLine(@"/// <summary/>");
            m_outFile.WriteLine("public class " + lhs.yytext + " : SYMBOL {");
            m_outFile.WriteLine(@"/// <summary/>");
            m_outFile.WriteLine(@"/// <param name='yyq'></param>");
            m_outFile.WriteLine("	public "+ lhs.yytext + "(Parser yyq):base(yyq) { }");
            m_outFile.WriteLine(@"/// <summary/>");
            m_outFile.WriteLine("  public override string yyname() { return \"" + lhs.yytext + "\"; }}");
        }
        if (!Find(lhs))
        {
            new SymbolType(this, lhs.yytext);
        }
        m_prod = new Production(this, lhs);
        m_lexer.yy_begin("rhs");
        Advance();
        if (!m_tok.Matches(":"))
        {
            Error(40, m_tok.pos, String.Format("Colon expected for production {0}", lhs.yytext));
        }
        Advance();
        RhSide(m_prod);
        while (m_tok != null && m_tok.Matches("|"))
        {
            Advance();
            m_prod = new Production(this, lhs);
            RhSide(m_prod);
        }
        if (m_tok == null || !m_tok.Matches(";"))
        {
            Error(41, m_lexer.m_pch, "Semicolon expected");
        }
        Advance();
        m_prod = null;
        m_lexer.yy_begin("YYINITIAL");
    }
Esempio n. 24
0
 public bool CouldStart(CSymbol nonterm)
 {
     return(false);
 }