8#ifndef HPP_ALIB_EXPRESSIONS_EXPRESSIONS
9#define HPP_ALIB_EXPRESSIONS_EXPRESSIONS 1
11#if !defined(HPP_ALIB_CAMP_MESSAGE_EXCEPTION)
17#if !defined(HPP_ALIB_COMPATIBILITY_STD_BOXING_FUNCTIONAL)
21#if !defined(HPP_ALIB_LANG_CAMP)
25#if !defined(HPP_ALIB_ENUMS_ENUM_B)
29namespace alib {
namespace expressions {
virtual void bootstrap(BootstrapPhases phase) override
virtual void shutdown(ShutdownPhases phase) override
#define ALIB_ASSERT_MODULE(modulename)
#define ALIB_ENUMS_MAKE_BITWISE(TEnum)
#define ALIB_ENUMS_ASSIGN_RECORD(TEnum, TRecord)
#define ALIB_BOXING_VTABLE_DECLARE(TMapped, Identifier)
#define ALIB_ENUMS_MAKE_ARITHMETICAL(TEnum)
#define ALIB_RESOURCED_IN_MODULE(T, Camp, ResName)
std::vector< Box >::iterator ArgIterator
@ Positive
'+' operator (usually returns identity value).
@ BitNot
Bitwise not ('~').
@ BoolNot
Boolean not ('!').
@ Negative
'-' operator, negates a value.
DefaultAlphabeticBinaryOperatorAliases
@ Gt
Verbal alias "Gt" to operator '>'.
@ Equals
Verbal alias "Equals" to operator '=='.
@ Sm
Verbal alias "Sm" to operator '<'.
@ Eq
Verbal alias "Eq" to operator '=='.
@ Or
Verbal alias "Or" to boolean or operator '||'.
@ SmEq
Verbal alias "Smeq" to operator '<='.
@ GtEq
Verbal alias "Gteq" to operator '>='.
@ And
Verbal alias "And" to boolean and operator '&&'.
@ NEq
Verbal alias "Neq" to operator '!='.
@ PluginExceptionFallThrough
@ DefaultAlphabeticOperatorAliases
@ AllowCompileTimeNestedExpressions
@ AllowEmptyParenthesesForIdentifierFunctions
@ CaseSensitiveNamedExpressions
@ AllowIdentifiersForNestedExpressions
@ AllowBitwiseBooleanOperators
@ CallbackExceptionFallThrough
@ AlphabeticOperatorsIgnoreCase
@ AliasEqualsOperatorWithAssignOperator
@ AllowOmittingParenthesesOfParameterlessFunctions
@ BitOr
Binary or ('|'). "or"s all bits of two integral values. Precedence 450.
@ SmallerOrEqual
Smaller or equal operator ('<='). Precedence 600.
@ Divide
Arithmetic division ('/'). Precedence 900.
@ NotEqual
Not equal operator ('!='). Precedence 500.
@ Subtract
Arithmetic subtraction ('-'). Precedence 800.
@ BoolAnd
Boolean and ('&&'). Result is boolean. Precedence 440.
@ Modulo
Arithmetic modulo ('%'). Precedence 900.
@ BoolOr
Boolean or ('||'). Result is boolean. Precedence 430.
@ GreaterOrEqual
Greater or equal operator ('>='). Precedence 600.
@ BitXOr
Binary xor ('^'). "xor"s all bits of two integral values. Precedence 460.
@ Greater
Greater operator ('>'). Precedence 600.
@ Subscript
Array subscripting ('[]'). Precedence hardcoded with parser.
@ Smaller
Smaller operator ('<'). Precedence 600.
@ ShiftLeft
Bitwise shifting of integral values ('<<'). Precedence 700.
@ Multiply
Arithmetic multiplication ('*'). Precedence 900.
@ BitAnd
Binary and ('&'). "and"s all bits of two integral values. Precedence 470.
@ Add
Arithmetic addition ('+'). Precedence 800.
@ ShiftRight
Bitwise shifting of integral values ('>>'). Precedence 700.
@ Equal
Equal operator ('=='). Precedence 500.
@ FunctionInnerBracketSpace
@ ConditionalOpSpaceBeforeQM
@ RedundantUnaryOpBrackets
@ QuoteUnaryNestedExpressionOperatorArgument
@ ReplaceVerbalOperatorsToLowerCase
@ FunctionSpaceBeforeOpeningBracket
@ FunctionSpaceBeforeComma
@ UnaryOpSpaceIfUnaryFollows
@ RedundantRhsBracketsIfRhsIsStrongerBinaryOp
@ ConditionalOpSpaceAfterQM
@ UnaryOpSpaceIfBracketFollows
@ ReplaceVerbalOperatorsToDefinedLetterCase
@ FunctionSpaceAfterComma
@ UnaryOpInnerBracketSpace
@ ConditionalOpSpaceBeforeColon
@ SubscriptSpaceBeforeBrackets
@ RedundantBracketsBetweenTwoUnaryOps
@ RedundantBracketsIfLhsAndRhsAreBinaryOps
@ SubscriptInnerBracketSpace
@ FunctionInnerBracketSpaceIfNoArguments
@ RedundantConditionalOpBrackets
@ ReplaceVerbalOperatorsToSymbolic
@ RedundantBinaryOpBrackets
@ RemoveRedundantUnaryOpsOnNumberLiterals
@ ReplaceVerbalOperatorsToUpperCase
@ ConditionalOpSpaceAfterColon
Box(*)(Scope &scope, ArgIterator argsBegin, ArgIterator argsEnd) CallbackDecl
@ NestedExpressionResultTypeError
@ NestedExpressionCallArgumentMismatch
@ CircularNestedExpressions
@ UnaryOperatorNotDefined
@ NamedExpressionNotFound
Compile-time exception thrown when an expression refers to an unknown named nested expression.
@ MissingFunctionParentheses
@ UnknownBinaryOperatorSymbol
@ UnknownUnaryOperatorSymbol
@ IncompatibleTypesInConditional
@ NestedExpressionNotFoundET
@ NamedExpressionNotConstant
@ IdentifierWithFunctionParentheses
@ NestedExpressionNotFoundCT
@ WhenEvaluatingNestedExpression
@ CircularNestedExpressionsInfo
@ BinaryOperatorNotDefined
DefaultAlphabeticUnaryOperatorAliases
@ Not
Verbal alias "Not" to operator '!'.
expressions::Expressions EXPRESSIONS
lox::Scope Scope
Type alias in namespace alib.
boxing::Box Box
Type alias in namespace alib.
ERBinaryOperator() noexcept=default
EROperatorAlias() noexcept=default
void(*)(const Box &constantValue, AString &expressionString) Signature
static ALIB_API Box * SS[2]
Function accepts two string arguments.
static ALIB_API Box * IVar[2]
Function accepts one integral argument, followed by variadic arguments.
static ALIB_API Box * D[1]
Function accepts a DateTime argument.
static ALIB_API Box * DDur[2]
Function accepts a DateTime argument; followed by a Duration .
static ALIB_API Box * B[1]
Function accepts one boolean argument.
static ALIB_API Box * Var[1]
Function accepts variadic arguments.
static ALIB_API Box * SII[3]
Function accepts one string argument, followed by two integral arguments.
static ALIB_API Box * SSI[3]
Function accepts two string arguments, followed by an integral argument.
static ALIB_API Box * II[2]
Function accepts two integral arguments.
static ALIB_API Box * SVar[2]
Function accepts one string argument, followed by variadic arguments.
static ALIB_API Box * BB[2]
Function accepts two boolean arguments.
static ALIB_API Box * SSB[3]
Function accepts two string arguments, followed by a boolean argument.
static ALIB_API Box * SSS[3]
Function accepts three string arguments.
static ALIB_API Box * SI[2]
Function accepts one string argument, followed by an integral argument.
static ALIB_API Box * F[1]
Function accepts one floating point argument.
static ALIB_API Box * Dur[1]
Function accepts a Duration argument.
static ALIB_API Box * S[1]
Function accepts one string argument.
static ALIB_API Box * FF[2]
Function accepts two floating point arguments.
static ALIB_API Box * I[1]
Function accepts one integral argument.
static ALIB_API Box DateTime
static ALIB_API Box Duration
static ALIB_API Box Integer
static ALIB_API Box Boolean
static ALIB_API Box String
static ALIB_API Box Float