1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="none" email=""/>
// <version>$Revision: 4482 $</version>
// </file>
using System;
using System.IO;
using System.Text;
namespace ICSharpCode.NRefactory
{
public enum SupportedLanguage {
CSharp,
VBNet
}
/// <summary>
/// Static helper class that constructs lexer and parser objects.
/// </summary>
public static class ParserFactory
{
public static Parser.ILexer CreateLexer(SupportedLanguage language, TextReader textReader)
{
switch (language) {
case SupportedLanguage.CSharp:
return new ICSharpCode.NRefactory.Parser.CSharp.Lexer(textReader);
case SupportedLanguage.VBNet:
return new ICSharpCode.NRefactory.Parser.VB.Lexer(textReader);
}
throw new System.NotSupportedException(language + " not supported.");
}
public static IParser CreateParser(SupportedLanguage language, TextReader textReader)
{
Parser.ILexer lexer = CreateLexer(language, textReader);
switch (language) {
case SupportedLanguage.CSharp:
return new ICSharpCode.NRefactory.Parser.CSharp.Parser(lexer);
case SupportedLanguage.VBNet:
return new ICSharpCode.NRefactory.Parser.VB.Parser(lexer);
}
throw new System.NotSupportedException(language + " not supported.");
}
public static IParser CreateParser(string fileName)
{
return CreateParser(fileName, Encoding.UTF8);
}
public static IParser CreateParser(string fileName, Encoding encoding)
{
string ext = Path.GetExtension(fileName);
if (ext.Equals(".cs", StringComparison.OrdinalIgnoreCase))
return CreateParser(SupportedLanguage.CSharp, new StreamReader(fileName, encoding));
if (ext.Equals(".vb", StringComparison.OrdinalIgnoreCase))
return CreateParser(SupportedLanguage.VBNet, new StreamReader(fileName, encoding));
return null;
}
}
}
|