Upload from upload_mods.ps1
This commit is contained in:
54
Scripts/Utilities/ExpressionParser/Sprache/ParserOfT.cs
Normal file
54
Scripts/Utilities/ExpressionParser/Sprache/ParserOfT.cs
Normal file
@@ -0,0 +1,54 @@
|
||||
using System;
|
||||
|
||||
namespace Sprache
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a parser.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The type of the result.</typeparam>
|
||||
/// <param name="input">The input to parse.</param>
|
||||
/// <returns>The result of the parser.</returns>
|
||||
public delegate IResult<T> Parser<out T>(IInput input);
|
||||
|
||||
/// <summary>
|
||||
/// Contains some extension methods for <see cref="Parser<T>" />.
|
||||
/// </summary>
|
||||
public static class ParserExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Tries to parse the input without throwing an exception.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The type of the result.</typeparam>
|
||||
/// <param name="parser">The parser.</param>
|
||||
/// <param name="input">The input.</param>
|
||||
/// <returns>The result of the parser</returns>
|
||||
public static IResult<T> TryParse<T>(this Parser<T> parser, string input)
|
||||
{
|
||||
if (parser == null) throw new ArgumentNullException(nameof(parser));
|
||||
if (input == null) throw new ArgumentNullException(nameof(input));
|
||||
|
||||
return parser(new Input(input));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses the specified input string.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The type of the result.</typeparam>
|
||||
/// <param name="parser">The parser.</param>
|
||||
/// <param name="input">The input.</param>
|
||||
/// <returns>The result of the parser.</returns>
|
||||
/// <exception cref="Sprache.ParseException">It contains the details of the parsing error.</exception>
|
||||
public static T Parse<T>(this Parser<T> parser, string input)
|
||||
{
|
||||
if (parser == null) throw new ArgumentNullException(nameof(parser));
|
||||
if (input == null) throw new ArgumentNullException(nameof(input));
|
||||
|
||||
var result = parser.TryParse(input);
|
||||
|
||||
if(result.WasSuccessful)
|
||||
return result.Value;
|
||||
|
||||
throw new ParseException(result.ToString(), Position.FromInput(result.Remainder));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user