Enhanced C#
Language of your choice: library documentation
|
This class's main job is to maintain a table of Precedence values for LES operators. When you ask about a new operator, its precedence is chosen by this class and cached for future reference. More...
This class's main job is to maintain a table of Precedence values for LES operators. When you ask about a new operator, its precedence is chosen by this class and cached for future reference.
Properties | |
static Les2PrecedenceMap?? | Default [get] |
Pair< MMap< object, Precedence >, Precedence > | this[OperatorShape s] [get, set] |
Public Member Functions | |
virtual void | Reset () |
Forgets previously encountered operators to save memory. More... | |
Precedence | Find (OperatorShape shape, object op, bool cacheWordOp=true) |
Gets the precedence in LES of a prefix, suffix, or infix operator. More... | |
Symbol | ToSuffixOpName (object symbol) |
Given a normal operator symbol like (Symbol)"'++" , gets the suffix form of the name, such as (Symbol)"'suf++" . More... | |
Static Public Member Functions | |
static bool | IsOpChar (char c) |
Returns true if this character is one of those that operators are normally made out of in LES. More... | |
static bool | IsOpCharEx (char c) |
Returns true if this character is one of those that can appear in "extended" LESv3 operators that start with an apostrophe. More... | |
static bool | IsNaturalOperator (UString name) |
Returns true if the given Symbol can be printed as an operator without escaping it in LESv2. More... | |
static bool | IsNaturalOperatorToken (UString name) |
Like IsNaturalOperator, but doesn't expect name[0] is apostrophe. More... | |
static bool | IsExtendedOperatorToken (UString name) |
Returns true if the given Symbol can ever be used as an "extended" binary operator in LESv3. More... | |
static bool | ResemblesSuffixOperator (Symbol name, out Symbol bareName) |
Decides whether the name resembles a suffix operator. More... | |
Protected Member Functions | |
Precedence | FindPrecedence (MMap< object, Precedence > table, object symbol, Precedence @default, bool cacheWordOp) |
Protected fields | |
Pair< MMap< object, Precedence >, Precedence >[] | _precedenceMap = new Pair<MMap<object, Precedence>, Precedence>[4] |
Protected static fields | |
static Les2PrecedenceMap | _default |
static readonly Map< object, Precedence > | PredefinedPrefixPrecedence |
static readonly Map< object, Precedence > | PredefinedSuffixPrecedence |
static readonly Map< object, Precedence > | PredefinedInfixPrecedence |
|
inline |
Gets the precedence in LES of a prefix, suffix, or infix operator.
shape | Specifies which precedence table and rules to use (Prefix, Suffix or Infix). Note: when this is Suffix, "_" is not expected to be part of the name in op , i.e. op should be a Symbol like "'++" rather than "'_++" (see also ResemblesSuffixOperator) |
op | Parsed form of the operator. op must be a Symbol, but the parameter has type object to avoid casting Token.Value in the parser. |
|
inlinestatic |
Returns true if the given Symbol can ever be used as an "extended" binary operator in LESv3.
A binary operator's length must be between 2 and 255, its name must start with an apostrophe, and each remaining character must be punctuation marks from natural operators and/or characters from the set {'#', '_', 'a'..'z', 'A'..'Z', '0'..'9', '$'}.
|
inlinestatic |
Returns true if the given Symbol can be printed as an operator without escaping it in LESv2.
The parser should read something like +/*
as an operator with three characters, rather than "+" and a comment, but the printer is more conservative, so this function returns false in such a case.
References Loyc.Syntax.Les.Les2PrecedenceMap.IsNaturalOperatorToken(), Loyc.UString.Length, and Loyc.UString.Slice().
|
inlinestatic |
Like IsNaturalOperator, but doesn't expect name[0] is apostrophe.
References Loyc.UString.Length, and Loyc.UString.Slice().
Referenced by Loyc.Syntax.Les.Les2PrecedenceMap.IsNaturalOperator().
|
inlinestatic |
Returns true if this character is one of those that operators are normally made out of in LES.
|
inlinestatic |
Returns true if this character is one of those that can appear in "extended" LESv3 operators that start with an apostrophe.
|
inlinestatic |
Decides whether the name resembles a suffix operator.
name | Potential operator name to evaluate. |
bareName | If the name begins with "'suf", this is the same name with "suf" removed, otherwise it is set to name itself. This output is calculated even if the function returns false. |
This method doesn't verify that the operator IS a legal suffix operator, just that it has the form of one.
References Loyc.Symbol.Name.
|
inlinevirtual |
Forgets previously encountered operators to save memory.
Reimplemented in Loyc.Syntax.Les.Les3PrecedenceMap.
|
inline |
|
staticprotected |
|
staticprotected |