// Copyright (c) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System.Collections.Generic;
using PascalABCCompiler.Parsers;
using PascalABCCompiler.SyntaxTreeConverters;
using PascalABCCompiler.TreeConverter;
namespace Languages.Facade
{
///
/// Интерфейс языка программирования, поддерживаемого платформой
///
public interface ILanguage
{
///
/// Название языка
///
string Name { get; }
///
/// Версия языка
///
string Version { get; }
///
/// Авторское право
///
string Copyright { get; }
ILanguageInformation LanguageInformation { get; }
ILanguageIntellisenseSupport LanguageIntellisenseSupport { get; }
///
/// Основной парсер языка
///
IParser Parser { get; }
///
/// Парсер документирующих комментариев языка
///
IDocParser DocParser { get; }
///
/// Постпреобразования синтаксического дерева (синтаксический сахар и др.)
///
List SyntaxTreeConverters { get; }
///
/// Преобразователь из синтаксического дерева в семантическое
///
syntax_tree_visitor SyntaxTreeToSemanticTreeConverter { get; }
///
/// Расширения файлов, относящиеся к языку
///
string[] FilesExtensions { get; }
///
/// Чувствительность к регистру
///
bool CaseSensitive { get; }
///
/// Названия системных модулей (стандартной библиотеки и др.)
///
string[] SystemUnitNames { get; }
///
/// Задание семантических констант, частично задающих семантические правила языка (поля класса SemanticRules)
///
void SetSemanticConstants();
///
/// Обновление SyntaxTreeToSemanticTreeConverter (нужно при обновлении компилятора)
///
// TODO: Возможно, стоит переделать логику обновления, чтобы не приходилось создавать новый объект каждый раз EVA
void SetSyntaxTreeToSemanticTreeConverter();
}
}