using System.Collections.Generic; using Languages.Facade; using PascalABCCompiler.SyntaxTreeConverters; using PascalABCCompiler.SystemLibrary; using PascalABCCompiler.TreeConverter; namespace Languages.SPython { public class SPythonLanguage : BaseLanguage { public SPythonLanguage() : base( languageInformation: new Frontend.Data.SPythonLanguageInformation(), languageIntellisenseSupport: new Frontend.Data.SPythonIntellisenseSupport(), parser: new SPythonParser.SPythonLanguageParser(), docParser: null, syntaxTreeConverters: new List() { new Frontend.Converters.StandardSyntaxTreeConverter(), new SyntaxSemanticVisitors.LambdaAnyConverter() } ) { ((SPythonParser.SPythonLanguageParser)Parser).SyntaxTreeConvertersForIntellisense = SyntaxTreeConverters; } /// /// TODO: требуется проверка и настройка работы EVA /// public override void SetSemanticConstants() { SemanticRulesConstants.ClassBaseType = SystemLibrary.object_type; SemanticRulesConstants.StructBaseType = SystemLibrary.value_type; SemanticRulesConstants.AddResultVariable = true; SemanticRulesConstants.ZeroBasedStrings = true; SemanticRulesConstants.FastStrings = false; SemanticRulesConstants.InitStringAsEmptyString = true; SemanticRulesConstants.UseDivisionAssignmentOperatorsForIntegerTypes = false; SemanticRulesConstants.ManyVariablesOneInitializator = false; SemanticRulesConstants.OrderIndependedMethodNames = true; SemanticRulesConstants.OrderIndependedFunctionNames = false; SemanticRulesConstants.OrderIndependedTypeNames = false; SemanticRulesConstants.EnableExitProcedure = true; SemanticRulesConstants.StrongPointersTypeCheckForDotNet = true; SemanticRulesConstants.AllowChangeLoopVariable = false; SemanticRulesConstants.AllowGlobalVisibilityForPABCDll = true; SemanticRulesConstants.AllowMethodCallsWithoutParentheses = false; } public override void SetSyntaxTreeToSemanticTreeConverter() { SyntaxTreeToSemanticTreeConverter = new SPythonSyntaxTreeVisitor.spython_syntax_tree_visitor(LanguageProvider.Instance.MainLanguage.SyntaxTreeToSemanticTreeConverter); } } }