/// <summary>
        /// Creates a new Event Assembler code language
        /// </summary>
        /// <param name="name">Name of the language</param>
        /// <param name="pointerMaker">Pointer maker for this language</param>
        /// <param name="pointerList">Pointer list of this langauge, String is the name of the 
        /// label to point to, List are the priorities that are pointed to.</param>
        /// <param name="pointerListParameters">Array of amount of pointers per POIN code for pointer list.</param>
        public EACodeLanguage(string name, IPointerMaker pointerMaker,
            Tuple<string, List<Priority>>[][] pointerList,
            ICodeTemplateStorer codeStorer, StringComparer stringComparer)
        {
            this.name = name;
            this.codeStorage = codeStorer;

            //codeStorage.AddCode(new RawCodeTemplate(stringComparer), Priority.low);
            //codeStorage.AddCode(new CodeFillerTemplate(stringComparer), Priority.low);

            foreach (ICodeTemplate template in codeStorer)
            {
                CodeTemplate template2 = template as CodeTemplate;
                if (template2 != null)
                {
                    template2.PointerMaker = pointerMaker;
                }
            }

            reservedWords = new List<string> {
                offsetChanger,  //Offset changing code
                alignOffset,    //Offset aligning code
                currentOffset,  //Referances current offset
                messagePrinter, //Print message to message box/something
                errorPrinter,   //Print message to message box/something
                warningPrinter  //Print message to message box/something
            };

            this.assembler = new EAExpressionAssembler(codeStorage, null);

            this.disassembler = new EACodeLanguageDisassembler(
                codeStorage, pointerMaker, pointerList);
        }
Beispiel #2
0
 public EACodeLanguage(string name, IPointerMaker pointerMaker, Tuple <string, List <Priority> >[][] pointerList, ICodeTemplateStorer codeStorer, StringComparer stringComparer)
 {
     this.name        = name;
     this.codeStorage = codeStorer;
     foreach (ICodeTemplate codeTemplate1 in (IEnumerable <ICodeTemplate>)codeStorer)
     {
         CodeTemplate codeTemplate2 = codeTemplate1 as CodeTemplate;
         if (codeTemplate2 != null)
         {
             codeTemplate2.PointerMaker = pointerMaker;
         }
     }
     this.reservedWords = new List <string>()
     {
         offsetChanger,
         alignOffset,
         currentOffset,
         messagePrinter,
         errorPrinter,
         warningPrinter,
         pushOffset,
         popOffset,
         assertion,
         protectCode
     };
     this.assembler    = new EAExpressionAssembler(this.codeStorage, (IParser <Token, IExpression <int> >)null);
     this.disassembler = new EACodeLanguageDisassembler(this.codeStorage, pointerMaker, pointerList);
 }
Beispiel #3
0
        private static void LoadCodes(bool collectDoc)
        {
            Program.languages = (IDictionary <string, EACodeLanguage>) new Dictionary <string, EACodeLanguage> ();

            LanguageProcessor languageProcessor = new LanguageProcessor(collectDoc, new TemplateComparer(), Program.stringComparer);
            IPointerMaker     pointerMaker      = (IPointerMaker) new GBAPointerMaker();

            if (Program.RunConfig.isDirectory)
            {
                languageProcessor.ProcessCode(Program.RunConfig.rawsFolder, Program.RunConfig.rawsExtension);
            }
            else
            {
                languageProcessor.ProcessCode(Program.RunConfig.rawsFolder);
            }

            foreach (KeyValuePair <string, ICodeTemplateStorer> language in languageProcessor.Languages)
            {
                Tuple <string, List <Priority> >[][] pointerList;

                switch (language.Key)
                {
                case "FE6":
                    pointerList = FE6CodeLanguage.PointerList;
                    break;

                case "FE7":
                case "FE7J":
                    pointerList = FE7CodeLanguage.PointerList;
                    break;

                case "FE8":
                case "FE8J":
                    // pointerList = DummyCodeLanguage.PointerList;
                    pointerList = FE8CodeLanguage.PointerList;
                    break;

                default:
                    pointerList = DummyCodeLanguage.PointerList;
                    break;

                    // throw new NotSupportedException ("Language " + language.Key + " not supported.");
                }

                Program.languages [language.Key] = new EACodeLanguage(
                    language.Key,
                    pointerMaker,
                    pointerList,
                    language.Value,
                    Program.stringComparer
                    );
            }
        }
        public EACodeLanguageDisassembler(
            ICodeTemplateStorer codeStorage,
            IPointerMaker pointerMaker,
            Tuple<string, List<Priority>>[][] pointerList)
        {
            this.codeStorage = codeStorage;
            this.pointerMaker = pointerMaker;
            this.pointerList = pointerList;

            //longestTemplate = (from template in codeStorage
            //                   where template is CodeTemplate
            //                   select (template as CodeTemplate).Length).Max();
        }
        public EAExpressionAssembler(ICodeTemplateStorer storer, IParser <Token, IExpression <T> > parser, IIntegerType <T> intType, IPointerMaker <T> pointerMaker)
        {
            this.parser           = parser;
            this.storer           = storer;
            this.intType          = intType;
            this.pointerMaker     = pointerMaker;
            this.stringComparison = StringComparison.OrdinalIgnoreCase;

            firstPassHandlers = new Dictionary <EAExpressionType, Func <IExpression <T>, AssemblyContext <T>, FirstPassResult> >();

            firstPassHandlers[EAExpressionType.Code]       = HandleCodeFirstPass;
            firstPassHandlers[EAExpressionType.Scope]      = HandleScopeFirstPass;
            firstPassHandlers[EAExpressionType.Labeled]    = HandleLabelFirstPass;
            firstPassHandlers[EAExpressionType.Assignment] = HandleAssignmentFirstPass;

            secondPassHandlers = new Dictionary <EAExpressionType, Action <IExpression <T>, AssemblyContext <T> > >();

            secondPassHandlers[EAExpressionType.Code]       = HandleCodeSecondPass;
            secondPassHandlers[EAExpressionType.Scope]      = HandleScopeSecondPass;
            secondPassHandlers[EAExpressionType.Labeled]    = HandleLabelSecondPass;
            secondPassHandlers[EAExpressionType.Assignment] = HandleAssignmentSecondPass;
        }
        /// <summary>
        /// Creates a new Event Assembler code language
        /// </summary>
        /// <param name="name">Name of the language</param>
        /// <param name="pointerMaker">Pointer maker for this language</param>
        /// <param name="pointerList">Pointer list of this langauge, String is the name of the
        /// label to point to, List are the priorities that are pointed to.</param>
        /// <param name="pointerListParameters">Array of amount of pointers per POIN code for pointer list.</param>
        public EACodeLanguage(string name, IPointerMaker <int> pointerMaker,
                              Tuple <string, List <Priority> >[][] pointerList,
                              ICodeTemplateStorer codeStorer, StringComparer stringComparer)
        {
            this.name        = name;
            this.codeStorage = codeStorer;

            //codeStorage.AddCode(new RawCodeTemplate(stringComparer), Priority.low);
            //codeStorage.AddCode(new CodeFillerTemplate(stringComparer), Priority.low);

            //foreach (ICodeTemplate template in codeStorer)
            //{
            //    CodeTemplate template2 = template as CodeTemplate;
            //    if (template2 != null)
            //    {
            //        template2.PointerMaker = pointerMaker;
            //    }
            //}

            reservedWords = new List <string> {
                offsetChanger,  //Offset changing code
                alignOffset,    //Offset aligning code
                currentOffset,  //Referances current offset
                messagePrinter, //Print message to message box/something
                errorPrinter,   //Print message to message box/something
                warningPrinter  //Print message to message box/something
            };
            var pres = new IntRepresentation();

            this.assembler = new EAExpressionAssembler <int>(
                codeStorage,
                new TokenParser <int>(StringExtensions.GetValue),
                new IntRepresentation(),
                pointerMaker);

            this.disassembler = new EACodeLanguageDisassembler <int>(
                codeStorage, pointerMaker, pointerList, pres);
        }
        /// <summary>
        /// Creates a new Event Assembler code language
        /// </summary>
        /// <param name="name">Name of the language</param>
        /// <param name="pointerMaker">Pointer maker for this language</param>
        /// <param name="pointerList">Pointer list of this langauge, String is the name of the 
        /// label to point to, List are the priorities that are pointed to.</param>
        /// <param name="pointerListParameters">Array of amount of pointers per POIN code for pointer list.</param>
        public EACodeLanguage(string name, IPointerMaker<int> pointerMaker,
            Tuple<string, List<Priority>>[][] pointerList,
            ICodeTemplateStorer codeStorer, StringComparer stringComparer)
        {
            this.name = name;
            this.codeStorage = codeStorer;

            //codeStorage.AddCode(new RawCodeTemplate(stringComparer), Priority.low);
            //codeStorage.AddCode(new CodeFillerTemplate(stringComparer), Priority.low);

            //foreach (ICodeTemplate template in codeStorer)
            //{
            //    CodeTemplate template2 = template as CodeTemplate;
            //    if (template2 != null)
            //    {
            //        template2.PointerMaker = pointerMaker;
            //    }
            //}

            reservedWords = new List<string> {
                offsetChanger,  //Offset changing code
                alignOffset,    //Offset aligning code
                currentOffset,  //Referances current offset
                messagePrinter, //Print message to message box/something
                errorPrinter,   //Print message to message box/something
                warningPrinter  //Print message to message box/something
            };
            var pres = new IntRepresentation();
            this.assembler = new EAExpressionAssembler<int>(
                codeStorage,
                new TokenParser<int>(StringExtensions.GetValue),
                new IntRepresentation(),
                pointerMaker);

            this.disassembler = new EACodeLanguageDisassembler<int>(
                codeStorage, pointerMaker, pointerList, pres);
        }
Beispiel #8
0
 internal static CanCauseError <int[]> GetValues(IExpression <int> parameter, TemplateParameter paramTemp, Func <string, int?> getSymbolValue, IPointerMaker pointerMaker)
 {
     int[] numArray;
     if (parameter is ExpressionList <int> )
     {
         ExpressionList <int> expressionList = parameter as ExpressionList <int>;
         numArray = new int[expressionList.ComponentCount];
         for (int index = 0; index < expressionList.ComponentCount; ++index)
         {
             CanCauseError <int> canCauseError = Folding.Fold(expressionList[index], getSymbolValue);
             if (canCauseError.CausedError)
             {
                 return(canCauseError.ConvertError <int[]>());
             }
             numArray[index] = canCauseError.Result;
         }
     }
     else
     {
         CanCauseError <int> canCauseError = Folding.Fold(parameter, getSymbolValue);
         if (canCauseError.CausedError)
         {
             return(canCauseError.ConvertError <int[]>());
         }
         if (paramTemp.pointer && pointerMaker != null)
         {
             numArray = new int[1]
             {
                 pointerMaker.MakePointer(canCauseError.Result)
             }
         }
         ;
         else
         {
             numArray = new int[1]
             {
                 canCauseError.Result
             }
         };
     }
     return((CanCauseError <int[]>)numArray);
 }
Beispiel #9
0
 public EACodeLanguageDisassembler(ICodeTemplateStorer codeStorage, IPointerMaker pointerMaker, Tuple <string, List <Priority> >[][] pointerList)
 {
     this.codeStorage  = codeStorage;
     this.pointerMaker = pointerMaker;
     this.pointerList  = pointerList;
 }