예제 #1
0
 public override void Visit(ElseConstruction elseCon, IfConstruction ifCon)
 {
     for (int position = currentPosition; position < fileData.Length && ifCon.Stop; ++position)
     {
         if (fileData[position] == StaticData.MacroSeparator)
         {
             string macrosName = ParseUtilites.GetMacrosNameInPosition(fileData, position);
             if (table.Contains(macrosName))
             {
                 if (macrosName == "#else" || macrosName == "#elseif")
                 {
                     HandleEndOfElseConstruction(elseCon, position);
                     HandleElseConstructionAtPosition(ifCon, macrosName, ref position);
                 }
                 else if (macrosName == "#end")
                 {
                     HandleEndConstructionAtPosition(elseCon, position);
                     elseCon.SetFatherStop();
                     return;
                 }
                 else
                 {
                     HandleConstructionAtPosition(elseCon, macrosName, ref position);
                 }
             }
         }
     }
 }
예제 #2
0
        public override void Visit(CompositeConstruction comCon)
        {
            int position = currentPosition;

            for (; position < fileData.Length; ++position)
            {
                if (fileData[position] != StaticData.MacroSeparator)
                {
                    continue;
                }
                string macrosName = ParseUtilites.GetMacrosNameInPosition(fileData, position);
                if (!table.Contains(macrosName))
                {
                    continue;
                }
                if (macrosName != "#end")
                {
                    HandleConstructionAtPosition(comCon, macrosName, ref position);
                }
                else
                {
                    HandleEndConstructionAtPosition(comCon, position);
                    return;
                }
            }
            if (currentPosition < fileData.Length)
            {
                comCon.AddUnit(
                    new StaticText(comCon, fileData.Substring(currentPosition)));
            }
        }
예제 #3
0
 public static void Register(TableOfMacros table, string fileData)
 {
     try
     {
         RegisterWitoutBuilding(table, fileData);
         for (int position = 0; position < fileData.Length; ++position)
         {
             if (fileData[position] == StaticData.MacroSeparator)
             {
                 string macrosName = ParseUtilites.GetMacrosNameInPosition(fileData, position);
                 if (macrosName == "#macro")
                 {
                     string macrosData             = ParseUtilites.GetMacrossData(fileData, position);
                     string userDefinedMacrossName = StaticData.MacroSeparator +
                                                     ParseUtilites.SplitAvoidingRedundantCharacters(macrosData)[0
                                                     ];
                     MainCompositeView cv = new MainCompositeView(fileData);
                     cv.StartPositionInFile = position;
                     int startOfMacroData =
                         ParseUtilites.GetMacrosCloseBracketPosAfterMacroSep(fileData, position) + 1;
                     Visitor v = new BuildCompositeVisitor(fileData, table, startOfMacroData);
                     cv.Accept(v);
                     position = cv.EndPositionInFile + "#end".Length;
                     ((UserDefinedMacross)table.Get(userDefinedMacrossName)).CompositeView = cv;
                 }
             }
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine("Error while building table of macros!");
         Console.WriteLine("Error message: {0}", ex.Message);
     }
 }