public MipsProgram VisitStringConstant(ASTCILStringConstantNode StringConstant) { var result = new MipsProgram(); var stringValue = Regex.Unescape(StringConstant.Value); if (!StringConstantGenerated.TryGetValue(StringConstant.Value, out var labelStringConstant)) { result.SectionData.Append(MipsGenerationHelper.NewScript() .AddData(StringConstant.ObjectLabel, new[] { MipsGenerationHelper.AddIntData( labelGenerator.GenerateLabelTypeInfo(CompilationUnit.TypeEnvironment.String.Name)), MipsGenerationHelper.AddIntData(StringConstant.ValueLabel), MipsGenerationHelper.AddIntData(stringValue.Length) }) .Comment(StringConstant.Value) .AddData(StringConstant.ValueLabel, new[] { MipsGenerationHelper.AddByteData(Regex.Unescape(StringConstant.Value).Select(x => (int)x)) })); StringConstantGenerated.Add(StringConstant.Value, StringConstant.ObjectLabel); labelStringConstant = StringConstant.ObjectLabel; } result.SectionCode.Append(MipsGenerationHelper.NewScript() .LoadFromAddress(MipsRegisterSet.a0, labelStringConstant) .Add(MipsRegisterSet.a0, 4)); return(result); }