Class CharParser<T>
- Namespace
- Farkle
- Assembly
- Farkle.dll
Provides the base class of Farkle's default parsers.
public abstract class CharParser<T> : IParser<char, T>, IServiceProvider
Type Parameters
TThe type of objects the parser produces in case of success.
- Inheritance
-
CharParser<T>
- Implements
- Extension Methods
Remarks
This class is the replacement of the RuntimeFarkle class of Farkle 6.
It extends IParser<TChar, T> with features like swapping the parser's
Tokenizer<TChar> and ISemanticProvider<TChar, T>,
getting the parser's Grammar and representing parsers that will
always fail because of problems with the grammar.
CharParser<T>s are immutable, stateless and thread-safe. Methods that customize them return new instances.
Unlike IParser<TChar, T>, CharParser<T> cannot be inherited by user code.
Properties
IsFailing
Whether the CharParser<T> will always fail because of problems with the grammar.
public bool IsFailing { get; }
Property Value
Remarks
The error can be retrieved by parsing an empty string.
If the problem is in the grammar's lexical analysis tables, the parser can be fixed by changing the tokenizer.
Methods
GetGrammar()
Gets the Grammar used by the CharParser<T>.
public Grammar GetGrammar()
Returns
GetService(Type)
Implements GetService(Type).
public object? GetService(Type serviceType)
Parameters
serviceTypeType
Returns
Remarks
The following services are always provided by CharParser<T>:
Run(ref ParserInputReader<char>, ref ParserCompletionState<T>)
Moves forward a parsing operation by parsing a block of characters.
public abstract void Run(ref ParserInputReader<char> input, ref ParserCompletionState<T> completionState)
Parameters
inputParserInputReader<char>Used to access the characters and the operation's ParserState.
completionStateParserCompletionState<T>Used to set that the operation has completed.
Remarks
This method must be invoked after reading new characters from the input source. To determine how many characters in the buffer should be kept, compare the TotalCharactersConsumed before and after running the parser.
After a result has been set to completionState the parsing operation
has completed and the parser should not run again with the same parameters.
For compatibility with Farkle's higher-level parsing APIs, running a parser whose
input's IsFinalBlock
property is set to true should set a result to completionState.
Custom parsers can support deviating from this behavior, but must do it in an opt-in fashion.
While using this method to parse a single contiguous buffer is simple, directly using it to parse streaming input is non-trivial and requires manually managing the character buffer. Parsing streaming input is best done by using ParserExtensions or a ParserStateContext<TChar, T>.
- See Also
ToSyntaxChecker()
Converts a CharParser<T> to a syntax checker.
public CharParser<object?> ToSyntaxChecker()
Returns
- See Also
ToSyntaxChecker<TNew>()
Converts a CharParser<T> to a syntax checker with a user-defined return type.
public CharParser<TNew?> ToSyntaxChecker<TNew>() where TNew : class?
Returns
- CharParser<TNew>
Type Parameters
TNew
- See Also
WithSemanticProvider<TNew>(ISemanticProvider<char, TNew>)
Changes the semantic provider of the CharParser<T> to an ISemanticProvider<TChar, T>.
public CharParser<TNew> WithSemanticProvider<TNew>(ISemanticProvider<char, TNew> semanticProvider)
Parameters
semanticProviderISemanticProvider<char, TNew>The semantic provider of the new parser.
Returns
- CharParser<TNew>
A CharParser<T> that returns
TNewon success and hassemanticProvideras its semantic provider.
Type Parameters
TNewThe result type of the new parser.
Exceptions
- ArgumentNullException
semanticProvideris null.
WithSemanticProvider<TNew>(Func<IGrammarProvider, ISemanticProvider<char, TNew>>)
Changes the semantic provider of the CharParser<T> to an ISemanticProvider<TChar, T> that depends on the parser's grammar.
public CharParser<TNew> WithSemanticProvider<TNew>(Func<IGrammarProvider, ISemanticProvider<char, TNew>> semanticProviderFactory)
Parameters
semanticProviderFactoryFunc<IGrammarProvider, ISemanticProvider<char, TNew>>A delegate that accepts an IGrammarProvider and returns a semantic provider.
Returns
- CharParser<TNew>
A CharParser<T> that returns
TNewon success and has the result ofsemanticProviderFactoryas its semantic provider.
Type Parameters
TNewThe result type of the new parser.
Remarks
In certain failing parsers, semanticProviderFactory will not be called.
Exceptions
- ArgumentNullException
semanticProviderFactoryis null.
WithTokenizer(Tokenizer<char>)
Changes the tokenizer of the CharParser<T> to a Tokenizer<TChar>.
public CharParser<T> WithTokenizer(Tokenizer<char> tokenizer)
Parameters
Returns
- CharParser<T>
A CharParser<T> with
tokenizeras its tokenizer.
Remarks
In certain failing parsers, this method will have no effect and return this.
Exceptions
- ArgumentNullException
tokenizeris null.
WithTokenizer(Func<IGrammarProvider, Tokenizer<char>>)
Changes the tokenizer of the CharParser<T> to a Tokenizer<TChar> that depends on a grammar.
public CharParser<T> WithTokenizer(Func<IGrammarProvider, Tokenizer<char>> tokenizerFactory)
Parameters
tokenizerFactoryFunc<IGrammarProvider, Tokenizer<char>>A delegate that accepts an IGrammarProvider and returns a tokenizer.
Returns
- CharParser<T>
A CharParser<T> with the result of
tokenizerFactoryas its tokenizer.
Remarks
In certain failing parsers this method will have no effect and return this.
Exceptions
- ArgumentNullException
tokenizerFactoryis null.
WithTokenizerChain(params ChainedTokenizerComponent<char>[])
Changes the tokenizer of the CharParser<T> to a chained tokenizer to be built from a sequence of ChainedTokenizerComponent<TChar>s.
public CharParser<T> WithTokenizerChain(params ChainedTokenizerComponent<char>[] components)
Parameters
componentsChainedTokenizerComponent<char>[]The sequence of chained tokenizer components.
Returns
- CharParser<T>
Remarks
In certain failing parsers this method will have no effect and return this.
Exceptions
- ArgumentException
componentsis empty.
WithTokenizerChain(params ReadOnlySpan<ChainedTokenizerComponent<char>>)
Changes the tokenizer of the CharParser<T> to a chained tokenizer to be built from a sequence of ChainedTokenizerComponent<TChar>s.
public CharParser<T> WithTokenizerChain(params ReadOnlySpan<ChainedTokenizerComponent<char>> components)
Parameters
componentsReadOnlySpan<ChainedTokenizerComponent<char>>The sequence of chained tokenizer components.
Returns
- CharParser<T>
Remarks
In certain failing parsers this method will have no effect and return this.
Exceptions
- ArgumentException
componentsis empty.