Exemplo n.º 1
0
 internal void RegisterLabel(LabelTable lblTable)
 {
     if (m_label != null)
     {
         lblTable.Register(m_label);
     }
 }
Exemplo n.º 2
0
        internal Boolean ProcessTextLines(LabelTable lblTable)
        {
            m_processedLines = TextLineProcessor.Process(TextLines, lblTable);
            Boolean processingError = (0 < CountErrorLine(m_processedLines));

            return(processingError);
        }
Exemplo n.º 3
0
 internal RelocatableModule()
 {
     m_words      = new WordCollection();
     m_labelTable = new LabelTable();
     m_entryPoint = null;
     m_labelRefs  = new List <LabelReference>();
 }
Exemplo n.º 4
0
 internal void SetLabelOffset(LabelTable lblTable, MemoryOffset offset)
 {
     if (m_label != null)
     {
         LabelDefinition labelDef = lblTable.GetDefinitionFor(m_label);
         labelDef.SetRelOffset(offset);
     }
 }
Exemplo n.º 5
0
        internal ProgramLine GenerateLiteralDc(LabelTable lblTable)
        {
            String generatedText = m_instruction.GenerateLiteralDc(lblTable);

            if (generatedText == null)
            {
                return(null);
            }
            else
            {
                return(Parse(generatedText));
            }
        }
Exemplo n.º 6
0
 private LabelDefinition GetExecStartLabelDefinition(LabelTable lblTable)
 {
     try
     {
         return(lblTable.GetDefinitionFor(m_execStartLabel));
     }
     catch (Exception innerEx)
     {
         String message = String.Format(
             Resources.MSG_CouldNotGetExecStartLabelDefinition, m_execStartLabel);
         throw new Casl2SimulatorException(message, innerEx);
     }
 }
Exemplo n.º 7
0
        private static IEnumerable <IEnumerable <ProgramLine> > DoGeneratedLiteralDc(
            this IEnumerable <ProgramLine> lines, LabelTable lblTable)
        {
            // リテラルから生成される DC 命令は、END 命令の直前にまとめて配置される。
            // END 命令の前までに続いて、生成された DC 命令を出力し、その後に END 命令以降を出力する。
            Boolean notEnd(ProgramLine line) => !line.IsEnd();

            yield return(lines.TakeWhile(notEnd));

            yield return(lines.Select((line) => line.GenerateLiteralDc(lblTable))
                         .Where((generatedLine) => generatedLine != null));

            yield return(lines.SkipWhile(notEnd));
        }
Exemplo n.º 8
0
        private static IEnumerable <ProgramLine> SetLabelOffset(
            this IEnumerable <ProgramLine> lines, LabelTable lblTable)
        {
            MemoryOffset offset = MemoryOffset.Zero;

            foreach (ProgramLine line in lines)
            {
                line.SetLabelOffset(lblTable, offset);
                Int32 wordCount = line.GetCodeWordCount();
                offset = offset.Add(wordCount);
            }

            return(lines);
        }
Exemplo n.º 9
0
        /// <summary>
        /// 実行開始番地を参照するラベルのアドレスを解決し、実行開始アドレスを設定します。
        /// </summary>
        /// <param name="lblTable">
        /// 再配置可能モジュールで定義されたラベルを管理する <see cref="LabelTable"/> のオブジェクトです。
        /// </param>
        internal void ResolveExecStartAddress(LabelTable lblTable)
        {
            LabelDefinition labelDef = GetExecStartLabelDefinition(lblTable);

            m_execStartAddress = labelDef.AbsAddress;
        }
Exemplo n.º 10
0
 public String GenerateLiteralDc(LabelTable lblTable)
 {
     m_label = lblTable.MakeLiteralLabel();
     return(AsmDcInstruction.Generate(m_label, m_constant));
 }
Exemplo n.º 11
0
 public String GenerateLiteralDc(LabelTable lblTable)
 {
     return(null);
 }
Exemplo n.º 12
0
 private static IEnumerable <ProgramLine> GenerateLiteralDc(
     this IEnumerable <ProgramLine> lines, LabelTable lblTable)
 {
     return(lines.DoGeneratedLiteralDc(lblTable)
            .SelectMany((lineEnumerable) => lineEnumerable));
 }
Exemplo n.º 13
0
 private static IEnumerable <ProgramLine> RegisterLabels(
     this IEnumerable <ProgramLine> lines, LabelTable lblTable)
 {
     lines.ForEach((line) => line.RegisterLabel(lblTable));
     return(lines);
 }
Exemplo n.º 14
0
 internal LabelAddressResolver(LabelTable lblTable, EntryPointTable entryPointTable)
 {
     m_labelTable      = lblTable;
     m_entryPointTable = entryPointTable;
 }
Exemplo n.º 15
0
 internal override String GenerateLiteralDc(LabelTable lblTable)
 {
     return(m_operand.GenerateLiteralDc(lblTable));
 }
Exemplo n.º 16
0
 /// <summary>
 /// 一連のテキスト行を処理し、一連の <see cref="ProgramLine"/> を生成します。
 /// </summary>
 /// <param name="textLines">処理する一連のテキスト行です。</param>
 /// <param name="lblTable">定義したラベルの一覧を管理する <see cref="LabelTable"/> のオブジェクトです。</param>
 /// <returns>生成した <see cref="ProgramLine"/> の配列を返します。</returns>
 internal static IEnumerable <ProgramLine> Process(IEnumerable <String> textLines, LabelTable lblTable)
 {
     // テキスト行を解釈し、チェックし、マクロを展開する。
     // プログラムのラベルを先に登録し、リテラルで生成する DC 命令のラベルと重複しないようにする。
     // ToArray() して、ここで実行させる。
     return(textLines.ParseText()
            .CheckParsedLines()
            .ExpandMacro()
            .RegisterLabels(lblTable)
            .GenerateLiteralDc(lblTable)
            .ToArray());
 }
Exemplo n.º 17
0
 public override String GenerateLiteralDc(LabelTable lblTable)
 {
     return(m_adrX.GenerateLiteralDc(lblTable));
 }
Exemplo n.º 18
0
 /// <summary>
 /// リテラルのための DC 命令を生成します。
 /// </summary>
 /// <param name="lblTable">
 /// ラベルを管理する <see cref="LabelTable"/> のオブジェクトです。
 /// </param>
 /// <returns>
 /// 生成した DC 命令の命令行を返します。
 /// DC 命令を生成しない場合は <see langword="null"/> を返します。
 /// </returns>
 internal virtual String GenerateLiteralDc(LabelTable lblTable)
 {
     // デフォルトでは、リテラルを生成しない。
     return(null);
 }