PComb API - adamcrossland/pcomb GitHub Wiki
This is meant to be a complete reference for all of the functions and data types that comprise PComb. Being complete, they can not necessarily be in order of how a programmer would use them. If the information that is presented here is too confusing, consider looking at the Getting Started page. Also, the PComb repo has a full demo application in the app/
subdirectory, and that would be an excellent starting point for learning how to use the library.
This document is incomplete. It is still being written.
export type Parser = (input: ParserInput, output: ParserOutput, action?: ParserAction) => ParseResult;
The Parser
type is a function signature that should be implemented by any function that wants to acts as a parser. All the standard parsers that are supplied by the PComb library do so, but client code can also implement its own special-purpose parsers by implementing this signature.
export type ParseResult = boolean, ParserInput, ParserOutput;
The ParseResult
tuple is returned by all parser functions. The first value indicates if the parser successfully matched its input. If the value is false
, the remaining parameters will be identical to the objects that were supplied in the call to the Parse
function. If true
is returned, the ParserInput
returned will have its text field set to have only the input data that was not consumed by parsing, and the ParserOutput
will have its matched list set to contain all of the individual strings that were matched by each discrete parsing step as well as any application-specific fields that were set by ParserAction
functions.
export interface ParserOutput {
/** The text that was matched by the parser. */
matched: Array<string>;
copy(): ParserOutput;
}
The ParserOutput
interface must be implemented by a class that is supplied by the client code. The object may implement any number of other properties and methods, but any such custom values must be copied by the implementation of the copy method.
export interface ParserInput {
/** What is the text that is being parsed? */
text: string;
copy(): ParserInput;
}
The ParserInput
interface must be implemented by a class that is supplied by the client code.