/* * <!-- * * ************************************************************** * This Java source has been automatically generated. * MODIFICATIONS TO THIS SOURCE MAY BE OVERWRITTEN - DO NOT MODIFY THIS FILE * ************************************************************** * * * This file (CAL_Parser.java) * was generated from CAL module: Cal.Utilities.Parser. * The constants and methods provided are intended to facilitate accessing the * Cal.Utilities.Parser module from Java code. * * Creation date: Thu Sep 20 17:28:49 PDT 2007 * --!> * */ package org.openquark.cal.module.Cal.Utilities; import org.openquark.cal.compiler.ModuleName; import org.openquark.cal.compiler.QualifiedName; import org.openquark.cal.compiler.SourceModel; /** * This module defines a parser combinator library which can be used to define parsers for both * context-free and context-sensitive grammars. * <p> * <strong>A short introduction</strong> * <p> * <em>Terminology</em> * <p> * In this document, we follow the Haskell/Parsec convention of referring to functions that operate on parsers to * produce new parsers as <em>parser combinators</em> or <em>combinators</em> for short. By definition, "combinator" * is simply another word for a higher-order function. * <p> * <em>Defining a simple parser</em> * <p> * Let's start with a simple parser: a parser that recognizes the single character 'X': * <p> * * <pre> simple :: Cal.Utilities.Parser.GenParser Char st Char * simple = Cal.Utilities.Parser.char 'X';</pre> * * <p> * The type of the parser 'simple' can be read as such: it is a parser that processes tokens of type <code>Char</code> (the first * Char in the type signature), that can deal with any user state of type <code>st</code>, and that returns a result of type * <code>Char</code> (the second Char). * <p> * <em>Sequencing</em> * <p> * To define a parser that recognizes the two-token sequence ['X', 'Y'], we can use the sequencing combinator <code>Cal.Utilities.Parser.pSeq</code>, * as in: * <p> * * <pre> xy :: GenParser Char st Char * xy = char 'X' `Cal.Utilities.Parser.pSeq` char 'Y';</pre> * * <p> * <em>Alternatives</em> * <p> * To define a parser that recognizes either 'X' or 'Y', we can use the combinator <code>Cal.Utilities.Parser.pOr</code>: * <p> * * <pre> xOrY :: GenParser Char st Char * xOrY = char 'X' `Cal.Utilities.Parser.pOr` char 'Y';</pre> * * <p> * <em>Predictive parsers</em> * <p> * For performance reasons, the <code>Cal.Utilities.Parser.pOr</code> combinator is <em>predictive</em>, meaning that it will only try its second * parser if the first parser has not consumed any input. * <p> * What this means is that a parser such as: * * <pre> testOr = Cal.Utilities.Parser.exactString "(a)" `Cal.Utilities.Parser.pOr` Cal.Utilities.Parser.exactString "(b)";</pre> * * will <em>not</em> accept the input <code>"(b)"</code>, since the first parser would have consumed the <code>'('</code> character * before failing, and thus <code>Cal.Utilities.Parser.pOr</code> would not have tried the parser <code>Cal.Utilities.Parser.exactString "(b)"</code>. * <p> * To make the parser accept both <code>"(a)"</code> and <code>"(b)"</code>, the <code>Cal.Utilities.Parser.try</code> combinator needs to be used for the * first parser, as in: * * <pre> testOr = (Cal.Utilities.Parser.try Cal.Utilities.Parser.exactString "(a)") `Cal.Utilities.Parser.pOr` Cal.Utilities.Parser.exactString "(b)";</pre> * * <p> * For any parser <code>p</code>, the augmented parser <code>(Cal.Utilities.Parser.try p)</code> behaves just like <code>p</code> except * that it pretends that it has not consumed any input whenever <code>p</code> fails. In combination with <code>Cal.Utilities.Parser.pOr</code> * this allows for infinite look-ahead in the grammar. * <p> * Finally, we have the combinator <code>Cal.Utilities.Parser.pOrT</code> which provides an optimized implementation of this common scenario. * With it, the previous example can be rewritten as: * * <pre> testOr = Cal.Utilities.Parser.exactString "(a)" `Cal.Utilities.Parser.pOrT` Cal.Utilities.Parser.exactString "(b)";</pre> * * <p> * <em>Capturing values returned by parsers in a sequence</em> * <p> * When parsers are sequenced using <code>Cal.Utilities.Parser.pSeq</code>, only the result of the last parser is kept and returned - * the results of the preceding parsers are discarded. To capture the values returned by these intermediate * parsers, the <code>Cal.Utilities.Parser.pBind</code> combinator can be used. * <p> * For example, here is a parser that returns a pair containing the results of the two intermediate parsers: * * <pre> parserPair p q = * p `Cal.Utilities.Parser.pBind` (\x -> * q `Cal.Utilities.Parser.pBind` (\y -> * Cal.Utilities.Parser.pReturn (x, y)));</pre> * * <p> * [Note: the above is the convention for formatting a sequence of parsers joined using <code>Cal.Utilities.Parser.pBind</code>.] * <p> * Here, the example can be read in an imperative fashion: * <ol> * <li> * First, parser <code>p</code> is applied, and its result is bound to <code>x</code>. * </li> * <li> * Then, parser <code>q</code> is applied, and its result is bound to <code>y</code>. * </li> * <li> * Finally, <code>Cal.Utilities.Parser.pReturn</code> returns the pair <code>(x, y)</code>. * </li> * </ol> * <p> * <strong>Converting Parsec's Haskell syntax to CAL</strong> * <p> * Here are some rules for converting between the Haskell notation to the CAL notation. * <ul> * <li> * Haskell: * * <pre> testOr1 = do{ char '(' * ; char 'a' <|> char 'b' * ; char ')' * } * </pre> * * CAL: * * <pre> testOr1 = * Cal.Utilities.Parser.char '(' `Cal.Utilities.Parser.pSeq` * (Cal.Utilities.Parser.char 'a' `Cal.Utilities.Parser.pOr` Cal.Utilities.Parser.char 'b') `Cal.Utilities.Parser.pSeq` * Cal.Utilities.Parser.char ')'</pre> * </li> * <li> * Haskell: * * <pre> nesting :: Parser Int * nesting = do{ char '(' * ; n <- nesting * ; char ')' * ; m <- nesting * ; return (max (n+1) m) * } * <|> return 0 * </pre> * * CAL: * * <pre> nesting = * ( * Cal.Utilities.Parser.char '(' `Cal.Utilities.Parser.pSeq` * nesting `Cal.Utilities.Parser.pBind` (\n -> // bind the output of nesting to n (analogous to n <- nesting) * Cal.Utilities.Parser.char ')' `Cal.Utilities.Parser.pSeq` * nesting `Cal.Utilities.Parser.pBind` (\m -> // bind the output of nesting to m * Cal.Utilities.Parser.pReturn (max (n+1) m))) * ) `Cal.Utilities.Parser.pOr` * Cal.Utilities.Parser.pReturn 0;</pre> * </li> * <li> * Haskell: * * <pre> word = many1 letter <?> "word" * </pre> * * CAL: * * <pre> word = Cal.Utilities.Parser.many1 Cal.Utilities.Parser.letter `Cal.Utilities.Parser.label` "word"; // label the parser with the given string for error messages</pre> * </li> * </ul> * <p> * <strong>Basic parser combinators</strong> * <ul> * <li> * <code>Cal.Utilities.Parser.pSeq</code> = used to sequence parsers * </li> * <li> * <code>Cal.Utilities.Parser.pBind</code> = used to sequence parsers and access the values returned by the parser * </li> * <li> * <code>Cal.Utilities.Parser.pReturn</code> = used to indicate a return value * </li> * <li> * <code>Cal.Utilities.Parser.pFail</code> = fail the parse with the specified error message * </li> * <li> * <code>Cal.Utilities.Parser.pOr</code> = operator for parser choice. * </li> * <li> * <code>Cal.Utilities.Parser.label</code> = used to provide a label for error messages * </li> * </ul> * <p> * This module is a port of the Haskell based <em>Parsec</em> * framework by Daan Leijen. Documentation for Parsec can be found at: <a href='http://www.cs.uu.nl/~daan/parsec.html'>http://www.cs.uu.nl/~daan/parsec.html</a>. * The use of the CAL version of Parsec is similar to that described in the manual. * See the file <code>ThirdPartyComponents/ThirdPartyComponents.txt</code> for the Parsec license. */ public final class CAL_Parser { public static final ModuleName MODULE_NAME = ModuleName.make("Cal.Utilities.Parser"); /** * This inner class (TypeConstructors) contains constants * and methods related to binding to CAL TypeConstructors in the Cal.Utilities.Parser module. */ public static final class TypeConstructors { /** * The <code>GenParser tok st a</code> type represents a parser that handles tokens of type <code>tok</code> * with a user supplied state <code>st</code> and returns a value of type <code>a</code> on success. */ public static final QualifiedName GenParser = QualifiedName.make(CAL_Parser.MODULE_NAME, "GenParser"); /** * This <code>Message</code> type represents parse error messages. */ public static final QualifiedName Message = QualifiedName.make(CAL_Parser.MODULE_NAME, "Message"); /** * The abstract data type <code>ParseError</code> represents parse errors. It provides the source position * (<code>Cal.Utilities.Parser.SourcePos</code>) of the error and a list of error messages (<code>Cal.Utilities.Parser.Message</code>). * A <code>ParseError</code> can be returned by the function <code>Cal.Utilities.Parser.parse</code>. */ public static final QualifiedName ParseError = QualifiedName.make(CAL_Parser.MODULE_NAME, "ParseError"); /** * The abstract data type <code>SourcePos</code> represents source positions. It contains the name of * the source, a line number and a column number. * <p> * <code>SourcePos</code> has derived instances of the type classes <code>Cal.Core.Prelude.Eq</code> and <code>Cal.Core.Prelude.Ord</code>. */ public static final QualifiedName SourcePos = QualifiedName.make(CAL_Parser.MODULE_NAME, "SourcePos"); /** * The abstract data type <code>State</code> represents the internal state of the parser. It contains the list of input * tokens that is to be parsed, the current source position, and the current user state. */ public static final QualifiedName State = QualifiedName.make(CAL_Parser.MODULE_NAME, "State"); /** * A sequence of tokens, supporting head, tail, and isEmpty. May be represented * internally by a list of tokens, or in the case of TokenSequence Char, by a * String. To construct a <code>TokenSequence</code>, use <code>Cal.Utilities.Parser.makeTSList</code> or * <code>Cal.Utilities.Parser.makeTSString</code>. */ public static final QualifiedName TokenSequence = QualifiedName.make(CAL_Parser.MODULE_NAME, "TokenSequence"); } /** * This inner class (DataConstructors) contains constants * and methods related to binding to CAL DataConstructors in the Cal.Utilities.Parser module. */ public static final class DataConstructors { /* * DataConstructors for the Cal.Utilities.Parser.Message data type. */ /** * A <code>SysUnExpect</code> message is generated internally by the <code>Cal.Utilities.Parser.satisfy</code> * combinator. * @param msg (CAL type: <code>Cal.Core.Prelude.String</code>) * the unexpected input. * @return SourceModel.Expr */ public static final SourceModel.Expr SysUnExpect(SourceModel.Expr msg) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.DataCons.make(DataConstructors.SysUnExpect), msg}); } /** * @see #SysUnExpect(org.openquark.cal.compiler.SourceModel.Expr) * @param msg * @return org.openquark.cal.compiler.SourceModel.Expr */ public static final SourceModel.Expr SysUnExpect(java.lang.String msg) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.DataCons.make(DataConstructors.SysUnExpect), SourceModel.Expr.makeStringValue(msg)}); } /** * Name binding for DataConstructor: Cal.Utilities.Parser.SysUnExpect. * @see #SysUnExpect(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName SysUnExpect = QualifiedName.make(CAL_Parser.MODULE_NAME, "SysUnExpect"); /** * Ordinal of DataConstructor Cal.Utilities.Parser.SysUnExpect. * @see #SysUnExpect(org.openquark.cal.compiler.SourceModel.Expr) */ public static final int SysUnExpect_ordinal = 0; /** * An <code>UnExpect</code> message is generated by the <code>Cal.Utilities.Parser.unexpected</code> combinator. * @param msg (CAL type: <code>Cal.Core.Prelude.String</code>) * a description of the unexpected item. * @return SourceModel.Expr */ public static final SourceModel.Expr UnExpect(SourceModel.Expr msg) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.DataCons.make(DataConstructors.UnExpect), msg}); } /** * @see #UnExpect(org.openquark.cal.compiler.SourceModel.Expr) * @param msg * @return org.openquark.cal.compiler.SourceModel.Expr */ public static final SourceModel.Expr UnExpect(java.lang.String msg) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.DataCons.make(DataConstructors.UnExpect), SourceModel.Expr.makeStringValue(msg)}); } /** * Name binding for DataConstructor: Cal.Utilities.Parser.UnExpect. * @see #UnExpect(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName UnExpect = QualifiedName.make(CAL_Parser.MODULE_NAME, "UnExpect"); /** * Ordinal of DataConstructor Cal.Utilities.Parser.UnExpect. * @see #UnExpect(org.openquark.cal.compiler.SourceModel.Expr) */ public static final int UnExpect_ordinal = 1; /** * An <code>Expect</code> message is generated by the <code>Cal.Utilities.Parser.label</code> combinator. * @param msg (CAL type: <code>Cal.Core.Prelude.String</code>) * a description of the expected item. * @return SourceModel.Expr */ public static final SourceModel.Expr Expect(SourceModel.Expr msg) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.DataCons.make(DataConstructors.Expect), msg}); } /** * @see #Expect(org.openquark.cal.compiler.SourceModel.Expr) * @param msg * @return org.openquark.cal.compiler.SourceModel.Expr */ public static final SourceModel.Expr Expect(java.lang.String msg) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.DataCons.make(DataConstructors.Expect), SourceModel.Expr.makeStringValue(msg)}); } /** * Name binding for DataConstructor: Cal.Utilities.Parser.Expect. * @see #Expect(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName Expect = QualifiedName.make(CAL_Parser.MODULE_NAME, "Expect"); /** * Ordinal of DataConstructor Cal.Utilities.Parser.Expect. * @see #Expect(org.openquark.cal.compiler.SourceModel.Expr) */ public static final int Expect_ordinal = 2; /** * A <code>Message</code> message is generated by the <code>Cal.Utilities.Parser.pFail</code> combinator. * @param msg (CAL type: <code>Cal.Core.Prelude.String</code>) * a message string. * @return SourceModel.Expr */ public static final SourceModel.Expr Message(SourceModel.Expr msg) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.DataCons.make(DataConstructors.Message), msg}); } /** * @see #Message(org.openquark.cal.compiler.SourceModel.Expr) * @param msg * @return org.openquark.cal.compiler.SourceModel.Expr */ public static final SourceModel.Expr Message(java.lang.String msg) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.DataCons.make(DataConstructors.Message), SourceModel.Expr.makeStringValue(msg)}); } /** * Name binding for DataConstructor: Cal.Utilities.Parser.Message. * @see #Message(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName Message = QualifiedName.make(CAL_Parser.MODULE_NAME, "Message"); /** * Ordinal of DataConstructor Cal.Utilities.Parser.Message. * @see #Message(org.openquark.cal.compiler.SourceModel.Expr) */ public static final int Message_ordinal = 3; } /** * This inner class (Functions) contains constants * and methods related to binding to CAL functions in the Cal.Utilities.Parser module. */ public static final class Functions { /** * Adds an error message to the given <code>Cal.Utilities.Parser.ParseError</code>. * @param msg (CAL type: <code>Cal.Utilities.Parser.Message</code>) * @param parser (CAL type: <code>Cal.Utilities.Parser.ParseError</code>) * @return (CAL type: <code>Cal.Utilities.Parser.ParseError</code>) */ public static final SourceModel.Expr addErrorMessage(SourceModel.Expr msg, SourceModel.Expr parser) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.addErrorMessage), msg, parser}); } /** * Name binding for function: addErrorMessage. * @see #addErrorMessage(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName addErrorMessage = QualifiedName.make(CAL_Parser.MODULE_NAME, "addErrorMessage"); /** * A parser that parses a letter or digit (according to <code>Cal.Core.Char.isLetterOrDigit</code>) and returns the parsed character. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st Cal.Core.Prelude.Char</code>) */ public static final SourceModel.Expr alphaNum() { return SourceModel.Expr.Var.make(Functions.alphaNum); } /** * Name binding for function: alphaNum. * @see #alphaNum() */ public static final QualifiedName alphaNum = QualifiedName.make(CAL_Parser.MODULE_NAME, "alphaNum"); /** * A parser that succeeds for any character and returns the parsed character. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st Cal.Core.Prelude.Char</code>) */ public static final SourceModel.Expr anyChar() { return SourceModel.Expr.Var.make(Functions.anyChar); } /** * Name binding for function: anyChar. * @see #anyChar() */ public static final QualifiedName anyChar = QualifiedName.make(CAL_Parser.MODULE_NAME, "anyChar"); /** * The parser <code>Cal.Utilities.Parser.anyToken showTok</code> accepts any kind of token (that can * be shown using <code>showTok</code>), and returns the accepted token. * @param show (CAL type: <code>tok -> Cal.Core.Prelude.String</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st tok</code>) */ public static final SourceModel.Expr anyToken(SourceModel.Expr show) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.anyToken), show}); } /** * Name binding for function: anyToken. * @see #anyToken(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName anyToken = QualifiedName.make(CAL_Parser.MODULE_NAME, "anyToken"); /** * The parser <code>Cal.Utilities.Parser.between open close p</code> parses <code>open</code>, followed by <code>p</code> and <code>close</code>, * and returns the value returned by <code>p</code>. * @param open (CAL type: <code>Cal.Utilities.Parser.GenParser tok st open</code>) * @param close (CAL type: <code>Cal.Utilities.Parser.GenParser tok st close</code>) * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr between(SourceModel.Expr open, SourceModel.Expr close, SourceModel.Expr p) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.between), open, close, p}); } /** * Name binding for function: between. * @see #between(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName between = QualifiedName.make(CAL_Parser.MODULE_NAME, "between"); /** * The parser <code>Cal.Utilities.Parser.caseChar c</code> parses a single character <code>x</code> where <code>(Cal.Core.Char.toLowerCase x) == c</code>, * and returns the parsed character (i.e. <code>x</code>). * @param c (CAL type: <code>Cal.Core.Prelude.Char</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st Cal.Core.Prelude.Char</code>) */ public static final SourceModel.Expr caseChar(SourceModel.Expr c) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.caseChar), c}); } /** * @see #caseChar(org.openquark.cal.compiler.SourceModel.Expr) * @param c * @return the SourceModel.Expr representing an application of caseChar */ public static final SourceModel.Expr caseChar(char c) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.caseChar), SourceModel.Expr.makeCharValue(c)}); } /** * Name binding for function: caseChar. * @see #caseChar(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName caseChar = QualifiedName.make(CAL_Parser.MODULE_NAME, "caseChar"); /** * The parser <code>Cal.Utilities.Parser.caseString s</code> parses a sequence of characters <code>chars</code> satisfying * <code>(Cal.Collections.List.map Cal.Core.Char.toLowerCase chars) == s</code>, and returns the parsed characters in a list. * @param s (CAL type: <code>[Cal.Core.Prelude.Char]</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st [Cal.Core.Prelude.Char]</code>) */ public static final SourceModel.Expr caseString(SourceModel.Expr s) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.caseString), s}); } /** * Name binding for function: caseString. * @see #caseString(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName caseString = QualifiedName.make(CAL_Parser.MODULE_NAME, "caseString"); /** * The parser <code>Cal.Utilities.Parser.caseStringU s</code> parses a sequence of characters <code>chars</code> satisfying * <code>(Cal.Collections.List.map Cal.Core.Char.toUpperCase chars) == s</code>, and returns the parsed characters in a list. * @param s (CAL type: <code>[Cal.Core.Prelude.Char]</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st [Cal.Core.Prelude.Char]</code>) */ public static final SourceModel.Expr caseStringU(SourceModel.Expr s) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.caseStringU), s}); } /** * Name binding for function: caseStringU. * @see #caseStringU(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName caseStringU = QualifiedName.make(CAL_Parser.MODULE_NAME, "caseStringU"); /** * The parser <code>Cal.Utilities.Parser.chainLeft p op x</code> parses <em>zero</em> or more occurrences of <code>p</code>, * separated by <code>op</code>, and returns a value obtained by <em>left</em>-associative applications * of the function returned by <code>op</code> to the values returned by <code>p</code>. If there are zero * occurrences of <code>p</code>, the value <code>x</code> is returned. * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.chainLeft1, Cal.Utilities.Parser.chainRight * </dl> * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param op (CAL type: <code>Cal.Utilities.Parser.GenParser tok st (a -> a -> a)</code>) * @param x (CAL type: <code>a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr chainLeft(SourceModel.Expr p, SourceModel.Expr op, SourceModel.Expr x) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.chainLeft), p, op, x}); } /** * Name binding for function: chainLeft. * @see #chainLeft(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName chainLeft = QualifiedName.make(CAL_Parser.MODULE_NAME, "chainLeft"); /** * The parser <code>Cal.Utilities.Parser.chainLeft1 p op</code> parses <em>one</em> or more occurrences of <code>p</code>, * separated by <code>op</code>, and returns a value obtained by <em>left</em>-associative applications * of the function returned by <code>op</code> to the values returned by <code>p</code>. * <p> * <code>Cal.Utilities.Parser.chainLeft1</code> is useful for eliminating left recursion which typically occurs in expression * grammars. For example: * * <pre> expr = term `Cal.Utilities.Parser.chainLeft1` mulop; * term = factor `Cal.Utilities.Parser.chainLeft1` addop; * factor = (Cal.Utilities.Parser.between (char '(') (char ')') expr) `pOr` * (Cal.Utilities.Parser.many1 digit `pBind` (\digits -> * pReturn $ stringToInt $ String.fromList digits)); * * mulop = (char '*' `pSeq` pReturn multiply) `pOr` * (char '/' `pSeq` pReturn divide); * addop = (char '+' `pSeq` pReturn add) `pOr` * (char '-' `pSeq` pReturn subtract);</pre> * * * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.chainLeft, Cal.Utilities.Parser.chainRight1 * </dl> * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param op (CAL type: <code>Cal.Utilities.Parser.GenParser tok st (a -> a -> a)</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr chainLeft1(SourceModel.Expr p, SourceModel.Expr op) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.chainLeft1), p, op}); } /** * Name binding for function: chainLeft1. * @see #chainLeft1(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName chainLeft1 = QualifiedName.make(CAL_Parser.MODULE_NAME, "chainLeft1"); /** * The parser <code>Cal.Utilities.Parser.chainRight p op x</code> parses <em>zero</em> or more occurrences of <code>p</code>, * separated by <code>op</code>, and returns a value obtained by <em>right</em>-associative applications * of the function returned by <code>op</code> to the values returned by <code>p</code>. If there are zero * occurrences of <code>p</code>, the value <code>x</code> is returned. * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.chainRight1, Cal.Utilities.Parser.chainLeft * </dl> * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param op (CAL type: <code>Cal.Utilities.Parser.GenParser tok st (a -> a -> a)</code>) * @param x (CAL type: <code>a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr chainRight(SourceModel.Expr p, SourceModel.Expr op, SourceModel.Expr x) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.chainRight), p, op, x}); } /** * Name binding for function: chainRight. * @see #chainRight(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName chainRight = QualifiedName.make(CAL_Parser.MODULE_NAME, "chainRight"); /** * The parser <code>Cal.Utilities.Parser.chainRight1 p op</code> parses <em>one</em> or more occurrences of <code>p</code>, * separated by <code>op</code>, and returns a value obtained by <em>right</em>-associative applications * of the function returned by <code>op</code> to the values returned by <code>p</code>. * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.chainRight, Cal.Utilities.Parser.chainLeft1 * </dl> * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param op (CAL type: <code>Cal.Utilities.Parser.GenParser tok st (a -> a -> a)</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr chainRight1(SourceModel.Expr p, SourceModel.Expr op) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.chainRight1), p, op}); } /** * Name binding for function: chainRight1. * @see #chainRight1(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName chainRight1 = QualifiedName.make(CAL_Parser.MODULE_NAME, "chainRight1"); /** * The parser <code>char c</code> parses a single character <code>c</code>, and returns the parsed character (i.e. <code>c</code>). * @param c (CAL type: <code>Cal.Core.Prelude.Char</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st Cal.Core.Prelude.Char</code>) */ public static final SourceModel.Expr char_(SourceModel.Expr c) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.char_), c}); } /** * @see #char_(org.openquark.cal.compiler.SourceModel.Expr) * @param c * @return the SourceModel.Expr representing an application of char */ public static final SourceModel.Expr char_(char c) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.char_), SourceModel.Expr.makeCharValue(c)}); } /** * Name binding for function: char. * @see #char_(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName char_ = QualifiedName.make(CAL_Parser.MODULE_NAME, "char"); /** * The parser <code>Cal.Utilities.Parser.choice ps</code> tries to apply the parsers in the list <code>ps</code> in order using * the <code>Cal.Utilities.Parser.pOr</code> combinator, until one of them succeeds. It returns the value of the succeeding parser. * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.choiceT, Cal.Utilities.Parser.pOr * </dl> * * @param ps (CAL type: <code>[Cal.Utilities.Parser.GenParser tok st a]</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr choice(SourceModel.Expr ps) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.choice), ps}); } /** * Name binding for function: choice. * @see #choice(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName choice = QualifiedName.make(CAL_Parser.MODULE_NAME, "choice"); /** * The parser <code>Cal.Utilities.Parser.choiceT ps</code> tries to apply the parsers in the list <code>ps</code> in order using * the <code>Cal.Utilities.Parser.pOrT</code> combinator, until one of them succeeds. It returns the value of the succeeding parser. * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.choice, Cal.Utilities.Parser.pOrT * </dl> * * @param ps (CAL type: <code>[Cal.Utilities.Parser.GenParser tok st a]</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr choiceT(SourceModel.Expr ps) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.choiceT), ps}); } /** * Name binding for function: choiceT. * @see #choiceT(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName choiceT = QualifiedName.make(CAL_Parser.MODULE_NAME, "choiceT"); /** * The parser <code>Cal.Utilities.Parser.count n p</code> parses <code>n</code> occurrences of <code>p</code>. If <code>n <= 0</code>, * the parser returns the empty list <code>[]</code>, otherwise it returns a list of <code>n</code> values returned * by applications of <code>p</code>. * @param n (CAL type: <code>Cal.Core.Prelude.Int</code>) * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st [a]</code>) */ public static final SourceModel.Expr count(SourceModel.Expr n, SourceModel.Expr p) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.count), n, p}); } /** * @see #count(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) * @param n * @param p * @return the SourceModel.Expr representing an application of count */ public static final SourceModel.Expr count(int n, SourceModel.Expr p) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.count), SourceModel.Expr.makeIntValue(n), p}); } /** * Name binding for function: count. * @see #count(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName count = QualifiedName.make(CAL_Parser.MODULE_NAME, "count"); /** * A parser that parses a digit (according to <code>Cal.Core.Char.isDigit</code>) and returns the parsed character. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st Cal.Core.Prelude.Char</code>) */ public static final SourceModel.Expr digit() { return SourceModel.Expr.Var.make(Functions.digit); } /** * Name binding for function: digit. * @see #digit() */ public static final QualifiedName digit = QualifiedName.make(CAL_Parser.MODULE_NAME, "digit"); /** * The parser <code>Cal.Utilities.Parser.endBy p sep</code> parses <em>zero</em> or more occurrences of <code>p</code>, * separated and ended by <code>sep</code>, and returns a list of values returned by the applications of <code>p</code>. * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.endBy1, Cal.Utilities.Parser.sepBy, Cal.Utilities.Parser.sepEndBy * </dl> * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param sep (CAL type: <code>Cal.Utilities.Parser.GenParser tok st sep</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st [a]</code>) */ public static final SourceModel.Expr endBy(SourceModel.Expr p, SourceModel.Expr sep) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.endBy), p, sep}); } /** * Name binding for function: endBy. * @see #endBy(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName endBy = QualifiedName.make(CAL_Parser.MODULE_NAME, "endBy"); /** * The parser <code>Cal.Utilities.Parser.endBy1 p sep</code> parses <em>one</em> or more occurrences of <code>p</code>, * separated and ended by <code>sep</code>, and returns a list of values returned by the applications of <code>p</code>. * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.endBy, Cal.Utilities.Parser.sepBy1, Cal.Utilities.Parser.sepEndBy1 * </dl> * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param sep (CAL type: <code>Cal.Utilities.Parser.GenParser tok st sep</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st [a]</code>) */ public static final SourceModel.Expr endBy1(SourceModel.Expr p, SourceModel.Expr sep) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.endBy1), p, sep}); } /** * Name binding for function: endBy1. * @see #endBy1(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName endBy1 = QualifiedName.make(CAL_Parser.MODULE_NAME, "endBy1"); /** * A parser that only succeeds at the end of the input. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st ()</code>) */ public static final SourceModel.Expr eof() { return SourceModel.Expr.Var.make(Functions.eof); } /** * Name binding for function: eof. * @see #eof() */ public static final QualifiedName eof = QualifiedName.make(CAL_Parser.MODULE_NAME, "eof"); /** * * @param parser (CAL type: <code>Cal.Utilities.Parser.ParseError</code>) * @return (CAL type: <code>Cal.Core.Prelude.Boolean</code>) * <code>Cal.Core.Prelude.True</code> iff the error is an unknown error. */ public static final SourceModel.Expr errorIsUnknown(SourceModel.Expr parser) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.errorIsUnknown), parser}); } /** * Name binding for function: errorIsUnknown. * @see #errorIsUnknown(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName errorIsUnknown = QualifiedName.make(CAL_Parser.MODULE_NAME, "errorIsUnknown"); /** * Extracts the list of error messages from the parse error, sorted according to ordering function <code>Cal.Utilities.Parser.messageCompare</code>. * @param parser (CAL type: <code>Cal.Utilities.Parser.ParseError</code>) * @return (CAL type: <code>[Cal.Utilities.Parser.Message]</code>) */ public static final SourceModel.Expr errorMessages(SourceModel.Expr parser) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.errorMessages), parser}); } /** * Name binding for function: errorMessages. * @see #errorMessages(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName errorMessages = QualifiedName.make(CAL_Parser.MODULE_NAME, "errorMessages"); /** * Extracts the source position from the parse error. * @param parser (CAL type: <code>Cal.Utilities.Parser.ParseError</code>) * @return (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) */ public static final SourceModel.Expr errorPos(SourceModel.Expr parser) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.errorPos), parser}); } /** * Name binding for function: errorPos. * @see #errorPos(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName errorPos = QualifiedName.make(CAL_Parser.MODULE_NAME, "errorPos"); /** * The parser <code>Cal.Utilities.Parser.exactString s</code> parses a sequence of characters given by <code>s</code>, and returns * the parsed characters in a list. * @param s (CAL type: <code>[Cal.Core.Prelude.Char]</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st [Cal.Core.Prelude.Char]</code>) */ public static final SourceModel.Expr exactString(SourceModel.Expr s) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.exactString), s}); } /** * Name binding for function: exactString. * @see #exactString(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName exactString = QualifiedName.make(CAL_Parser.MODULE_NAME, "exactString"); /** * Same as <code>Cal.Utilities.Parser.getInputSeq</code>, but with a list of tokens instead of a token sequence. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st [tok]</code>) */ public static final SourceModel.Expr getInput() { return SourceModel.Expr.Var.make(Functions.getInput); } /** * Name binding for function: getInput. * @see #getInput() */ public static final QualifiedName getInput = QualifiedName.make(CAL_Parser.MODULE_NAME, "getInput"); /** * A parser that returns the current input. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st (Cal.Utilities.Parser.TokenSequence tok)</code>) */ public static final SourceModel.Expr getInputSeq() { return SourceModel.Expr.Var.make(Functions.getInputSeq); } /** * Name binding for function: getInputSeq. * @see #getInputSeq() */ public static final QualifiedName getInputSeq = QualifiedName.make(CAL_Parser.MODULE_NAME, "getInputSeq"); /** * A parser that returns the current complete state of the parser. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st (Cal.Utilities.Parser.State tok st)</code>) */ public static final SourceModel.Expr getParserState() { return SourceModel.Expr.Var.make(Functions.getParserState); } /** * Name binding for function: getParserState. * @see #getParserState() */ public static final QualifiedName getParserState = QualifiedName.make(CAL_Parser.MODULE_NAME, "getParserState"); /** * A parser that returns the current source position. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st Cal.Utilities.Parser.SourcePos</code>) */ public static final SourceModel.Expr getPosition() { return SourceModel.Expr.Var.make(Functions.getPosition); } /** * Name binding for function: getPosition. * @see #getPosition() */ public static final QualifiedName getPosition = QualifiedName.make(CAL_Parser.MODULE_NAME, "getPosition"); /** * A parser that returns the current user state. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st st</code>) */ public static final SourceModel.Expr getState() { return SourceModel.Expr.Var.make(Functions.getState); } /** * Name binding for function: getState. * @see #getState() */ public static final QualifiedName getState = QualifiedName.make(CAL_Parser.MODULE_NAME, "getState"); /** * A parser that parses a hexadecimal digit (a <code>Cal.Utilities.Parser.digit</code> or a letter between <code>'a'</code> and <code>'f'</code> or * <code>'A'</code> and <code>'F'</code>), and returns the parsed character. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st Cal.Core.Prelude.Char</code>) */ public static final SourceModel.Expr hexDigit() { return SourceModel.Expr.Var.make(Functions.hexDigit); } /** * Name binding for function: hexDigit. * @see #hexDigit() */ public static final QualifiedName hexDigit = QualifiedName.make(CAL_Parser.MODULE_NAME, "hexDigit"); /** * Increments the column number of a source position by the given amount. * @param sp (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) * @param n (CAL type: <code>Cal.Core.Prelude.Int</code>) * @return (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) */ public static final SourceModel.Expr incSourceColumn(SourceModel.Expr sp, SourceModel.Expr n) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.incSourceColumn), sp, n}); } /** * @see #incSourceColumn(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) * @param sp * @param n * @return the SourceModel.Expr representing an application of incSourceColumn */ public static final SourceModel.Expr incSourceColumn(SourceModel.Expr sp, int n) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.incSourceColumn), sp, SourceModel.Expr.makeIntValue(n)}); } /** * Name binding for function: incSourceColumn. * @see #incSourceColumn(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName incSourceColumn = QualifiedName.make(CAL_Parser.MODULE_NAME, "incSourceColumn"); /** * Increments the line number of a source position by the given amount. * @param sp (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) * @param n (CAL type: <code>Cal.Core.Prelude.Int</code>) * @return (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) */ public static final SourceModel.Expr incSourceLine(SourceModel.Expr sp, SourceModel.Expr n) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.incSourceLine), sp, n}); } /** * @see #incSourceLine(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) * @param sp * @param n * @return the SourceModel.Expr representing an application of incSourceLine */ public static final SourceModel.Expr incSourceLine(SourceModel.Expr sp, int n) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.incSourceLine), sp, SourceModel.Expr.makeIntValue(n)}); } /** * Name binding for function: incSourceLine. * @see #incSourceLine(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName incSourceLine = QualifiedName.make(CAL_Parser.MODULE_NAME, "incSourceLine"); /** * Constructs a <code>Cal.Utilities.Parser.SourcePos</code> with the given source name, for the position of line 1, column 1. * @param sourceName (CAL type: <code>Cal.Core.Prelude.String</code>) * the name of the source. * @return (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) */ public static final SourceModel.Expr initialPos(SourceModel.Expr sourceName) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.initialPos), sourceName}); } /** * @see #initialPos(org.openquark.cal.compiler.SourceModel.Expr) * @param sourceName * @return the SourceModel.Expr representing an application of initialPos */ public static final SourceModel.Expr initialPos(java.lang.String sourceName) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.initialPos), SourceModel.Expr.makeStringValue(sourceName)}); } /** * Name binding for function: initialPos. * @see #initialPos(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName initialPos = QualifiedName.make(CAL_Parser.MODULE_NAME, "initialPos"); /** * The parser <code>p `label` msg</code> behaves as the parser <code>p</code>, but whenever the parser <code>p</code> * fails <em>without consuming any input</em>, it replaces the <em>expected</em> error messages with the message * <code>msg</code>. * <p> * This is normally used at the end of a set of alternatives where it would be desirable to return an error * message in terms of a higher level construct rather than returning all possible tokens. * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param msg (CAL type: <code>Cal.Core.Prelude.String</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr label(SourceModel.Expr p, SourceModel.Expr msg) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.label), p, msg}); } /** * @see #label(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) * @param p * @param msg * @return the SourceModel.Expr representing an application of label */ public static final SourceModel.Expr label(SourceModel.Expr p, java.lang.String msg) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.label), p, SourceModel.Expr.makeStringValue(msg)}); } /** * Name binding for function: label. * @see #label(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName label = QualifiedName.make(CAL_Parser.MODULE_NAME, "label"); /** * A parser that parses a letter (according to <code>Cal.Core.Char.isLetter</code>) and returns the parsed character. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st Cal.Core.Prelude.Char</code>) */ public static final SourceModel.Expr letter() { return SourceModel.Expr.Var.make(Functions.letter); } /** * Name binding for function: letter. * @see #letter() */ public static final QualifiedName letter = QualifiedName.make(CAL_Parser.MODULE_NAME, "letter"); /** * The parser <code>Cal.Utilities.Parser.lookAhead p</code> implements the functionality of lookahead: it applies parser <code>p</code> and * captures its return value <em>without changing the parser's state and without consuming input</em>. * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr lookAhead(SourceModel.Expr p) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.lookAhead), p}); } /** * Name binding for function: lookAhead. * @see #lookAhead(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName lookAhead = QualifiedName.make(CAL_Parser.MODULE_NAME, "lookAhead"); /** * A parser that parses a lowercase letter (according to <code>Cal.Core.Char.isLowerCase</code>) and returns the parsed character. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st Cal.Core.Prelude.Char</code>) */ public static final SourceModel.Expr lower() { return SourceModel.Expr.Var.make(Functions.lower); } /** * Name binding for function: lower. * @see #lower() */ public static final QualifiedName lower = QualifiedName.make(CAL_Parser.MODULE_NAME, "lower"); /** * Constructs a token sequence using the input list as its internal representation. * For character tokens, better performance is available by using <code>Cal.Utilities.Parser.makeTSString</code> * if the input is available as a <code>Cal.Core.Prelude.String</code>. * @param ts (CAL type: <code>[tok]</code>) * the list whose elements will be the tokens of the sequence. * @return (CAL type: <code>Cal.Utilities.Parser.TokenSequence tok</code>) * a token sequence providing access to the elements of the list. */ public static final SourceModel.Expr makeTSList(SourceModel.Expr ts) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.makeTSList), ts}); } /** * Name binding for function: makeTSList. * @see #makeTSList(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName makeTSList = QualifiedName.make(CAL_Parser.MODULE_NAME, "makeTSList"); /** * Constructs a token sequence using the input string as its internal representation. * This gives better performance than <code>Cal.Utilities.Parser.makeTSList</code> if the input is available as * a <code>Cal.Core.Prelude.String</code>. * @param s (CAL type: <code>Cal.Core.Prelude.String</code>) * the string whose characters will be the tokens of the sequence. * @return (CAL type: <code>Cal.Utilities.Parser.TokenSequence Cal.Core.Prelude.Char</code>) * a token sequence providing access to the characters of the string. */ public static final SourceModel.Expr makeTSString(SourceModel.Expr s) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.makeTSString), s}); } /** * @see #makeTSString(org.openquark.cal.compiler.SourceModel.Expr) * @param s * @return the SourceModel.Expr representing an application of makeTSString */ public static final SourceModel.Expr makeTSString(java.lang.String s) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.makeTSString), SourceModel.Expr.makeStringValue(s)}); } /** * Name binding for function: makeTSString. * @see #makeTSString(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName makeTSString = QualifiedName.make(CAL_Parser.MODULE_NAME, "makeTSString"); /** * The parser <code>Cal.Utilities.Parser.many p</code> applies the parser <code>p</code> <em>zero</em> or more times, and returns * a list of the values returned by applications of <code>p</code>. * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.many1 * </dl> * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st [a]</code>) */ public static final SourceModel.Expr many(SourceModel.Expr p) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.many), p}); } /** * Name binding for function: many. * @see #many(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName many = QualifiedName.make(CAL_Parser.MODULE_NAME, "many"); /** * The parser <code>Cal.Utilities.Parser.many1 p</code> applies the parser <code>p</code> <em>one</em> or more times, and returns * a list of the values returned by applications of <code>p</code>. * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.many * </dl> * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st [a]</code>) */ public static final SourceModel.Expr many1(SourceModel.Expr p) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.many1), p}); } /** * Name binding for function: many1. * @see #many1(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName many1 = QualifiedName.make(CAL_Parser.MODULE_NAME, "many1"); /** * The parser <code>Cal.Utilities.Parser.manyTill p end</code> applies parser <code>p</code> <em>zero</em> or more times until parser * <code>end</code> succeeds. It returns the list of values returned by applications of <code>p</code>. * <p> * This parser combinator is an optimized implementation of the following specification: * * <pre> Cal.Utilities.Parser.manyTill p end = * (end `pSeq` pReturn []) `pOr` * (p `pBind` (\x -> * Cal.Utilities.Parser.manyTill p end `pBind` (\xs -> * pReturn (x:xs) * )));</pre> * * * <p> * An example for parsing comments: * * <pre> xmlComment = * Cal.Utilities.Parser.exactString (String.toList "<!--") `pSeq` * Cal.Utilities.Parser.manyTill Cal.Utilities.Parser.anyChar (Cal.Utilities.Parser.try (exactString (String.toList "-->")));</pre> * * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param end (CAL type: <code>Cal.Utilities.Parser.GenParser tok st end</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st [a]</code>) */ public static final SourceModel.Expr manyTill(SourceModel.Expr p, SourceModel.Expr end) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.manyTill), p, end}); } /** * Name binding for function: manyTill. * @see #manyTill(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName manyTill = QualifiedName.make(CAL_Parser.MODULE_NAME, "manyTill"); /** * The parser <code>Cal.Utilities.Parser.manyUntil p end</code> applies parser <code>p</code> <em>zero</em> or more times until either * 1) the parser <code>end</code> would succeed if applied on the remaining input, or * 2) the end of the input is reached. * It returns the list of values returned by applications of <code>p</code>. * <p> * This parser combinator is exactly the same as: * * <pre> Cal.Utilities.Parser.manyUntil p end = * Cal.Utilities.Parser.many ((Cal.Utilities.Parser.notFollowedBy end) `pSeq` p)</pre> * * * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param end (CAL type: <code>Cal.Utilities.Parser.GenParser tok st end</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st [a]</code>) */ public static final SourceModel.Expr manyUntil(SourceModel.Expr p, SourceModel.Expr end) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.manyUntil), p, end}); } /** * Name binding for function: manyUntil. * @see #manyUntil(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName manyUntil = QualifiedName.make(CAL_Parser.MODULE_NAME, "manyUntil"); /** * Merges the two given <code>Cal.Utilities.Parser.ParseError</code> values into one. * @param error1 (CAL type: <code>Cal.Utilities.Parser.ParseError</code>) * @param error2 (CAL type: <code>Cal.Utilities.Parser.ParseError</code>) * @return (CAL type: <code>Cal.Utilities.Parser.ParseError</code>) */ public static final SourceModel.Expr mergeError(SourceModel.Expr error1, SourceModel.Expr error2) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.mergeError), error1, error2}); } /** * Name binding for function: mergeError. * @see #mergeError(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName mergeError = QualifiedName.make(CAL_Parser.MODULE_NAME, "mergeError"); /** * Compares two error messages without regards to their content. Only the * data constructors are used in the ordering: * <p> * <code>Cal.Utilities.Parser.SysUnExpect</code> < <code>Cal.Utilities.Parser.UnExpect</code> < <code>Cal.Utilities.Parser.Expect</code> < <code>Cal.Utilities.Parser.Message</code> * * @param msg1 (CAL type: <code>Cal.Utilities.Parser.Message</code>) * @param msg2 (CAL type: <code>Cal.Utilities.Parser.Message</code>) * @return (CAL type: <code>Cal.Core.Prelude.Ordering</code>) */ public static final SourceModel.Expr messageCompare(SourceModel.Expr msg1, SourceModel.Expr msg2) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.messageCompare), msg1, msg2}); } /** * Name binding for function: messageCompare. * @see #messageCompare(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName messageCompare = QualifiedName.make(CAL_Parser.MODULE_NAME, "messageCompare"); /** * <code>messageEq m1 m2</code> equals <code>Cal.Core.Prelude.True</code> if <code>Cal.Utilities.Parser.messageCompare m1 m2</code> equals <code>Cal.Core.Prelude.EQ</code>, * in all other cases it equals <code>Cal.Core.Prelude.False</code>. * @param msg1 (CAL type: <code>Cal.Utilities.Parser.Message</code>) * @param msg2 (CAL type: <code>Cal.Utilities.Parser.Message</code>) * @return (CAL type: <code>Cal.Core.Prelude.Boolean</code>) */ public static final SourceModel.Expr messageEq(SourceModel.Expr msg1, SourceModel.Expr msg2) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.messageEq), msg1, msg2}); } /** * Name binding for function: messageEq. * @see #messageEq(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName messageEq = QualifiedName.make(CAL_Parser.MODULE_NAME, "messageEq"); /** * Extracts the message string from an error message. * @param msg (CAL type: <code>Cal.Utilities.Parser.Message</code>) * @return (CAL type: <code>Cal.Core.Prelude.String</code>) */ public static final SourceModel.Expr messageString(SourceModel.Expr msg) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.messageString), msg}); } /** * Name binding for function: messageString. * @see #messageString(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName messageString = QualifiedName.make(CAL_Parser.MODULE_NAME, "messageString"); /** * Constructs a <code>Cal.Utilities.Parser.ParseError</code> representing an error at the given source position with the given message. * @param msg (CAL type: <code>Cal.Utilities.Parser.Message</code>) * @param pos (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) * @return (CAL type: <code>Cal.Utilities.Parser.ParseError</code>) */ public static final SourceModel.Expr newErrorMessage(SourceModel.Expr msg, SourceModel.Expr pos) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.newErrorMessage), msg, pos}); } /** * Name binding for function: newErrorMessage. * @see #newErrorMessage(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName newErrorMessage = QualifiedName.make(CAL_Parser.MODULE_NAME, "newErrorMessage"); /** * Constructs a <code>Cal.Utilities.Parser.ParseError</code> representing an unknown error at the given source position. * @param pos (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) * @return (CAL type: <code>Cal.Utilities.Parser.ParseError</code>) */ public static final SourceModel.Expr newErrorUnknown(SourceModel.Expr pos) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.newErrorUnknown), pos}); } /** * Name binding for function: newErrorUnknown. * @see #newErrorUnknown(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName newErrorUnknown = QualifiedName.make(CAL_Parser.MODULE_NAME, "newErrorUnknown"); /** * Constructs a <code>Cal.Utilities.Parser.SourcePos</code> with the given source name, line and column. * @param sourceName (CAL type: <code>Cal.Core.Prelude.String</code>) * the name of the source. * @param line (CAL type: <code>Cal.Core.Prelude.Int</code>) * the line number. * @param column (CAL type: <code>Cal.Core.Prelude.Int</code>) * the column number. * @return (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) */ public static final SourceModel.Expr newPos(SourceModel.Expr sourceName, SourceModel.Expr line, SourceModel.Expr column) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.newPos), sourceName, line, column}); } /** * @see #newPos(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) * @param sourceName * @param line * @param column * @return the SourceModel.Expr representing an application of newPos */ public static final SourceModel.Expr newPos(java.lang.String sourceName, int line, int column) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.newPos), SourceModel.Expr.makeStringValue(sourceName), SourceModel.Expr.makeIntValue(line), SourceModel.Expr.makeIntValue(column)}); } /** * Name binding for function: newPos. * @see #newPos(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName newPos = QualifiedName.make(CAL_Parser.MODULE_NAME, "newPos"); /** * A parser that parses a newline character (<code>'\n'</code>), and returns the parsed character. * <p> * Note this parser does <em>not</em> accept other variations on the concept of "newline", e.g. * <code>'\r'</code> and <code>"\r\n"</code>. * * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st Cal.Core.Prelude.Char</code>) */ public static final SourceModel.Expr newline() { return SourceModel.Expr.Var.make(Functions.newline); } /** * Name binding for function: newline. * @see #newline() */ public static final QualifiedName newline = QualifiedName.make(CAL_Parser.MODULE_NAME, "newline"); /** * The parser <code>noneOf cs</code> succeeds if the current character is <em>not</em> in the supplied list of characters * <code>cs</code>, and returns the parsed character. * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.satisfy * </dl> * * @param cs (CAL type: <code>[Cal.Core.Prelude.Char]</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st Cal.Core.Prelude.Char</code>) */ public static final SourceModel.Expr noneOf(SourceModel.Expr cs) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.noneOf), cs}); } /** * Name binding for function: noneOf. * @see #noneOf(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName noneOf = QualifiedName.make(CAL_Parser.MODULE_NAME, "noneOf"); /** * The parser <code>Cal.Utilities.Parser.notFollowedBy p</code> only succeeds when parser <code>p</code> fails. * This parser does not consume any input. * <p> * This parser can be used to implement the <em>longest match</em> rule. For example, to recognize * the keyword "let" but not the identifiers "lets" or "let3", the parser can be written as: * * <pre> keywordLet = Cal.Utilities.Parser.try (Cal.Utilities.Parser.exactString (String.toList "let") `pSeq` Cal.Utilities.Parser.notFollowedBy Cal.Utilities.Parser.alphaNum);</pre> * * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st ()</code>) */ public static final SourceModel.Expr notFollowedBy(SourceModel.Expr p) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.notFollowedBy), p}); } /** * Name binding for function: notFollowedBy. * @see #notFollowedBy(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName notFollowedBy = QualifiedName.make(CAL_Parser.MODULE_NAME, "notFollowedBy"); /** * A parser that parses an octal digit (a character between <code>'0'</code> and <code>'7'</code>), and returns the parsed * character. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st Cal.Core.Prelude.Char</code>) */ public static final SourceModel.Expr octDigit() { return SourceModel.Expr.Var.make(Functions.octDigit); } /** * Name binding for function: octDigit. * @see #octDigit() */ public static final QualifiedName octDigit = QualifiedName.make(CAL_Parser.MODULE_NAME, "octDigit"); /** * The parser <code>oneOf cs</code> succeeds if the current character is in the supplied list of characters * <code>cs</code>, and returns the parsed character. * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.satisfy * </dl> * * @param cs (CAL type: <code>[Cal.Core.Prelude.Char]</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st Cal.Core.Prelude.Char</code>) */ public static final SourceModel.Expr oneOf(SourceModel.Expr cs) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.oneOf), cs}); } /** * Name binding for function: oneOf. * @see #oneOf(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName oneOf = QualifiedName.make(CAL_Parser.MODULE_NAME, "oneOf"); /** * The parser <code>Cal.Utilities.Parser.option x p</code> tries to apply parser <code>p</code>. If <code>p</code> fails without consuming * input, it returns the value <code>x</code>, otherwise it returns the value returned by <code>p</code>. * * @param x (CAL type: <code>a</code>) * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr option(SourceModel.Expr x, SourceModel.Expr p) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.option), x, p}); } /** * Name binding for function: option. * @see #option(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName option = QualifiedName.make(CAL_Parser.MODULE_NAME, "option"); /** * The parser <code>Cal.Utilities.Parser.optional p</code> tries to apply parser <code>p</code>. If <code>p</code> fails without consuming * input, it returns <code>Nothing</code>, otherwise it returns the application of <code>Cal.Core.Prelude.Just</code> * to the value returned by <code>p</code>. * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st (Cal.Core.Prelude.Maybe a)</code>) */ public static final SourceModel.Expr optional(SourceModel.Expr p) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.optional), p}); } /** * Name binding for function: optional. * @see #optional(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName optional = QualifiedName.make(CAL_Parser.MODULE_NAME, "optional"); /** * The parser <code>p `pAppend` q</code> first applies the parser <code>p</code>, then applies the parser <code>q</code>, * and finally returns the concatenation of the <code>Cal.Core.Prelude.Appendable</code> results of the parsers <code>p</code> and <code>q</code>. * @param p1 (CAL type: <code>Cal.Core.Prelude.Appendable a => Cal.Utilities.Parser.GenParser tok st a</code>) * @param p2 (CAL type: <code>Cal.Core.Prelude.Appendable a => Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Core.Prelude.Appendable a => Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr pAppend(SourceModel.Expr p1, SourceModel.Expr p2) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.pAppend), p1, p2}); } /** * Name binding for function: pAppend. * @see #pAppend(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName pAppend = QualifiedName.make(CAL_Parser.MODULE_NAME, "pAppend"); /** * <code>pBind</code> implements a parser combinator for sequencing. The parser <code>p `pBind` f</code> * first applies parser <code>p</code>, then applies <code>f</code> to the returned value of <code>p</code>, * and finally applies the parser returned by <code>f</code>. * <p> * Since the second parser can depend on the result of the first parser, this allows <em>context * sensitive</em> grammars to be parsed. * * @param parser (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * the first parser in the sequence. * @param f (CAL type: <code>a -> Cal.Utilities.Parser.GenParser tok st b</code>) * the function which is to consume the result returned by <code>parser</code> and then generate * the second parser to be applied in the sequence. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st b</code>) * a parser which will apply the two parsers in sequence. */ public static final SourceModel.Expr pBind(SourceModel.Expr parser, SourceModel.Expr f) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.pBind), parser, f}); } /** * Name binding for function: pBind. * @see #pBind(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName pBind = QualifiedName.make(CAL_Parser.MODULE_NAME, "pBind"); /** * The parser <code>pFail msg</code> always fails with the error message <code>msg</code> * without consuming any input. * @param msg (CAL type: <code>Cal.Core.Prelude.String</code>) * the error message. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr pFail(SourceModel.Expr msg) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.pFail), msg}); } /** * @see #pFail(org.openquark.cal.compiler.SourceModel.Expr) * @param msg * @return the SourceModel.Expr representing an application of pFail */ public static final SourceModel.Expr pFail(java.lang.String msg) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.pFail), SourceModel.Expr.makeStringValue(msg)}); } /** * Name binding for function: pFail. * @see #pFail(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName pFail = QualifiedName.make(CAL_Parser.MODULE_NAME, "pFail"); /** * The parser <code>pMap f parser</code> is an optimized implementation of * * <pre> parser `pBind` (\x -> * pReturn (f x)) * </pre> * * @param f (CAL type: <code>a -> b</code>) * @param parser (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st b</code>) */ public static final SourceModel.Expr pMap(SourceModel.Expr f, SourceModel.Expr parser) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.pMap), f, parser}); } /** * Name binding for function: pMap. * @see #pMap(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName pMap = QualifiedName.make(CAL_Parser.MODULE_NAME, "pMap"); /** * This parser combinator implements an alternative. The parser <code>p `pOr` q</code> first applies * <code>p</code>. If it succeeds, the value of <code>p</code> is returned. If <code>p</code> fails * <em>without consuming any input</em>, then parser <code>q</code> is tried. * <p> * The parser is <em>predictive</em> since <code>q</code> is tried only when parser <code>p</code> does * not consume any input. This non-backtracking behaviour allows for both an efficient implementation * of the parser combinators and the generation of good error messages. * * @param parser1 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * the parser for the first alternative. * @param parser2 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * the parser for the second alternative, which is tried only if <code>parser1</code> fails. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr pOr(SourceModel.Expr parser1, SourceModel.Expr parser2) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.pOr), parser1, parser2}); } /** * Name binding for function: pOr. * @see #pOr(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName pOr = QualifiedName.make(CAL_Parser.MODULE_NAME, "pOr"); /** * The parser <code>p `Cal.Utilities.Parser.pOrT` q</code> is exactly the same as <code>(Cal.Utilities.Parser.try p) `Cal.Utilities.Parser.pOr` q</code>. * In particular, the parser will attempt to apply parser <code>p</code>. If <code>p</code> fails, the parser <code>q</code> is attempted * on the same input. * <p> * In the future, pOrT may be optimized. * * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.try, Cal.Utilities.Parser.pOr * </dl> * * @param parser1 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser2 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr pOrT(SourceModel.Expr parser1, SourceModel.Expr parser2) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.pOrT), parser1, parser2}); } /** * Name binding for function: pOrT. * @see #pOrT(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName pOrT = QualifiedName.make(CAL_Parser.MODULE_NAME, "pOrT"); /** * The parser <code>Cal.Utilities.Parser.pOrT3 p1 p2 p3</code> is exactly the same as * * <pre> (Cal.Utilities.Parser.try p1) `Cal.Utilities.Parser.pOr` * (Cal.Utilities.Parser.try p2) `Cal.Utilities.Parser.pOr` * p3</pre> * * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.try, Cal.Utilities.Parser.pOr * </dl> * * @param parser1 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser2 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser3 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr pOrT3(SourceModel.Expr parser1, SourceModel.Expr parser2, SourceModel.Expr parser3) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.pOrT3), parser1, parser2, parser3}); } /** * Name binding for function: pOrT3. * @see #pOrT3(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName pOrT3 = QualifiedName.make(CAL_Parser.MODULE_NAME, "pOrT3"); /** * The parser <code>Cal.Utilities.Parser.pOrT4 p1 p2 p3 p4</code> is exactly the same as * * <pre> (Cal.Utilities.Parser.try p1) `Cal.Utilities.Parser.pOr` * (Cal.Utilities.Parser.try p2) `Cal.Utilities.Parser.pOr` * (Cal.Utilities.Parser.try p3) `Cal.Utilities.Parser.pOr` * p4</pre> * * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.try, Cal.Utilities.Parser.pOr * </dl> * * @param parser1 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser2 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser3 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser4 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr pOrT4(SourceModel.Expr parser1, SourceModel.Expr parser2, SourceModel.Expr parser3, SourceModel.Expr parser4) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.pOrT4), parser1, parser2, parser3, parser4}); } /** * Name binding for function: pOrT4. * @see #pOrT4(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName pOrT4 = QualifiedName.make(CAL_Parser.MODULE_NAME, "pOrT4"); /** * The parser <code>Cal.Utilities.Parser.pOrT5 p1 p2 p3 p4 p5</code> is exactly the same as * * <pre> (Cal.Utilities.Parser.try p1) `Cal.Utilities.Parser.pOr` * (Cal.Utilities.Parser.try p2) `Cal.Utilities.Parser.pOr` * (Cal.Utilities.Parser.try p3) `Cal.Utilities.Parser.pOr` * (Cal.Utilities.Parser.try p4) `Cal.Utilities.Parser.pOr` * p5</pre> * * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.try, Cal.Utilities.Parser.pOr * </dl> * * @param parser1 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser2 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser3 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser4 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser5 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr pOrT5(SourceModel.Expr parser1, SourceModel.Expr parser2, SourceModel.Expr parser3, SourceModel.Expr parser4, SourceModel.Expr parser5) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.pOrT5), parser1, parser2, parser3, parser4, parser5}); } /** * Name binding for function: pOrT5. * @see #pOrT5(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName pOrT5 = QualifiedName.make(CAL_Parser.MODULE_NAME, "pOrT5"); /** * The parser <code>Cal.Utilities.Parser.pOrT6 p1 p2 p3 p4 p5 p6</code> is exactly the same as * * <pre> (Cal.Utilities.Parser.try p1) `Cal.Utilities.Parser.pOr` * (Cal.Utilities.Parser.try p2) `Cal.Utilities.Parser.pOr` * (Cal.Utilities.Parser.try p3) `Cal.Utilities.Parser.pOr` * (Cal.Utilities.Parser.try p4) `Cal.Utilities.Parser.pOr` * (Cal.Utilities.Parser.try p5) `Cal.Utilities.Parser.pOr` * p6</pre> * * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.try, Cal.Utilities.Parser.pOr * </dl> * * @param parser1 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser2 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser3 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser4 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser5 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser6 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr pOrT6(SourceModel.Expr parser1, SourceModel.Expr parser2, SourceModel.Expr parser3, SourceModel.Expr parser4, SourceModel.Expr parser5, SourceModel.Expr parser6) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.pOrT6), parser1, parser2, parser3, parser4, parser5, parser6}); } /** * Name binding for function: pOrT6. * @see #pOrT6(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName pOrT6 = QualifiedName.make(CAL_Parser.MODULE_NAME, "pOrT6"); /** * The parser <code>Cal.Utilities.Parser.pOrT7 p1 p2 p3 p4 p5 p6 p7</code> is exactly the same as * * <pre> (Cal.Utilities.Parser.try p1) `Cal.Utilities.Parser.pOr` * (Cal.Utilities.Parser.try p2) `Cal.Utilities.Parser.pOr` * (Cal.Utilities.Parser.try p3) `Cal.Utilities.Parser.pOr` * (Cal.Utilities.Parser.try p4) `Cal.Utilities.Parser.pOr` * (Cal.Utilities.Parser.try p5) `Cal.Utilities.Parser.pOr` * (Cal.Utilities.Parser.try p6) `Cal.Utilities.Parser.pOr` * p7</pre> * * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.try, Cal.Utilities.Parser.pOr * </dl> * * @param parser1 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser2 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser3 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser4 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser5 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser6 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param parser7 (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr pOrT7(SourceModel.Expr parser1, SourceModel.Expr parser2, SourceModel.Expr parser3, SourceModel.Expr parser4, SourceModel.Expr parser5, SourceModel.Expr parser6, SourceModel.Expr parser7) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.pOrT7), parser1, parser2, parser3, parser4, parser5, parser6, parser7}); } /** * Name binding for function: pOrT7. * @see #pOrT7(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName pOrT7 = QualifiedName.make(CAL_Parser.MODULE_NAME, "pOrT7"); /** * The parser <code>pReturn x</code> always succeeds with value <code>x</code> without consuming any input. * @param x (CAL type: <code>a</code>) * the value to be returned by the parser. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr pReturn(SourceModel.Expr x) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.pReturn), x}); } /** * Name binding for function: pReturn. * @see #pReturn(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName pReturn = QualifiedName.make(CAL_Parser.MODULE_NAME, "pReturn"); /** * <code>pSeq</code> implements a parser combinator for sequencing. The parser <code>p `pSeq` q</code> * first applies the parser <code>p</code>, then applies the parser <code>q</code>, discarding the value * returned by the first parser. * <p> * The parser <code>p `pSeq` q</code> is an optimized implementation of <code>p `pBind` (\ unused -> q)</code>. * * @param parser (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * the first parser in the sequence. * @param k (CAL type: <code>Cal.Utilities.Parser.GenParser tok st b</code>) * the second parser in the sequence. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st b</code>) * a parser which will apply the two parsers in sequence. */ public static final SourceModel.Expr pSeq(SourceModel.Expr parser, SourceModel.Expr k) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.pSeq), parser, k}); } /** * Name binding for function: pSeq. * @see #pSeq(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName pSeq = QualifiedName.make(CAL_Parser.MODULE_NAME, "pSeq"); /** * The parser <code>pZero</code> always fails without consuming any input. To report an error with a message, * use <code>Cal.Utilities.Parser.pFail</code> instead. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr pZero() { return SourceModel.Expr.Var.make(Functions.pZero); } /** * Name binding for function: pZero. * @see #pZero() */ public static final QualifiedName pZero = QualifiedName.make(CAL_Parser.MODULE_NAME, "pZero"); /** * Same as <code>Cal.Utilities.Parser.parseSeq</code>, but with a list of tokens instead of a token sequence. * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok () a</code>) * @param name (CAL type: <code>Cal.Core.Prelude.String</code>) * @param input (CAL type: <code>[tok]</code>) * @return (CAL type: <code>Cal.Core.Prelude.Either Cal.Utilities.Parser.ParseError a</code>) */ public static final SourceModel.Expr parse(SourceModel.Expr p, SourceModel.Expr name, SourceModel.Expr input) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.parse), p, name, input}); } /** * @see #parse(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) * @param p * @param name * @param input * @return the SourceModel.Expr representing an application of parse */ public static final SourceModel.Expr parse(SourceModel.Expr p, java.lang.String name, SourceModel.Expr input) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.parse), p, SourceModel.Expr.makeStringValue(name), input}); } /** * Name binding for function: parse. * @see #parse(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName parse = QualifiedName.make(CAL_Parser.MODULE_NAME, "parse"); /** * <code>parseSeq p name input</code> runs a parser <code>p</code> without user state. The <code>name</code> * is only used in error messages and may be the empty string. * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.runParser * </dl> * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok () a</code>) * @param name (CAL type: <code>Cal.Core.Prelude.String</code>) * @param input (CAL type: <code>Cal.Utilities.Parser.TokenSequence tok</code>) * @return (CAL type: <code>Cal.Core.Prelude.Either Cal.Utilities.Parser.ParseError a</code>) * either a <code>Cal.Utilities.Parser.ParseError</code> via <code>Cal.Core.Prelude.Left</code>, or a value of type <code>a</code> via <code>Cal.Core.Prelude.Right</code>. */ public static final SourceModel.Expr parseSeq(SourceModel.Expr p, SourceModel.Expr name, SourceModel.Expr input) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.parseSeq), p, name, input}); } /** * @see #parseSeq(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) * @param p * @param name * @param input * @return the SourceModel.Expr representing an application of parseSeq */ public static final SourceModel.Expr parseSeq(SourceModel.Expr p, java.lang.String name, SourceModel.Expr input) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.parseSeq), p, SourceModel.Expr.makeStringValue(name), input}); } /** * Name binding for function: parseSeq. * @see #parseSeq(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName parseSeq = QualifiedName.make(CAL_Parser.MODULE_NAME, "parseSeq"); /** * Same as <code>Cal.Utilities.Parser.parseTestSeq</code>, but with a list of tokens instead of a token sequence. * @param p (CAL type: <code>Cal.Core.Debug.Show a => Cal.Utilities.Parser.GenParser tok () a</code>) * @param input (CAL type: <code>[tok]</code>) * @return (CAL type: <code>Cal.Core.Prelude.String</code>) */ public static final SourceModel.Expr parseTest(SourceModel.Expr p, SourceModel.Expr input) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.parseTest), p, input}); } /** * Name binding for function: parseTest. * @see #parseTest(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName parseTest = QualifiedName.make(CAL_Parser.MODULE_NAME, "parseTest"); /** * <code>parseTestSeq p input</code> applies a parser <code>p</code> against input <code>input</code> * and returns the result as a string. Useful for testing parsers. * @param p (CAL type: <code>Cal.Core.Debug.Show a => Cal.Utilities.Parser.GenParser tok () a</code>) * @param input (CAL type: <code>Cal.Utilities.Parser.TokenSequence tok</code>) * @return (CAL type: <code>Cal.Core.Prelude.String</code>) */ public static final SourceModel.Expr parseTestSeq(SourceModel.Expr p, SourceModel.Expr input) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.parseTestSeq), p, input}); } /** * Name binding for function: parseTestSeq. * @see #parseTestSeq(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName parseTestSeq = QualifiedName.make(CAL_Parser.MODULE_NAME, "parseTestSeq"); /** * Same as <code>Cal.Utilities.Parser.runParserSeq</code>, but with a list of tokens instead of a token sequence. * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param st (CAL type: <code>st</code>) * @param name (CAL type: <code>Cal.Core.Prelude.String</code>) * @param input (CAL type: <code>[tok]</code>) * @return (CAL type: <code>Cal.Core.Prelude.Either Cal.Utilities.Parser.ParseError a</code>) */ public static final SourceModel.Expr runParser(SourceModel.Expr p, SourceModel.Expr st, SourceModel.Expr name, SourceModel.Expr input) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.runParser), p, st, name, input}); } /** * @see #runParser(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) * @param p * @param st * @param name * @param input * @return the SourceModel.Expr representing an application of runParser */ public static final SourceModel.Expr runParser(SourceModel.Expr p, SourceModel.Expr st, java.lang.String name, SourceModel.Expr input) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.runParser), p, st, SourceModel.Expr.makeStringValue(name), input}); } /** * Name binding for function: runParser. * @see #runParser(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName runParser = QualifiedName.make(CAL_Parser.MODULE_NAME, "runParser"); /** * <code>runParserSeq p state name input</code> runs parser <code>p</code> on the input token sequence * <code>input</code>, obtained from source named by <code>name</code> with the initial user state <code>st</code>. * The <code>name</code> is only used in error messages and may be the empty string. * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param st (CAL type: <code>st</code>) * @param name (CAL type: <code>Cal.Core.Prelude.String</code>) * @param input (CAL type: <code>Cal.Utilities.Parser.TokenSequence tok</code>) * @return (CAL type: <code>Cal.Core.Prelude.Either Cal.Utilities.Parser.ParseError a</code>) * either a <code>Cal.Utilities.Parser.ParseError</code> via <code>Cal.Core.Prelude.Left</code>, or a value of type <code>a</code> via <code>Cal.Core.Prelude.Right</code>. */ public static final SourceModel.Expr runParserSeq(SourceModel.Expr p, SourceModel.Expr st, SourceModel.Expr name, SourceModel.Expr input) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.runParserSeq), p, st, name, input}); } /** * @see #runParserSeq(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) * @param p * @param st * @param name * @param input * @return the SourceModel.Expr representing an application of runParserSeq */ public static final SourceModel.Expr runParserSeq(SourceModel.Expr p, SourceModel.Expr st, java.lang.String name, SourceModel.Expr input) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.runParserSeq), p, st, SourceModel.Expr.makeStringValue(name), input}); } /** * Name binding for function: runParserSeq. * @see #runParserSeq(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName runParserSeq = QualifiedName.make(CAL_Parser.MODULE_NAME, "runParserSeq"); /** * The parser <code>satisfy f</code> succeeds for any character for which the supplied predicate * <code>f</code> returns <code>Cal.Core.Prelude.True</code>, and returns the parsed character. * <p> * For example, <code>Cal.Utilities.Parser.oneOf</code> can be defined as: * * <pre> oneOf = satisfy (\c -> Cal.Collections.List.isElem c cs);</pre> * * * @param f (CAL type: <code>Cal.Core.Prelude.Char -> Cal.Core.Prelude.Boolean</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st Cal.Core.Prelude.Char</code>) */ public static final SourceModel.Expr satisfy(SourceModel.Expr f) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.satisfy), f}); } /** * Name binding for function: satisfy. * @see #satisfy(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName satisfy = QualifiedName.make(CAL_Parser.MODULE_NAME, "satisfy"); /** * The parser <code>Cal.Utilities.Parser.sepBy p sep</code> parses <em>zero</em> or more occurrences of <code>p</code>, * separated by <code>sep</code>, and returns a list of the values returned by the applications of <code>p</code>. * <p> * For example: * * <pre> commaSep p = p `Cal.Utilities.Parser.sepBy` Cal.Utilities.Parser.char ',';</pre> * * * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.sepBy1, Cal.Utilities.Parser.endBy, Cal.Utilities.Parser.sepEndBy * </dl> * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param sep (CAL type: <code>Cal.Utilities.Parser.GenParser tok st sep</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st [a]</code>) */ public static final SourceModel.Expr sepBy(SourceModel.Expr p, SourceModel.Expr sep) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.sepBy), p, sep}); } /** * Name binding for function: sepBy. * @see #sepBy(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName sepBy = QualifiedName.make(CAL_Parser.MODULE_NAME, "sepBy"); /** * The parser <code>Cal.Utilities.Parser.sepBy1 p sep</code> parses <em>one</em> or more occurrences of <code>p</code>, * separated by <code>sep</code>, and returns a list of the values returned by the applications of <code>p</code>. * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.sepBy, Cal.Utilities.Parser.endBy1, Cal.Utilities.Parser.sepEndBy1 * </dl> * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param sep (CAL type: <code>Cal.Utilities.Parser.GenParser tok st sep</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st [a]</code>) */ public static final SourceModel.Expr sepBy1(SourceModel.Expr p, SourceModel.Expr sep) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.sepBy1), p, sep}); } /** * Name binding for function: sepBy1. * @see #sepBy1(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName sepBy1 = QualifiedName.make(CAL_Parser.MODULE_NAME, "sepBy1"); /** * The parser <code>Cal.Utilities.Parser.sepEndBy p sep</code> parses <em>zero</em> or more occurrences of <code>p</code>, * separated and <em>optionally</em> ended by <code>sep</code>, and returns a list of values returned by the applications * of <code>p</code>. * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.sepEndBy1, Cal.Utilities.Parser.sepBy, Cal.Utilities.Parser.endBy * </dl> * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param sep (CAL type: <code>Cal.Utilities.Parser.GenParser tok st sep</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st [a]</code>) */ public static final SourceModel.Expr sepEndBy(SourceModel.Expr p, SourceModel.Expr sep) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.sepEndBy), p, sep}); } /** * Name binding for function: sepEndBy. * @see #sepEndBy(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName sepEndBy = QualifiedName.make(CAL_Parser.MODULE_NAME, "sepEndBy"); /** * The parser <code>Cal.Utilities.Parser.sepEndBy1 p sep</code> parses <em>one</em> or more occurrences of <code>p</code>, * separated and <em>optionally</em> ended by <code>sep</code>, and returns a list of values returned by the applications * of <code>p</code>. * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.sepEndBy, Cal.Utilities.Parser.sepBy1, Cal.Utilities.Parser.endBy1 * </dl> * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @param sep (CAL type: <code>Cal.Utilities.Parser.GenParser tok st sep</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st [a]</code>) */ public static final SourceModel.Expr sepEndBy1(SourceModel.Expr p, SourceModel.Expr sep) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.sepEndBy1), p, sep}); } /** * Name binding for function: sepEndBy1. * @see #sepEndBy1(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName sepEndBy1 = QualifiedName.make(CAL_Parser.MODULE_NAME, "sepEndBy1"); /** * The parser <code>Cal.Utilities.Parser.sequence list</code> applies the parsers in <code>list</code> in sequence, and returns * a list containing the values returned by each parser. * @param list (CAL type: <code>[Cal.Utilities.Parser.GenParser tok st a]</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st [a]</code>) */ public static final SourceModel.Expr sequence(SourceModel.Expr list) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.sequence), list}); } /** * Name binding for function: sequence. * @see #sequence(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName sequence = QualifiedName.make(CAL_Parser.MODULE_NAME, "sequence"); /** * Sets the error message of the given <code>Cal.Utilities.Parser.ParseError</code>. * @param msg (CAL type: <code>Cal.Utilities.Parser.Message</code>) * @param parser (CAL type: <code>Cal.Utilities.Parser.ParseError</code>) * @return (CAL type: <code>Cal.Utilities.Parser.ParseError</code>) */ public static final SourceModel.Expr setErrorMessage(SourceModel.Expr msg, SourceModel.Expr parser) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.setErrorMessage), msg, parser}); } /** * Name binding for function: setErrorMessage. * @see #setErrorMessage(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName setErrorMessage = QualifiedName.make(CAL_Parser.MODULE_NAME, "setErrorMessage"); /** * Sets the source position of the given <code>Cal.Utilities.Parser.ParseError</code>. * @param pos (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) * @param parser (CAL type: <code>Cal.Utilities.Parser.ParseError</code>) * @return (CAL type: <code>Cal.Utilities.Parser.ParseError</code>) */ public static final SourceModel.Expr setErrorPos(SourceModel.Expr pos, SourceModel.Expr parser) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.setErrorPos), pos, parser}); } /** * Name binding for function: setErrorPos. * @see #setErrorPos(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName setErrorPos = QualifiedName.make(CAL_Parser.MODULE_NAME, "setErrorPos"); /** * Same as <code>Cal.Utilities.Parser.setInputSeq</code>, but with a list of tokens instead of a token sequence. * @param input (CAL type: <code>[tok]</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st ()</code>) */ public static final SourceModel.Expr setInput(SourceModel.Expr input) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.setInput), input}); } /** * Name binding for function: setInput. * @see #setInput(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName setInput = QualifiedName.make(CAL_Parser.MODULE_NAME, "setInput"); /** * The parser <code>setInput input</code> continues parsing with <code>input</code>. An example use for the * <code>Cal.Utilities.Parser.getInput</code> and <code>setInput</code> functions is to deal with <em>include files</em>. * @param input (CAL type: <code>Cal.Utilities.Parser.TokenSequence tok</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st ()</code>) */ public static final SourceModel.Expr setInputSeq(SourceModel.Expr input) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.setInputSeq), input}); } /** * Name binding for function: setInputSeq. * @see #setInputSeq(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName setInputSeq = QualifiedName.make(CAL_Parser.MODULE_NAME, "setInputSeq"); /** * The parser <code>setParserState st</code> sets the parser's state to <code>st</code>. * @param st (CAL type: <code>Cal.Utilities.Parser.State tok st</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st (Cal.Utilities.Parser.State tok st)</code>) */ public static final SourceModel.Expr setParserState(SourceModel.Expr st) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.setParserState), st}); } /** * Name binding for function: setParserState. * @see #setParserState(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName setParserState = QualifiedName.make(CAL_Parser.MODULE_NAME, "setParserState"); /** * The parser <code>setPosition pos</code> sets the current source position to <code>pos</code>. * @param pos (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st ()</code>) */ public static final SourceModel.Expr setPosition(SourceModel.Expr pos) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.setPosition), pos}); } /** * Name binding for function: setPosition. * @see #setPosition(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName setPosition = QualifiedName.make(CAL_Parser.MODULE_NAME, "setPosition"); /** * Sets the column number of a source position to the given value. * @param sp (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) * @param n (CAL type: <code>Cal.Core.Prelude.Int</code>) * @return (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) */ public static final SourceModel.Expr setSourceColumn(SourceModel.Expr sp, SourceModel.Expr n) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.setSourceColumn), sp, n}); } /** * @see #setSourceColumn(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) * @param sp * @param n * @return the SourceModel.Expr representing an application of setSourceColumn */ public static final SourceModel.Expr setSourceColumn(SourceModel.Expr sp, int n) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.setSourceColumn), sp, SourceModel.Expr.makeIntValue(n)}); } /** * Name binding for function: setSourceColumn. * @see #setSourceColumn(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName setSourceColumn = QualifiedName.make(CAL_Parser.MODULE_NAME, "setSourceColumn"); /** * Sets the line number of a source position to the given value. * @param sp (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) * @param n (CAL type: <code>Cal.Core.Prelude.Int</code>) * @return (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) */ public static final SourceModel.Expr setSourceLine(SourceModel.Expr sp, SourceModel.Expr n) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.setSourceLine), sp, n}); } /** * @see #setSourceLine(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) * @param sp * @param n * @return the SourceModel.Expr representing an application of setSourceLine */ public static final SourceModel.Expr setSourceLine(SourceModel.Expr sp, int n) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.setSourceLine), sp, SourceModel.Expr.makeIntValue(n)}); } /** * Name binding for function: setSourceLine. * @see #setSourceLine(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName setSourceLine = QualifiedName.make(CAL_Parser.MODULE_NAME, "setSourceLine"); /** * Sets the source name of a source position to the given string. * @param sp (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) * @param n (CAL type: <code>Cal.Core.Prelude.String</code>) * @return (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) */ public static final SourceModel.Expr setSourceName(SourceModel.Expr sp, SourceModel.Expr n) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.setSourceName), sp, n}); } /** * @see #setSourceName(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) * @param sp * @param n * @return the SourceModel.Expr representing an application of setSourceName */ public static final SourceModel.Expr setSourceName(SourceModel.Expr sp, java.lang.String n) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.setSourceName), sp, SourceModel.Expr.makeStringValue(n)}); } /** * Name binding for function: setSourceName. * @see #setSourceName(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName setSourceName = QualifiedName.make(CAL_Parser.MODULE_NAME, "setSourceName"); /** * The parser <code>setState st</code> sets the user state to <code>st</code>. * @param st (CAL type: <code>st</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st ()</code>) */ public static final SourceModel.Expr setState(SourceModel.Expr st) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.setState), st}); } /** * Name binding for function: setState. * @see #setState(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName setState = QualifiedName.make(CAL_Parser.MODULE_NAME, "setState"); /** * The standard function for showing error messages. Formats a list of error messages with * the given set of keywords in the desired language. * @param msgOr (CAL type: <code>Cal.Core.Prelude.String</code>) * the string in the desired language equivalent to the English string "or". * @param msgUnknown (CAL type: <code>Cal.Core.Prelude.String</code>) * the string in the desired language equivalent to the English string "unknown parse error". * @param msgExpecting (CAL type: <code>Cal.Core.Prelude.String</code>) * the string in the desired language equivalent to the English string "expecting". * @param msgUnExpected (CAL type: <code>Cal.Core.Prelude.String</code>) * the string in the desired language equivalent to the English string "unexpected". * @param msgEndOfInput (CAL type: <code>Cal.Core.Prelude.String</code>) * the string in the desired language equivalent to the English string "end of input". * @param msgs (CAL type: <code>[Cal.Utilities.Parser.Message]</code>) * the list of error messages. * @return (CAL type: <code>Cal.Core.Prelude.String</code>) * the error messages formatted as a string. */ public static final SourceModel.Expr showErrorMessages(SourceModel.Expr msgOr, SourceModel.Expr msgUnknown, SourceModel.Expr msgExpecting, SourceModel.Expr msgUnExpected, SourceModel.Expr msgEndOfInput, SourceModel.Expr msgs) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.showErrorMessages), msgOr, msgUnknown, msgExpecting, msgUnExpected, msgEndOfInput, msgs}); } /** * @see #showErrorMessages(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) * @param msgOr * @param msgUnknown * @param msgExpecting * @param msgUnExpected * @param msgEndOfInput * @param msgs * @return the SourceModel.Expr representing an application of showErrorMessages */ public static final SourceModel.Expr showErrorMessages(java.lang.String msgOr, java.lang.String msgUnknown, java.lang.String msgExpecting, java.lang.String msgUnExpected, java.lang.String msgEndOfInput, SourceModel.Expr msgs) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.showErrorMessages), SourceModel.Expr.makeStringValue(msgOr), SourceModel.Expr.makeStringValue(msgUnknown), SourceModel.Expr.makeStringValue(msgExpecting), SourceModel.Expr.makeStringValue(msgUnExpected), SourceModel.Expr.makeStringValue(msgEndOfInput), msgs}); } /** * Name binding for function: showErrorMessages. * @see #showErrorMessages(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName showErrorMessages = QualifiedName.make(CAL_Parser.MODULE_NAME, "showErrorMessages"); /** * Formats the given <code>Cal.Utilities.Parser.ParseError</code> into a string for display. * @param err (CAL type: <code>Cal.Utilities.Parser.ParseError</code>) * @return (CAL type: <code>Cal.Core.Prelude.String</code>) */ public static final SourceModel.Expr showParseError(SourceModel.Expr err) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.showParseError), err}); } /** * Name binding for function: showParseError. * @see #showParseError(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName showParseError = QualifiedName.make(CAL_Parser.MODULE_NAME, "showParseError"); /** * Formats the given <code>Cal.Utilities.Parser.SourcePos</code> into a string for display. * @param sp (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) * @return (CAL type: <code>Cal.Core.Prelude.String</code>) */ public static final SourceModel.Expr showSourcePos(SourceModel.Expr sp) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.showSourcePos), sp}); } /** * Name binding for function: showSourcePos. * @see #showSourcePos(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName showSourcePos = QualifiedName.make(CAL_Parser.MODULE_NAME, "showSourcePos"); /** * The parser <code>Cal.Utilities.Parser.skipMany p</code> applies the parser <code>p</code> <em>zero</em> or more times, but discarding the results * returned by <code>p</code>. In other words, it is a more efficient way of specifying: * * <pre> Cal.Utilities.Parser.many p `pSeq` * pReturn ()</pre> * * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.skipMany1 * </dl> * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st ()</code>) */ public static final SourceModel.Expr skipMany(SourceModel.Expr p) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.skipMany), p}); } /** * Name binding for function: skipMany. * @see #skipMany(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName skipMany = QualifiedName.make(CAL_Parser.MODULE_NAME, "skipMany"); /** * The parser <code>Cal.Utilities.Parser.skipMany1 p</code> applies the parser <code>p</code> <em>one</em> or more times, but discarding the results * returned by <code>p</code>. In other words, it is a more efficient way of specifying: * * <pre> Cal.Utilities.Parser.many1 p `pSeq` * pReturn ()</pre> * * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.skipMany * </dl> * * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st ()</code>) */ public static final SourceModel.Expr skipMany1(SourceModel.Expr p) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.skipMany1), p}); } /** * Name binding for function: skipMany1. * @see #skipMany1(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName skipMany1 = QualifiedName.make(CAL_Parser.MODULE_NAME, "skipMany1"); /** * Extracts the column number from a source position. * @param sp (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) * @return (CAL type: <code>Cal.Core.Prelude.Int</code>) */ public static final SourceModel.Expr sourceColumn(SourceModel.Expr sp) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.sourceColumn), sp}); } /** * Name binding for function: sourceColumn. * @see #sourceColumn(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName sourceColumn = QualifiedName.make(CAL_Parser.MODULE_NAME, "sourceColumn"); /** * Extracts the line number from a source position. * @param sp (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) * @return (CAL type: <code>Cal.Core.Prelude.Int</code>) */ public static final SourceModel.Expr sourceLine(SourceModel.Expr sp) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.sourceLine), sp}); } /** * Name binding for function: sourceLine. * @see #sourceLine(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName sourceLine = QualifiedName.make(CAL_Parser.MODULE_NAME, "sourceLine"); /** * Extracts the name of the source from a source position. * @param sp (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) * @return (CAL type: <code>Cal.Core.Prelude.String</code>) */ public static final SourceModel.Expr sourceName(SourceModel.Expr sp) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.sourceName), sp}); } /** * Name binding for function: sourceName. * @see #sourceName(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName sourceName = QualifiedName.make(CAL_Parser.MODULE_NAME, "sourceName"); /** * A parser that parses a whitespace character (according to <code>Cal.Core.Char.isWhitespace</code>), and returns the * parsed character. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st Cal.Core.Prelude.Char</code>) */ public static final SourceModel.Expr space() { return SourceModel.Expr.Var.make(Functions.space); } /** * Name binding for function: space. * @see #space() */ public static final QualifiedName space = QualifiedName.make(CAL_Parser.MODULE_NAME, "space"); /** * A parser that parses <em>zero</em> or more whitespace characters and discards the result. * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.skipMany, Cal.Utilities.Parser.space, Cal.Utilities.Parser.spaces1 * </dl> * * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st ()</code>) */ public static final SourceModel.Expr spaces() { return SourceModel.Expr.Var.make(Functions.spaces); } /** * Name binding for function: spaces. * @see #spaces() */ public static final QualifiedName spaces = QualifiedName.make(CAL_Parser.MODULE_NAME, "spaces"); /** * A parser that parses <em>one</em> or more whitespace characters and discards the result. * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.skipMany1, Cal.Utilities.Parser.space, Cal.Utilities.Parser.spaces * </dl> * * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st ()</code>) */ public static final SourceModel.Expr spaces1() { return SourceModel.Expr.Var.make(Functions.spaces1); } /** * Name binding for function: spaces1. * @see #spaces1() */ public static final QualifiedName spaces1 = QualifiedName.make(CAL_Parser.MODULE_NAME, "spaces1"); /** * A parser that parses a tab character (<code>'\t'</code>), and returns the parsed character. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st Cal.Core.Prelude.Char</code>) */ public static final SourceModel.Expr tab() { return SourceModel.Expr.Var.make(Functions.tab); } /** * Name binding for function: tab. * @see #tab() */ public static final QualifiedName tab = QualifiedName.make(CAL_Parser.MODULE_NAME, "tab"); /** * The parser <code>token showTok posFromTok testTok</code> accepts a token <code>t</code> with * result <code>x</code> when the function <code>testTok t</code> returns <code>Cal.Core.Prelude.Just x</code>. * The source position of <code>t</code> should be returned by <code>posFromTok t</code> and the token can be shown * using <code>showTok t</code>. * <p> * This combinator is meant to be used as a building block for defining parsers that work on user-defined token streams. * * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.tokenPrim, Cal.Utilities.Parser.tokenPrimEx, Cal.Utilities.Parser.tokenSatisfy * </dl> * * @param show (CAL type: <code>tok -> Cal.Core.Prelude.String</code>) * @param tokpos (CAL type: <code>tok -> Cal.Utilities.Parser.SourcePos</code>) * @param test (CAL type: <code>tok -> Cal.Core.Prelude.Maybe a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr token(SourceModel.Expr show, SourceModel.Expr tokpos, SourceModel.Expr test) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.token), show, tokpos, test}); } /** * Name binding for function: token. * @see #token(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName token = QualifiedName.make(CAL_Parser.MODULE_NAME, "token"); /** * Same as <code>Cal.Utilities.Parser.tokenPrimSeq</code>, but with a list of tokens instead of a token sequence. * @param show (CAL type: <code>tok -> Cal.Core.Prelude.String</code>) * @param nextpos (CAL type: <code>Cal.Utilities.Parser.SourcePos -> tok -> [tok] -> Cal.Utilities.Parser.SourcePos</code>) * @param test (CAL type: <code>tok -> Cal.Core.Prelude.Maybe a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr tokenPrim(SourceModel.Expr show, SourceModel.Expr nextpos, SourceModel.Expr test) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.tokenPrim), show, nextpos, test}); } /** * Name binding for function: tokenPrim. * @see #tokenPrim(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName tokenPrim = QualifiedName.make(CAL_Parser.MODULE_NAME, "tokenPrim"); /** * Same as <code>Cal.Utilities.Parser.tokenPrimExSeq</code>, but with a list of tokens instead of a token sequence. * @param show (CAL type: <code>tok -> Cal.Core.Prelude.String</code>) * @param nextpos (CAL type: <code>Cal.Utilities.Parser.SourcePos -> tok -> [tok] -> Cal.Utilities.Parser.SourcePos</code>) * @param mbNextState (CAL type: <code>Cal.Core.Prelude.Maybe (Cal.Utilities.Parser.SourcePos -> tok -> [tok] -> st -> st)</code>) * @param test (CAL type: <code>tok -> Cal.Core.Prelude.Maybe a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr tokenPrimEx(SourceModel.Expr show, SourceModel.Expr nextpos, SourceModel.Expr mbNextState, SourceModel.Expr test) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.tokenPrimEx), show, nextpos, mbNextState, test}); } /** * Name binding for function: tokenPrimEx. * @see #tokenPrimEx(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName tokenPrimEx = QualifiedName.make(CAL_Parser.MODULE_NAME, "tokenPrimEx"); /** * The parser <code>tokenPrimEx show nextpos mbnextstate test</code>, recognises tokens when <code>test</code> returns * <code>Cal.Core.Prelude.Just x</code> (and returns the value <code>x</code>). Tokens are shown in error messages using <code>show</code>. * The position is calculated using <code>nextpos</code>, and finally, <code>mbnextstate</code>, can hold a function that updates * the user state on every token recognised (e.g. for counting tokens). * <p> * The <code>mbNextState</code> function is packed into a <code>Cal.Core.Prelude.Maybe</code> type for performance reasons. * <p> * This is the most primitive combinator for accepting tokens, and is meant to be used as a building block for * defining parsers that work on user-defined token streams. * * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.token, Cal.Utilities.Parser.tokenPrimSeq, Cal.Utilities.Parser.tokenSatisfy * </dl> * * @param show (CAL type: <code>tok -> Cal.Core.Prelude.String</code>) * @param nextpos (CAL type: <code>Cal.Utilities.Parser.SourcePos -> tok -> Cal.Utilities.Parser.TokenSequence tok -> Cal.Utilities.Parser.SourcePos</code>) * @param mbNextState (CAL type: <code>Cal.Core.Prelude.Maybe (Cal.Utilities.Parser.SourcePos -> tok -> Cal.Utilities.Parser.TokenSequence tok -> st -> st)</code>) * @param test (CAL type: <code>tok -> Cal.Core.Prelude.Maybe a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr tokenPrimExSeq(SourceModel.Expr show, SourceModel.Expr nextpos, SourceModel.Expr mbNextState, SourceModel.Expr test) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.tokenPrimExSeq), show, nextpos, mbNextState, test}); } /** * Name binding for function: tokenPrimExSeq. * @see #tokenPrimExSeq(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName tokenPrimExSeq = QualifiedName.make(CAL_Parser.MODULE_NAME, "tokenPrimExSeq"); /** * The parser <code>tokenPrim showTok nextPos testTok</code> accepts a token <code>t</code> with result * <code>x</code> when the function <code>testTok t</code> returns <code>Cal.Core.Prelude.Just x</code>. The token can * be shown using <code>showTok t</code>. The position of the <em>next</em> token should be returned when * <code>nextPos</code> is called with the current source position <code>pos</code>, the current token <code>t</code> * and the rest of the token <code>toks</code>, i.e. <code>(nextPos pos t toks)</code>. * <p> * This is one of the most primitive combinators for accepting tokens, and is meant to be used as a building block for * defining parsers that work on user-defined token streams. * <p> * For example, the <code>Cal.Utilities.Parser.char</code> parser could be implemented as: * * <pre> char :: Char -> GenParser Char st Char * char c = * let * showChar x = "'" ++ x ++ "'"; * testChar x = if (x == c) then Just x else Nothing; * nextPos pos x xs = Cal.Utilities.Parser.updatePosChar pos x; * in * tokenPrim showChar nextPos testChar;</pre> * * * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.token, Cal.Utilities.Parser.tokenPrimEx, Cal.Utilities.Parser.tokenSatisfy * </dl> * * @param show (CAL type: <code>tok -> Cal.Core.Prelude.String</code>) * @param nextpos (CAL type: <code>Cal.Utilities.Parser.SourcePos -> tok -> Cal.Utilities.Parser.TokenSequence tok -> Cal.Utilities.Parser.SourcePos</code>) * @param test (CAL type: <code>tok -> Cal.Core.Prelude.Maybe a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr tokenPrimSeq(SourceModel.Expr show, SourceModel.Expr nextpos, SourceModel.Expr test) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.tokenPrimSeq), show, nextpos, test}); } /** * Name binding for function: tokenPrimSeq. * @see #tokenPrimSeq(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName tokenPrimSeq = QualifiedName.make(CAL_Parser.MODULE_NAME, "tokenPrimSeq"); /** * Same as <code>Cal.Utilities.Parser.tokenSatisfySeq</code>, but with a list of tokens instead of a token sequence. * @param show (CAL type: <code>tok -> Cal.Core.Prelude.String</code>) * @param nextpos (CAL type: <code>Cal.Utilities.Parser.SourcePos -> tok -> [tok] -> Cal.Utilities.Parser.SourcePos</code>) * @param f (CAL type: <code>tok -> Cal.Core.Prelude.Boolean</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st tok</code>) */ public static final SourceModel.Expr tokenSatisfy(SourceModel.Expr show, SourceModel.Expr nextpos, SourceModel.Expr f) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.tokenSatisfy), show, nextpos, f}); } /** * Name binding for function: tokenSatisfy. * @see #tokenSatisfy(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName tokenSatisfy = QualifiedName.make(CAL_Parser.MODULE_NAME, "tokenSatisfy"); /** * The parser <code>tokenSatisfy showTok nextPos f</code> accepts and returns token <code>t</code> when the function * <code>f t</code> returns <code>Cal.Core.Prelude.True</code>. The token can be shown using <code>showTok t</code>. The position of the * <em>next</em> token should be returned when <code>nextPos</code> is called with the current source position * <code>pos</code>, the current token <code>t</code> and the rest of the token <code>toks</code>, i.e. <code>(nextPos pos t toks)</code>. * <p> * <strong>Note:</strong> this parser combinator has slightly different error reporting semantics when compared to this * alternate implementation: * * <pre> tokenSat showTok nextPos f = tokenPrim showTok nextPos (\x -> if (f x) then Just x else Nothing); * </pre> * * in that the position reported for an unexpected token is the position where the token is found, and not * the starting position of the parser before the rule is applied. * * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.token, Cal.Utilities.Parser.tokenPrim, Cal.Utilities.Parser.tokenPrimEx * </dl> * * @param show (CAL type: <code>tok -> Cal.Core.Prelude.String</code>) * @param nextpos (CAL type: <code>Cal.Utilities.Parser.SourcePos -> tok -> Cal.Utilities.Parser.TokenSequence tok -> Cal.Utilities.Parser.SourcePos</code>) * @param f (CAL type: <code>tok -> Cal.Core.Prelude.Boolean</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st tok</code>) */ public static final SourceModel.Expr tokenSatisfySeq(SourceModel.Expr show, SourceModel.Expr nextpos, SourceModel.Expr f) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.tokenSatisfySeq), show, nextpos, f}); } /** * Name binding for function: tokenSatisfySeq. * @see #tokenSatisfySeq(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName tokenSatisfySeq = QualifiedName.make(CAL_Parser.MODULE_NAME, "tokenSatisfySeq"); /** * Converts a token sequence to a list of tokens. * @param tokseq (CAL type: <code>Cal.Utilities.Parser.TokenSequence tok</code>) * the token sequence to convert. * @return (CAL type: <code>[tok]</code>) * a list containing the tokens in the sequence. */ public static final SourceModel.Expr tokenSequenceToList(SourceModel.Expr tokseq) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.tokenSequenceToList), tokseq}); } /** * Name binding for function: tokenSequenceToList. * @see #tokenSequenceToList(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName tokenSequenceToList = QualifiedName.make(CAL_Parser.MODULE_NAME, "tokenSequenceToList"); /** * This parser combinator is an optimized implementation of the following specification. * * <pre> tokens shows nextposs s = * let * show c = shows [c]; * nextpos pos c cs = nextposs pos [c]; * testtok x = if (x == c) then Just c else Nothing; * * scan toks = * case toks of * [] -> pReturn s; * c:cs -> (Cal.Utilities.Parser.tokenPrim show nextpos testtok `label` shows s) `pSeq` * (scan cs); * ; * in * scan s;</pre> * * @param shows (CAL type: <code>Cal.Core.Prelude.Eq tok => [tok] -> Cal.Core.Prelude.String</code>) * @param nextposs (CAL type: <code>Cal.Core.Prelude.Eq tok => Cal.Utilities.Parser.SourcePos -> [tok] -> Cal.Utilities.Parser.SourcePos</code>) * @param s (CAL type: <code>Cal.Core.Prelude.Eq tok => [tok]</code>) * @return (CAL type: <code>Cal.Core.Prelude.Eq tok => Cal.Utilities.Parser.GenParser tok st [tok]</code>) */ public static final SourceModel.Expr tokens(SourceModel.Expr shows, SourceModel.Expr nextposs, SourceModel.Expr s) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.tokens), shows, nextposs, s}); } /** * Name binding for function: tokens. * @see #tokens(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName tokens = QualifiedName.make(CAL_Parser.MODULE_NAME, "tokens"); /** * This parser combinator is an optimized implementation of the following specification. * * <pre> tokensCompare shows nextposs compareToken s = * let * show c = shows [c]; * nextpos pos c cs = nextposs pos [c]; * testtok x = if (compareToken x c) then Just c else Nothing; * * scan toks = * case toks of * [] -> pReturn s; * c:cs -> (Cal.Utilities.Parser.tokenPrim show nextpos testtok `label` shows s) `pSeq` * (scan cs); * ; * in * scan s;</pre> * * @param shows (CAL type: <code>[tok] -> Cal.Core.Prelude.String</code>) * @param nextposs (CAL type: <code>Cal.Utilities.Parser.SourcePos -> [tok] -> Cal.Utilities.Parser.SourcePos</code>) * @param compareToken (CAL type: <code>tok -> tok -> Cal.Core.Prelude.Boolean</code>) * @param s (CAL type: <code>[tok]</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st [tok]</code>) */ public static final SourceModel.Expr tokensCompare(SourceModel.Expr shows, SourceModel.Expr nextposs, SourceModel.Expr compareToken, SourceModel.Expr s) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.tokensCompare), shows, nextposs, compareToken, s}); } /** * Name binding for function: tokensCompare. * @see #tokensCompare(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName tokensCompare = QualifiedName.make(CAL_Parser.MODULE_NAME, "tokensCompare"); /** * The parser <code>translateState inputFn outputFn parser</code> updates the user state by * applying the first function <code>inputFn</code> to it, applies the parser <code>p</code>, * updates the user state by applying the second function <code>outputFn</code> to the original * state and the new state, then returns the value returned by <code>p</code>. In other words, * it is equivalent to the following (which does not type-check successfully because of * the mismatched state types): * <p> * * <pre> Cal.Utilities.Parser.getState `pBind` (\stateBefore -> * Cal.Utilities.Parser.setState (inputFn stateBefore) `pSeq` * p `pBind` (\x -> * Cal.Utilities.Parser.getState `pBind` (\stateAfter -> * Cal.Utilities.Parser.setState (outputFn stateBefore stateAfter) `pSeq` * Cal.Utilities.Parser.pReturn x)))</pre> * * <p> * This is the most primitive combinator for combining parsers with different user state types. * One common approach is to ignore the outer state and pass a fixed initial state "s" to the * wrapped parser "p", and then to ignore the inner state and reset the outer state afterwards, * effectively allowing the outer state to "pass through" the wrapped parser: * <p> * * <pre> Cal.Utilities.Parser.translateState (Cal.Core.Prelude.const s) Cal.Core.Prelude.const p</pre> * * <p> * Alternatively, two complimentary functions "f" and "g" can be used to map the user state * from one type to another and then back again, ignoring the original state when mapping back: * <p> * * <pre> Cal.Utilities.Parser.translateState f (Cal.Core.Prelude.const g) p</pre> * * * @param inputFn (CAL type: <code>a -> b</code>) * @param outputFn (CAL type: <code>a -> b -> a</code>) * @param p (CAL type: <code>Cal.Utilities.Parser.GenParser tok b c</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok a c</code>) */ public static final SourceModel.Expr translateState(SourceModel.Expr inputFn, SourceModel.Expr outputFn, SourceModel.Expr p) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.translateState), inputFn, outputFn, p}); } /** * Name binding for function: translateState. * @see #translateState(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName translateState = QualifiedName.make(CAL_Parser.MODULE_NAME, "translateState"); /** * The parser <code>try p</code> behaves like the parser <code>p</code>, except that it pretends that * it has not consumed any input when an error occurs. * <p> * This combinator can be used whenever arbitrary lookahead is needed. A typical usage pattern * is <code>(try parser1) `pOr` parser2</code>, although in practice it is more efficient to use the equivalent * optimized form <code>parser1 `Cal.Utilities.Parser.pOrT` parser2</code>. * <p> * In the above example, if <code>parser1</code> fails, <code>(try parser1)</code> pretends that it has not consumed * any input, and the <code>Cal.Utilities.Parser.pOr</code> combinator will then try <code>parser2</code>. * * * <dl><dt><b>See Also:</b> * <dd><b>Functions and Class Methods:</b> Cal.Utilities.Parser.pOrT * </dl> * * @param parser (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr try_(SourceModel.Expr parser) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.try_), parser}); } /** * Name binding for function: try. * @see #try_(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName try_ = QualifiedName.make(CAL_Parser.MODULE_NAME, "try"); /** * The parser <code>unexpected msg</code> always fails with an <em>unexpected</em> error message * <code>msg</code> without consuming any input. * <p> * The functions <code>Cal.Utilities.Parser.pFail</code>, <code>Cal.Utilities.Parser.label</code> and <code>unexpected</code> are the three parser * combinators used for generating error messages. Of these, <code>Cal.Utilities.Parser.label</code> is the one * that is most commonly applicable. * * @param msg (CAL type: <code>Cal.Core.Prelude.String</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st a</code>) */ public static final SourceModel.Expr unexpected(SourceModel.Expr msg) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.unexpected), msg}); } /** * @see #unexpected(org.openquark.cal.compiler.SourceModel.Expr) * @param msg * @return the SourceModel.Expr representing an application of unexpected */ public static final SourceModel.Expr unexpected(java.lang.String msg) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.unexpected), SourceModel.Expr.makeStringValue(msg)}); } /** * Name binding for function: unexpected. * @see #unexpected(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName unexpected = QualifiedName.make(CAL_Parser.MODULE_NAME, "unexpected"); /** * Updates the source position given a character. * <ul> * <li> * If the character is a newline (<code>'\n'</code>) the line number is incremented by 1. * (Note <code>'\r'</code> and <code>"\r\n"</code> are not recognized as newlines.) * </li> * <li> * If the character is a tab (<code>'\t'</code>) the column number is incremented to the next nearest * multiple of 8, i.e. <code>(column + 8 - ((column-1) `mod` 8))</code>. * </li> * <li> * In all other cases, the column is incremented by 1. * * </li> * </ul> * * @param pos (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) * @param c (CAL type: <code>Cal.Core.Prelude.Char</code>) * @return (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) */ public static final SourceModel.Expr updatePosChar(SourceModel.Expr pos, SourceModel.Expr c) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.updatePosChar), pos, c}); } /** * @see #updatePosChar(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) * @param pos * @param c * @return the SourceModel.Expr representing an application of updatePosChar */ public static final SourceModel.Expr updatePosChar(SourceModel.Expr pos, char c) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.updatePosChar), pos, SourceModel.Expr.makeCharValue(c)}); } /** * Name binding for function: updatePosChar. * @see #updatePosChar(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName updatePosChar = QualifiedName.make(CAL_Parser.MODULE_NAME, "updatePosChar"); /** * The expression <code>updatePosString pos s</code> updates the source position <code>pos</code> * by calling <code>Cal.Utilities.Parser.updatePosChar</code> on every character in <code>s</code>. * @param pos (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) * @param aString (CAL type: <code>[Cal.Core.Prelude.Char]</code>) * @return (CAL type: <code>Cal.Utilities.Parser.SourcePos</code>) */ public static final SourceModel.Expr updatePosString(SourceModel.Expr pos, SourceModel.Expr aString) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.updatePosString), pos, aString}); } /** * Name binding for function: updatePosString. * @see #updatePosString(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName updatePosString = QualifiedName.make(CAL_Parser.MODULE_NAME, "updatePosString"); /** * The parser <code>updateState f</code> updates the user state by applying the update function <code>f</code> * on it. In other words, it is equivalent to: * * <pre> Cal.Utilities.Parser.getState `pBind` (\st -> * Cal.Utilities.Parser.setState (f st))</pre> * * @param f (CAL type: <code>st -> st</code>) * @return (CAL type: <code>Cal.Utilities.Parser.GenParser tok st ()</code>) */ public static final SourceModel.Expr updateState(SourceModel.Expr f) { return SourceModel.Expr.Application.make( new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.updateState), f}); } /** * Name binding for function: updateState. * @see #updateState(org.openquark.cal.compiler.SourceModel.Expr) */ public static final QualifiedName updateState = QualifiedName.make(CAL_Parser.MODULE_NAME, "updateState"); /** * A parser that parses an uppercase letter (according to <code>Cal.Core.Char.isUpperCase</code>) and returns the parsed character. * @return (CAL type: <code>Cal.Utilities.Parser.GenParser Cal.Core.Prelude.Char st Cal.Core.Prelude.Char</code>) */ public static final SourceModel.Expr upper() { return SourceModel.Expr.Var.make(Functions.upper); } /** * Name binding for function: upper. * @see #upper() */ public static final QualifiedName upper = QualifiedName.make(CAL_Parser.MODULE_NAME, "upper"); } /** * A hash of the concatenated JavaDoc for this class (including inner classes). * This value is used when checking for changes to generated binding classes. */ public static final int javaDocHash = 308789783; }