internal void RegisterLabel(LabelTable lblTable) { if (m_label != null) { lblTable.Register(m_label); } }
internal Boolean ProcessTextLines(LabelTable lblTable) { m_processedLines = TextLineProcessor.Process(TextLines, lblTable); Boolean processingError = (0 < CountErrorLine(m_processedLines)); return(processingError); }
internal RelocatableModule() { m_words = new WordCollection(); m_labelTable = new LabelTable(); m_entryPoint = null; m_labelRefs = new List <LabelReference>(); }
internal void SetLabelOffset(LabelTable lblTable, MemoryOffset offset) { if (m_label != null) { LabelDefinition labelDef = lblTable.GetDefinitionFor(m_label); labelDef.SetRelOffset(offset); } }
internal ProgramLine GenerateLiteralDc(LabelTable lblTable) { String generatedText = m_instruction.GenerateLiteralDc(lblTable); if (generatedText == null) { return(null); } else { return(Parse(generatedText)); } }
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); } }
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)); }
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); }
/// <summary> /// 実行開始番地を参照するラベルのアドレスを解決し、実行開始アドレスを設定します。 /// </summary> /// <param name="lblTable"> /// 再配置可能モジュールで定義されたラベルを管理する <see cref="LabelTable"/> のオブジェクトです。 /// </param> internal void ResolveExecStartAddress(LabelTable lblTable) { LabelDefinition labelDef = GetExecStartLabelDefinition(lblTable); m_execStartAddress = labelDef.AbsAddress; }
public String GenerateLiteralDc(LabelTable lblTable) { m_label = lblTable.MakeLiteralLabel(); return(AsmDcInstruction.Generate(m_label, m_constant)); }
public String GenerateLiteralDc(LabelTable lblTable) { return(null); }
private static IEnumerable <ProgramLine> GenerateLiteralDc( this IEnumerable <ProgramLine> lines, LabelTable lblTable) { return(lines.DoGeneratedLiteralDc(lblTable) .SelectMany((lineEnumerable) => lineEnumerable)); }
private static IEnumerable <ProgramLine> RegisterLabels( this IEnumerable <ProgramLine> lines, LabelTable lblTable) { lines.ForEach((line) => line.RegisterLabel(lblTable)); return(lines); }
internal LabelAddressResolver(LabelTable lblTable, EntryPointTable entryPointTable) { m_labelTable = lblTable; m_entryPointTable = entryPointTable; }
internal override String GenerateLiteralDc(LabelTable lblTable) { return(m_operand.GenerateLiteralDc(lblTable)); }
/// <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()); }
public override String GenerateLiteralDc(LabelTable lblTable) { return(m_adrX.GenerateLiteralDc(lblTable)); }
/// <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); }