pascalabcnet/Languages/VisualBasic/VBNETParser/Parser.cs

232 lines
7.6 KiB
C#
Raw Permalink Normal View History

New languages engine (#3120) * 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
2024-05-25 12:26:32 +03:00
/*
2015-05-14 22:35:07 +03:00
using System;
using System.IO;
using PascalABCCompiler.ParserTools;
using PascalABCCompiler.SyntaxTree;
using PascalABCCompiler.Parsers;
using System.Resources;
using System.Reflection;
using System.Collections.Generic;
using PascalABCCompiler.Errors;
namespace PascalABCCompiler.VBNETParser
{
public class VBNETLanguageParser : IParser
{
public VBNETLanguageParser()
{
this.filesExtensions = new string[1];
this.filesExtensions[0] = ".vb";
initKeywords();
}
public List<Error> Errors {
get {
return new List<Error>();
}
set {
}
}
public List<compiler_directive> CompilerDirectives {
get {
return new List<compiler_directive>();
}
}
Keyword[] _keywords;
void initKeywords()
{
List<Keyword> key_words = new List<Keyword>();
key_words.Add(new Keyword("Module", KeywordKind.Unit));
key_words.Add(new Keyword("Or", KeywordKind.BinaryOperator));
key_words.Add(new Keyword("xor", KeywordKind.BinaryOperator));
key_words.Add(new Keyword("and", KeywordKind.BinaryOperator));
key_words.Add(new Keyword("div", KeywordKind.BinaryOperator));
key_words.Add(new Keyword("mod", KeywordKind.BinaryOperator));
key_words.Add(new Keyword("shl", KeywordKind.BinaryOperator));
key_words.Add(new Keyword("shr", KeywordKind.BinaryOperator));
key_words.Add(new Keyword("not", KeywordKind.UnaryOperator));
key_words.Add(new Keyword("as", KeywordKind.As));
key_words.Add(new Keyword("is", KeywordKind.BinaryOperator));
key_words.Add(new Keyword("in", KeywordKind.BinaryOperator));
key_words.Add(new Keyword("sizeof"));
key_words.Add(new Keyword("typeof"));
key_words.Add(new Keyword("where"));
key_words.Add(new Keyword("array"));
key_words.Add(new Keyword("begin"));
key_words.Add(new Keyword("case"));
key_words.Add(new Keyword("class"));
key_words.Add(new Keyword("const"));
key_words.Add(new Keyword("constructor"));
key_words.Add(new Keyword("destructor"));
key_words.Add(new Keyword("downto"));
key_words.Add(new Keyword("do"));
key_words.Add(new Keyword("else"));
key_words.Add(new Keyword("end"));
key_words.Add(new Keyword("except"));
key_words.Add(new Keyword("file"));
key_words.Add(new Keyword("finalization"));
key_words.Add(new Keyword("finally"));
key_words.Add(new Keyword("for"));
key_words.Add(new Keyword("foreach"));
key_words.Add(new Keyword("function", KeywordKind.Function));
key_words.Add(new Keyword("if"));
key_words.Add(new Keyword("implementation"));
key_words.Add(new Keyword("inherited", KeywordKind.Inherited));
key_words.Add(new Keyword("initialization"));
key_words.Add(new Keyword("interface"));
key_words.Add(new Keyword("procedure", KeywordKind.Function));
key_words.Add(new Keyword("operator", KeywordKind.Function));
key_words.Add(new Keyword("property"));
key_words.Add(new Keyword("raise", KeywordKind.Raise));
key_words.Add(new Keyword("record"));
key_words.Add(new Keyword("repeat"));
key_words.Add(new Keyword("set"));
key_words.Add(new Keyword("try"));
key_words.Add(new Keyword("type", KeywordKind.Type));
key_words.Add(new Keyword("then"));
key_words.Add(new Keyword("to"));
key_words.Add(new Keyword("until"));
key_words.Add(new Keyword("uses", KeywordKind.Uses));
key_words.Add(new Keyword("var", KeywordKind.Var));
key_words.Add(new Keyword("while"));
key_words.Add(new Keyword("with"));
key_words.Add(new Keyword("where"));
key_words.Add(new Keyword("nil"));
key_words.Add(new Keyword("goto"));
key_words.Add(new Keyword("of", KeywordKind.Of));
key_words.Add(new Keyword("label"));
key_words.Add(new Keyword("lock"));
key_words.Add(new Keyword("program"));
key_words.Add(new Keyword("event"));
key_words.Add(new Keyword("new", KeywordKind.New));
key_words.Add(new Keyword("on"));
key_words.Add(new Keyword("params"));
key_words.Add(new Keyword("static", KeywordKind.StaticModificator));
key_words.Add(new Keyword("forward", KeywordKind.MethodModificator));
key_words.Add(new Keyword("reintroduce", KeywordKind.ReintroduceModificator));
key_words.Add(new Keyword("virtual", KeywordKind.VirtualModificator));
key_words.Add(new Keyword("override", KeywordKind.OverrideModificator));
key_words.Add(new Keyword("abstract", KeywordKind.AbstractModificator));
key_words.Add(new Keyword("public", KeywordKind.PublicModificator));
key_words.Add(new Keyword("private", KeywordKind.PrivateModificator));
key_words.Add(new Keyword("protected", KeywordKind.ProtectedModificator));
key_words.Add(new Keyword("internal", KeywordKind.InternalModificator));
_keywords = key_words.ToArray();
}
public Keyword[] Keywords
{
get
{
return _keywords;
}
}
public bool CaseSensitive {
get {
return false;
}
}
string[] filesExtensions;
public string[] FilesExtensions {
get {
return filesExtensions;
}
}
public string Name {
get {
return "VB.NET";
}
}
public string Version {
get {
return "0.1";
}
}
public string Copyright {
get {
return "";
}
}
SourceFilesProviderDelegate sourceFilesProvider = null;
public SourceFilesProviderDelegate SourceFilesProvider
{
get
{
return sourceFilesProvider;
}
set
{
sourceFilesProvider = value;
//preprocessor.SourceFilesProvider = value;
}
}
ILanguageInformation languageInformation = null;
public ILanguageInformation LanguageInformation {
get {
if (languageInformation == null)
languageInformation = new VBNETLanguageInformation(this);
return languageInformation;
}
}
public List<CompilerWarning> Warnings
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public syntax_tree_node BuildTree(string FileName, string Text, ParseMode ParseMode, List<string> DefinesList = null)
2015-05-14 22:35:07 +03:00
{
if (string.IsNullOrEmpty(Text))
return null;
ICSharpCode.NRefactory.IParser parser = ICSharpCode.NRefactory.ParserFactory.CreateParser(ICSharpCode.NRefactory.SupportedLanguage.VBNet,new StringReader(Text));
syntax_tree_node cu = null;
ASTConverter conv = new ASTConverter();
if (ParseMode == ParseMode.Expression)
{
ICSharpCode.NRefactory.Ast.Expression expr = parser.ParseExpression();
cu = conv.get_expression(expr);
}
else
{
parser.Parse();
cu = conv.get_syntax_tree(parser.CompilationUnit, FileName);
}
parser.Dispose();
return cu;
}
public void Reset()
{
}
public override string ToString()
{
return "VB.NET Language Parser Wrapper v0.1";
}
}
}
New languages engine (#3120) * 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
2024-05-25 12:26:32 +03:00
*/