예제 #1
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);
 }
        /// <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);
        }