Enhanced C#
Language of your choice: library documentation
Properties | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected fields | Protected static fields | List of all members
Loyc.Syntax.Les.Les2PrecedenceMap Class Reference

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...


Source file:
Inheritance diagram for Loyc.Syntax.Les.Les2PrecedenceMap:
Loyc.Syntax.Les.Les3PrecedenceMap

Remarks

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 >, Precedencethis[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, bool les3InfixOp=false)
 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 (string name)
 Returns true if the given Symbol can be printed as an operator without escaping it in LESv2. More...
 
static bool IsExtendedOperator (string name, string expectPrefix="'")
 Returns true if the given Symbol can ever be used as an "extended" binary operator in LESv3. More...
 
static bool IsSuffixOperatorName (Symbol name, out Symbol bareName)
 Decides whether the name appears to represent a suffix operator of the form sufOP or OP</c>. More...
 

Protected Member Functions

Precedence FindPrecedence (MMap< object, Precedence > table, object symbol, Precedence @default, bool cacheWordOp, bool les3InfixOp=false)
 

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, PrecedencePredefinedPrefixPrecedence
 
static readonly Map< object, PrecedencePredefinedSuffixPrecedence
 
static readonly Map< object, PrecedencePredefinedInfixPrecedence
 

Member Function Documentation

Precedence Loyc.Syntax.Les.Les2PrecedenceMap.Find ( OperatorShape  shape,
object  op,
bool  cacheWordOp = true,
bool  les3InfixOp = false 
)
inline

Gets the precedence in LES of a prefix, suffix, or infix operator.

Parameters
shapeSpecifies which precedence table and rules to use (Prefix, Suffix or Infix). Note: when this is Suffix, "suf" must not be part of the name in op (see IsSuffixOperatorName)
opParsed form of the operator. op must be a Symbol, but the parameter has type object to avoid casting Token.Value in the parser.

Referenced by Loyc.Syntax.Les.Les3Parser.Start().

static bool Loyc.Syntax.Les.Les2PrecedenceMap.IsExtendedOperator ( string  name,
string  expectPrefix = "'" 
)
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', '$'}.

static bool Loyc.Syntax.Les.Les2PrecedenceMap.IsNaturalOperator ( string  name)
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.

static bool Loyc.Syntax.Les.Les2PrecedenceMap.IsOpChar ( char  c)
inlinestatic

Returns true if this character is one of those that operators are normally made out of in LES.

static bool Loyc.Syntax.Les.Les2PrecedenceMap.IsOpCharEx ( char  c)
inlinestatic

Returns true if this character is one of those that can appear in "extended" LESv3 operators that start with an apostrophe.

static bool Loyc.Syntax.Les.Les2PrecedenceMap.IsSuffixOperatorName ( Symbol  name,
out Symbol  bareName 
)
inlinestatic

Decides whether the name appears to represent a suffix operator of the form sufOP or OP</c>.

Parameters
namePotential operator name to evaluate.
bareNameIf the name ends with "suf", this is the same name without "suf", otherwise it is set to name itself. This output is calculated even if the function returns false. IsNaturalOperator(bareName) is true if the function returns true.

References Loyc.Symbol.Name.

virtual void Loyc.Syntax.Les.Les2PrecedenceMap.Reset ( )
inlinevirtual

Forgets previously encountered operators to save memory.

Reimplemented in Loyc.Syntax.Les.Les3PrecedenceMap.

Symbol Loyc.Syntax.Les.Les2PrecedenceMap.ToSuffixOpName ( object  symbol)
inline

Given a normal operator symbol like (Symbol)"'++", gets the suffix form of the name, such as (Symbol)"'++suf".

op must be a Symbol, but the parameter has type object to avoid casting Token.Value in the parser.

Member Data Documentation

readonly Map<object, Precedence> Loyc.Syntax.Les.Les2PrecedenceMap.PredefinedPrefixPrecedence
staticprotected
Initial value:
=
new MMap<object, Precedence>() {
{ S.Substitute, P.Substitute },
{ S.Dot, P.Substitute },
{ S.Colon, P.Substitute },
{ S.NotBits, P.Prefix },
{ S.Not, P.Prefix },
{ S.Mod, P.Prefix },
{ S.XorBits, P.Prefix },
{ S._AddressOf, P.Prefix },
{ S._Dereference,P.Prefix },
{ S._UnaryPlus, P.Prefix },
{ S._Negate, P.Prefix },
{ S.DotDot, P.PrefixDots },
{ S.OrBits, P.PrefixOr },
{ S.Div, P.Prefix },
}.AsImmutable()
readonly Map<object, Precedence> Loyc.Syntax.Les.Les2PrecedenceMap.PredefinedSuffixPrecedence
staticprotected
Initial value:
=
new MMap<object, Precedence>() {
{ S.PreInc, P.Primary },
{ S.PreDec, P.Primary },
{ S.PreBangBang,P.Primary },
}.AsImmutable()