Skip to content

Commit

Permalink
Merge pull request #1775 from bhamiltoncx/csharp-char-streams
Browse files Browse the repository at this point in the history
New C# CharStreams static factory class
  • Loading branch information
parrt committed Mar 29, 2017
2 parents 4a1e2c2 + 307df9c commit 8284613
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 5 deletions.
Expand Up @@ -725,13 +725,11 @@ protected void writeParserTestFile(String parserName,
"\n" +
"public class Test {\n" +
" public static void Main(string[] args) {\n" +
" string inputData = File.ReadAllText(args[0], Encoding.UTF8);\n" +
" var input = CharStreams.fromPath(args[0]);\n" +
" using (FileStream fsOut = new FileStream(args[1], FileMode.Create, FileAccess.Write))\n" +
" using (FileStream fsErr = new FileStream(args[2], FileMode.Create, FileAccess.Write))\n" +
" using (TextWriter output = new StreamWriter(fsOut),\n" +
" errorOutput = new StreamWriter(fsErr)) {\n" +
" CodePointCharStream input = new CodePointCharStream(inputData);\n" +
" input.name = args[0];\n" +
" <lexerName> lex = new <lexerName>(input, output, errorOutput);\n" +
" CommonTokenStream tokens = new CommonTokenStream(lex);\n" +
" <createParser>\n"+
Expand Down Expand Up @@ -780,8 +778,7 @@ protected void writeLexerTestFile(String lexerName, boolean showDFA) {
"\n" +
"public class Test {\n" +
" public static void Main(string[] args) {\n" +
" string inputData = File.ReadAllText(args[0], Encoding.UTF8);\n" +
" ICharStream input = new CodePointCharStream(inputData);\n" +
" var input = CharStreams.fromPath(args[0]);\n" +
" using (FileStream fsOut = new FileStream(args[1], FileMode.Create, FileAccess.Write))\n" +
" using (FileStream fsErr = new FileStream(args[2], FileMode.Create, FileAccess.Write))\n" +
" using (TextWriter output = new StreamWriter(fsOut),\n" +
Expand Down
Expand Up @@ -52,6 +52,7 @@
<Compile Include="Atn\ATNDeserializationOptions.cs" />
<Compile Include="Atn\ATNDeserializer.cs" />
<Compile Include="Atn\ConflictInfo.cs" />
<Compile Include="CharStreams.cs" />
<Compile Include="Dfa\AcceptStateInfo.cs" />
<Compile Include="IVocabulary.cs" />
<Compile Include="Vocabulary.cs" />
Expand Down
Expand Up @@ -54,6 +54,7 @@
<Compile Include="Atn\ATNDeserializationOptions.cs" />
<Compile Include="Atn\ATNDeserializer.cs" />
<Compile Include="Atn\ConflictInfo.cs" />
<Compile Include="CharStreams.cs" />
<Compile Include="Dfa\AbstractEdgeMap.cs" />
<Compile Include="Dfa\AcceptStateInfo.cs" />
<Compile Include="Dfa\ArrayEdgeMap.cs" />
Expand Down
93 changes: 93 additions & 0 deletions runtime/CSharp/runtime/CSharp/Antlr4.Runtime/CharStreams.cs
@@ -0,0 +1,93 @@
/* Copyright (c) 2012-2016 The ANTLR Project. All rights reserved.
* Use of this file is governed by the BSD 3-clause license that
* can be found in the LICENSE.txt file in the project root.
*/
using System;
using System.IO;
using System.Text;
using Antlr4.Runtime;
using Antlr4.Runtime.Misc;
using Antlr4.Runtime.Sharpen;

namespace Antlr4.Runtime
{
/// <summary>Utility class to create <see cref="ICharStream"/>s from various sources of
/// string data.
///
/// The methods in this utility class support the full range of
/// Unicode code points up to U+10FFFF, unlike <see cref="AntlrInputStream"/>,
/// which is limited to 16-bit Unicode code units up to U+FFFF.
/// </summary>
public static class CharStreams
{
/// <summary>Creates an <see cref="ICharStream"/> given a path to a UTF-8
/// encoded file on disk.
///
/// Reads the entire contents of the file into the result before returning.
/// </summary>
public static ICharStream fromPath(string path)
{
return fromPath(path, Encoding.UTF8);
}

/// <summary>Creates an <see cref="ICharStream"/> given a path to a
/// file on disk and the encoding of the bytes contained in the file.
///
/// Reads the entire contents of the file into the result before returning.
/// </summary>
public static ICharStream fromPath(string path, Encoding encoding)
{
var pathContents = File.ReadAllText(path, encoding);
var result = new CodePointCharStream(pathContents);
result.name = path;
return result;
}

/// <summary>Creates an <see cref="ICharStream"/> given an opened
/// <see cref="TextReader"/>.
///
/// Reads the entire contents of the TextReader then closes the reader before returning.
/// </summary>
public static ICharStream fromTextReader(TextReader textReader)
{
try {
var textReaderContents = textReader.ReadToEnd();
return new CodePointCharStream(textReaderContents);
} finally {
textReader.Dispose();
}
}

/// <summary>Creates an <see cref="ICharStream"/> given an opened
/// <see cref="Stream"/> from which UTF-8 encoded bytes can be read.
///
/// Reads the entire contents of the stream into the result then
/// closes the stream before returning.
/// </summary>
public static ICharStream fromStream(Stream stream)
{
return fromStream(stream, Encoding.UTF8);
}

/// <summary>Creates an <see cref="ICharStream"/> given an opened
/// <see cref="Stream"/> as well as the encoding of the bytes
/// to be read from the stream.
///
/// Reads the entire contents of the stream into the result then
/// closes the stream before returning.
/// </summary>
public static ICharStream fromStream(Stream stream, Encoding encoding)
{
using (StreamReader sr = new StreamReader(stream, encoding, false)) {
return fromTextReader(sr);
}
}

/// <summary>Creates an <see cref="ICharStream"/> given a <see cref="string"/>.
/// </summary>
public static ICharStream fromstring(string s)
{
return new CodePointCharStream(s);
}
}
}

0 comments on commit 8284613

Please sign in to comment.