* Implement first version of languages interfaces and classes ParsersController заменен на LanguageProvider. * Update ParserTools.csproj * Update RemoteCompiler.cs * Update TestRunner * Rename LanguageIntegrator project to Languages * Update TestRunner * Rename Parsers folder * Rename PascalABCParser.dll to PascalABCLanguage.dll * Reorganise LanguageIntegrator and rename DocTagsParser * Update Release Generators * Update language loading messages * Update linux version * Move BaseParser fields to ILanguage interface * Revert "Update Release Generators" This reverts commit 26a991c71b81e643d9fbd9a815ddca222768dda9. * Revert "Rename PascalABCParser.dll to PascalABCLanguage.dll" * Clean the mess in parser folders * Organize namespaces properly * Revert "Rename LanguageIntegrator project to Languages" * Add new enclosing folders for standard languages * Organize namespaces of LanguageIntegrator properly * Rename StandardLanguages to Languages * Comment the rest of Visual basic source code * Update OutputPath in pascal parser project * Move BaseParser methods to IParser * Restore Pascal parser project initial structure * Add PascalLanguage project * Move SyntaxTreeConverters project to Languages\Pascal folder * Rename SemanticRules in parser project * Rename Errors1 to Errors in parser project * Delete LambdaConverter dll from installer * Update language integrator to load *Language.dll files * Move lambda converter project to pascal lanuage dir * Revert "Delete LambdaConverter dll from installer" This reverts commit dd56f559ebe4f8c4c5c33752d44e6953001b96a5. * Switch off VBNETParser building * Delete syntax tree converters controller * Delete lambda converter dll from repository * Reorganize syntax tree to semantic tree conversion stage * Add BaseLanguage class to make language initialization more neat * Delete syntax tree post processors entity from ILanguage and refactor ABCStatistics calls * Add new IDocParser interface for documentation comments parser * Clean up folders * Add helper data structures to reduce parameters amount in CompileInterface and CompileImplementation * Add documentation to language classes * Move Union struct in global namespace and project (ParserTools) * Add more comments and a safe select language method * Rename SemanticRules class * Fix directives format null bug * Add System.Linq ref to LanguageIntegrator * Delete SyntaxToSemanticTreeConverter interface * Add BaseSyntaxTreeConverter * Call safe select language method in intellisence * Delete source files providers from parsers * Rename GetSyntaxTree method * Change Prebuild tree to be virtual - not abstract * Refresh documentation a bit * Add temporary language check for ABCHealth button * Add parser reference to parser tools * Move current compilation unit assigning higher to avoid bug with unit check * Delete null DirectiveInfo's and refactor directives' code * Add a few more comments
152 lines
5.1 KiB
C#
152 lines
5.1 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Reflection;
|
|
using PascalABCCompiler;
|
|
using PascalABCCompiler.SyntaxTree;
|
|
using PascalABCCompiler.Parsers;
|
|
using PascalABCCompiler.Errors;
|
|
using System.Collections.Generic;
|
|
using GPPGParserScanner;
|
|
|
|
namespace PascalABCCompiler.Oberon00Parser
|
|
{
|
|
public class Oberon00LanguageInformation : DefaultLanguageInformation
|
|
{
|
|
public Oberon00LanguageInformation(IParser p):base(p)
|
|
{
|
|
}
|
|
|
|
protected override void InitKeywords()
|
|
{
|
|
List<string> keys = new List<string>();
|
|
List<string> type_keys = new List<string>();
|
|
keywords.Add("AND", "AND"); keys.Add("AND");
|
|
keywords.Add("OR", "OR"); keys.Add("OR");
|
|
keywords.Add("XOR", "XOR"); keys.Add("XOR");
|
|
keywords.Add("BEGIN", "BEGIN"); keys.Add("BEGIN");
|
|
keywords.Add("END", "END"); keys.Add("END");
|
|
keywords.Add("FOR", "FOR"); keys.Add("FOR");
|
|
keywords.Add("WHILE", "WHILE"); keys.Add("WHILE");
|
|
keywords.Add("DO", "DO"); keys.Add("DO");
|
|
keywords.Add("TO", "TO"); keys.Add("TO");
|
|
keywords.Add("ARRAY", "ARRAY"); keys.Add("ARRAY"); type_keys.Add("ARRAY");
|
|
keywords.Add("MODULE", "MODULE"); keys.Add("MODULE"); keyword_kinds.Add("MODULE", KeywordKind.Unit);
|
|
keywords.Add("VAR", "VAR"); keys.Add("VAR"); keyword_kinds.Add("VAR", KeywordKind.Var);
|
|
keywords.Add("CONST", "CONST"); keys.Add("CONST"); keyword_kinds.Add("CONST", KeywordKind.Const);
|
|
keywords.Add("IF", "IF"); keys.Add("IF");
|
|
keywords.Add("THEN", "THEN"); keys.Add("THEN");
|
|
keywords.Add("ELSE", "ELSE"); keys.Add("ELSE");
|
|
keywords_array = keys.ToArray();
|
|
type_keywords_array = type_keys.ToArray();
|
|
}
|
|
|
|
public override string SystemUnitName
|
|
{
|
|
get {
|
|
return "Oberon00System";
|
|
}
|
|
}
|
|
|
|
public override string BodyStartBracket
|
|
{
|
|
get
|
|
{
|
|
return "BEGIN";
|
|
}
|
|
}
|
|
|
|
public override string BodyEndBracket
|
|
{
|
|
get
|
|
{
|
|
return "END";
|
|
}
|
|
}
|
|
|
|
public override string ParameterDelimiter
|
|
{
|
|
get
|
|
{
|
|
return ";";
|
|
}
|
|
}
|
|
|
|
public override bool CaseSensitive
|
|
{
|
|
get
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public override bool IncludeDotNetEntities
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public override string GetDescriptionForModule(IInterfaceUnitScope scope)
|
|
{
|
|
return "Module " + scope.Name;
|
|
}
|
|
|
|
public override string GetStandardTypeByKeyword(KeywordKind keyw)
|
|
{
|
|
switch (keyw)
|
|
{
|
|
case KeywordKind.ByteType: return "BYTE";
|
|
case KeywordKind.IntType: return "INTEGER";
|
|
case KeywordKind.DoubleType: return "REAL";
|
|
case KeywordKind.CharType: return "CHAR";
|
|
case KeywordKind.BoolType: return "BOOLEAN";
|
|
}
|
|
return null;
|
|
}
|
|
|
|
protected override string GetSimpleDescriptionForElementScope(IElementScope scope)
|
|
{
|
|
string type_name = GetSimpleDescription(scope.Type);
|
|
if (type_name.StartsWith("$")) type_name = type_name.Substring(1, type_name.Length - 1);
|
|
return scope.Name + ": " + type_name;
|
|
}
|
|
|
|
private string kind_of_param(IElementScope scope)
|
|
{
|
|
/*switch (scope.ParamKind)
|
|
{
|
|
case PascalABCCompiler.SyntaxTree.parametr_kind.var_parametr: return "VAR ";
|
|
case PascalABCCompiler.SyntaxTree.parametr_kind.params_parametr: return "ParamArray ";
|
|
case PascalABCCompiler.SyntaxTree.parametr_kind.out_parametr: return "ByRef ";
|
|
}*/
|
|
return "";
|
|
}
|
|
|
|
protected override string GetDescriptionForElementScope(IElementScope scope)
|
|
{
|
|
string type_name = null;
|
|
StringBuilder sb = new StringBuilder();
|
|
if (scope.Type == null) type_name = "";
|
|
else
|
|
type_name = GetSimpleDescription(scope.Type);
|
|
if (type_name.StartsWith("$"))
|
|
type_name = type_name.Substring(1, type_name.Length - 1);
|
|
switch (scope.ElemKind)
|
|
{
|
|
case SymKind.Variable: sb.Append("VAR " + scope.Name + ": " + type_name); break;
|
|
case SymKind.Parameter: sb.Append(kind_of_param(scope) + "PARAMETER " + scope.Name + ": " + type_name); break;
|
|
case SymKind.Constant:
|
|
{
|
|
if (scope.ConstantValue == null)
|
|
sb.Append("CONST " + scope.Name + ": " + type_name);
|
|
else sb.Append("CONST " + scope.Name + " = " + scope.ConstantValue.ToString());
|
|
}
|
|
break;
|
|
|
|
}
|
|
return sb.ToString();
|
|
}
|
|
}
|
|
} |