399 lines
14 KiB
C#
399 lines
14 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using PascalABCCompiler.SemanticTree;
|
|
|
|
namespace Converter
|
|
{
|
|
public class CSharpSemanticNodeConverter : ISemanticNodeConverter
|
|
{
|
|
private SourceTextBilder sourceTextBuilder;
|
|
public SourceTextBilder SourceTextBuilder
|
|
{
|
|
set
|
|
{
|
|
sourceTextBuilder = value;
|
|
}
|
|
get
|
|
{
|
|
return sourceTextBuilder;
|
|
}
|
|
}
|
|
|
|
public CSharpSemanticNodeConverter()
|
|
{
|
|
SourceTextBuilder = new SourceTextBilder();
|
|
}
|
|
|
|
public CSharpSemanticNodeConverter(ListSyntRules _listSyntRules, TextFormatter _textFormatter)
|
|
{
|
|
SourceTextBuilder = new SourceTextBilder(_listSyntRules, _textFormatter);
|
|
}
|
|
|
|
public string GetConvertedText()
|
|
{
|
|
return SourceTextBuilder.GetNodeFromStack();
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeProgram(string _nodeName, object _node)
|
|
{
|
|
// IProgramNode - основной узел, содержит весь текст программы,
|
|
// обрабатывается визитором последним.
|
|
return SourceTextBuilder.GetNodeFromStack();
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeClass(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeNamespace(string _nodeName, object _node)
|
|
{
|
|
//SourceTextBuilder.TextFormatter.Indents.BlockBodyIncrement();
|
|
string nodeContext = SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
//SourceTextBuilder.TextFormatter.Indents.BlockBodyDecrement();
|
|
return nodeContext;
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeBlock(string _nodeName, object _node)
|
|
{
|
|
return "";
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeType(string _nodeName, object _node)
|
|
{
|
|
if ((_node as ICommonTypeNode).is_value_type)
|
|
return SourceTextBuilder.ConvertNode("struct", _node);
|
|
else // сделать для шаблонов, параметризованных щаблонов, классов.
|
|
return SourceTextBuilder.ConvertNode("class", _node);
|
|
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeFunction(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeVariable(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeStatementsNested(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeStatements(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeAssign(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeVariableReference(string _nodeName, object _node)
|
|
{
|
|
// возвращаем имя переменной
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeParameterReference(string _nodeName, object _node)
|
|
{
|
|
// возвращаем имя переменной
|
|
return (_node as ICommonParameterReferenceNode).parameter.name;
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeBoolConstant(string _nodeName, object _node)
|
|
{
|
|
// возвращаем имя переменной
|
|
return (_node as IBoolConstantNode).constant_value.ToString();
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeFunctionCall(string _nodeName, object _node)
|
|
{
|
|
// возвращаем имя переменной
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeParameter(string _nodeName, object _node)
|
|
{
|
|
string type = "";
|
|
// возвращаем имя и тип переменной
|
|
if ((_node as ICommonParameterNode).type is ICompiledTypeNode)
|
|
type = ((_node as ICommonParameterNode).type as ICompiledTypeNode).compiled_type.ToString();
|
|
if ((_node as ICommonParameterNode).type is ICommonTypeNode)
|
|
type = ((_node as ICommonParameterNode).type as ICommonTypeNode).name;
|
|
return type + " " + (_node as ICommonParameterNode).name;
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeNamespaceVariable(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeNamespaceConst(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeIf(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeLocalBlockVariable(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeStaticMethodCall(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeTypeOf(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeIntConstant(string _nodeName, object _node)
|
|
{
|
|
// возвращаем число integer
|
|
return (_node as IIntConstantNode).constant_value.ToString();
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeByteConstant(string _nodeName, object _node)
|
|
{
|
|
// возвращаем число integer
|
|
return (_node as IByteConstantNode).constant_value.ToString();
|
|
}
|
|
public virtual string ConvertPABCNETNodeSByteConstant(string _nodeName, object _node)
|
|
{
|
|
// возвращаем число integer
|
|
return (_node as ISByteConstantNode).constant_value.ToString();
|
|
}
|
|
public virtual string ConvertPABCNETNodeShortConstant(string _nodeName, object _node)
|
|
{
|
|
// возвращаем число integer
|
|
return (_node as IShortConstantNode).constant_value.ToString();
|
|
}
|
|
public virtual string ConvertPABCNETNodeUShortConstant(string _nodeName, object _node)
|
|
{
|
|
// возвращаем число integer
|
|
return (_node as IUShortConstantNode).constant_value.ToString();
|
|
}
|
|
public virtual string ConvertPABCNETNodeUIntConstant(string _nodeName, object _node)
|
|
{
|
|
// возвращаем число integer
|
|
return (_node as IUIntConstantNode).constant_value.ToString();
|
|
}
|
|
public virtual string ConvertPABCNETNodeULongConstant(string _nodeName, object _node)
|
|
{
|
|
// возвращаем число integer
|
|
return (_node as IULongConstantNode).constant_value.ToString();
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeLongConstant(string _nodeName, object _node)
|
|
{
|
|
// возвращаем число integer
|
|
return (_node as ILongConstantNode).constant_value.ToString();
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeDoubleConstant(string _nodeName, object _node)
|
|
{
|
|
// возвращаем число integer
|
|
return (_node as IDoubleConstantNode).constant_value.ToString();
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeFloatConstant(string _nodeName, object _node)
|
|
{
|
|
// возвращаем число integer
|
|
return (_node as IFloatConstantNode).constant_value.ToString();
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeCharConstant(string _nodeName, object _node)
|
|
{
|
|
// возвращаем число integer
|
|
return "'" + (_node as ICharConstantNode).constant_value.ToString() + "'";
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeStringConstant(string _nodeName, object _node)
|
|
{
|
|
// возвращаем число integer
|
|
return "\"" + (_node as IStringConstantNode).constant_value.ToString() + "\"";
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeWhile(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeRepeat(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeFor(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeSimpleArrInd(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeAdd(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeSubtract(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeMult(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeDiv(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeMod(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeInc(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeDec(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeBinNot(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeUnNot(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeShr(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeShl(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeReturn(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeEq(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeNotEq(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeGr(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeGrEq(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeSm(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeSmEq(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeAnd(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeOr(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeXor(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeUnMin(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeLocVariableReference(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeNullConst(string _nodeName, object _node)
|
|
{
|
|
return "null";
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeConstructorCall(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeCompMethodCall(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeIfElse(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeUnInc(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
|
|
public virtual string ConvertPABCNETNodeUnDec(string _nodeName, object _node)
|
|
{
|
|
return SourceTextBuilder.ConvertNode(_nodeName, _node);
|
|
}
|
|
public override string ToString()
|
|
{
|
|
return "C#";
|
|
}
|
|
}
|
|
}
|