microsoft-visualbasic-runtime/Scripting/TokenIcer/LangModels/OperatorExpression.vb

161 lines
7.1 KiB
VB.net
Raw Normal View History

2019-03-10 18:10:46 +08:00
#Region "Microsoft.VisualBasic::d103e3655be3a47d70ff530b385d5d0d, Microsoft.VisualBasic.Core\Scripting\TokenIcer\LangModels\OperatorExpression.vb"
2018-08-02 20:14:48 +08:00
' Author:
'
' asuka (amethyst.asuka@gcmodeller.org)
' xie (genetics@smrucc.org)
' xieguigang (xie.guigang@live.com)
'
' Copyright (c) 2018 GPL3 Licensed
'
'
' GNU GENERAL PUBLIC LICENSE (GPL3)
'
'
' This program is free software: you can redistribute it and/or modify
' it under the terms of the GNU General Public License as published by
' the Free Software Foundation, either version 3 of the License, or
' (at your option) any later version.
'
' This program is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' GNU General Public License for more details.
'
' You should have received a copy of the GNU General Public License
' along with this program. If not, see <http://www.gnu.org/licenses/>.
' /********************************************************************************/
' Summaries:
' Module OperatorExpression
'
' Properties: Linq2Symbols, opName2Linq
'
' Constructor: (+1 Overloads) Sub New
' Sub: __linq2Symbols, __opName2Linq
'
'
' /********************************************************************************/
#End Region
Imports System.Linq.Expressions
Namespace Scripting.TokenIcer
Public Module OperatorExpression
''' <summary>
''' Linq Type to operator symbols.
''' </summary>
''' <returns></returns>
Public ReadOnly Property Linq2Symbols As New Dictionary(Of ExpressionType, String)
Public ReadOnly Property opName2Linq As New Dictionary(Of String, ExpressionType)
Sub New()
Call __opName2Linq()
Call __linq2Symbols()
End Sub
Const op_LessThan$ = NameOf(op_LessThan)
Const op_GreaterThan$ = NameOf(op_GreaterThan)
Const op_LessThanOrEqual$ = NameOf(op_LessThanOrEqual)
Const op_GreaterThanOrEqual$ = NameOf(op_GreaterThanOrEqual)
Const op_Subtraction$ = NameOf(op_Subtraction)
Const op_Division$ = NameOf(op_Division)
Const op_Implicit$ = NameOf(op_Implicit)
Const op_UnaryPlus$ = NameOf(op_UnaryPlus)
Const op_Addition$ = NameOf(op_Addition)
Const op_LeftShift$ = NameOf(op_LeftShift)
Const op_Equality$ = NameOf(op_Equality)
Const op_Inequality$ = NameOf(op_Inequality)
Const op_Concatenate$ = NameOf(op_Concatenate)
Const op_Multiply$ = NameOf(op_Multiply)
Const op_Exponent$ = NameOf(op_Exponent)
Const op_Modulus$ = NameOf(op_Modulus)
Const op_Like$ = NameOf(op_Like)
Const op_ExclusiveOr$ = NameOf(op_ExclusiveOr)
Const op_BitwiseAnd$ = NameOf(op_BitwiseAnd)
Const op_BitwiseOr$ = NameOf(op_BitwiseOr)
Const op_IntegerDivision$ = NameOf(op_IntegerDivision)
Const op_UnaryNegation$ = NameOf(op_UnaryNegation)
Private Sub __opName2Linq()
With opName2Linq
Call .Add(op_Addition, ExpressionType.Add)
Call .Add(op_BitwiseAnd, ExpressionType.And)
Call .Add(op_BitwiseOr, ExpressionType.Or)
Call .Add(op_Division, ExpressionType.Divide)
Call .Add(op_Equality, ExpressionType.Equal)
Call .Add(op_ExclusiveOr, ExpressionType.ExclusiveOr)
Call .Add(op_Exponent, ExpressionType.Power)
Call .Add(op_GreaterThan, ExpressionType.GreaterThan)
Call .Add(op_GreaterThanOrEqual, ExpressionType.GreaterThanOrEqual)
Call .Add(op_Implicit, ExpressionType.Convert)
Call .Add(op_Inequality, ExpressionType.NotEqual)
Call .Add(op_LeftShift, ExpressionType.LeftShift)
Call .Add(op_LessThan, ExpressionType.LessThan)
Call .Add(op_LessThanOrEqual, ExpressionType.LessThanOrEqual)
Call .Add(op_Modulus, ExpressionType.Modulo)
Call .Add(op_Multiply, ExpressionType.Multiply)
Call .Add(op_Subtraction, ExpressionType.Subtract)
Call .Add(op_UnaryPlus, ExpressionType.UnaryPlus)
Call .Add(op_UnaryNegation, ExpressionType.Negate)
End With
End Sub
Private Sub __linq2Symbols()
With Linq2Symbols
Call .Add(ExpressionType.Add, "+")
Call .Add(ExpressionType.AddAssign, "+=")
Call .Add(ExpressionType.AddAssignChecked, "+=")
Call .Add(ExpressionType.AddChecked, "+")
Call .Add(ExpressionType.And, "And")
Call .Add(ExpressionType.AndAlso, "AndAlso")
Call .Add(ExpressionType.Assign, "=")
Call .Add(ExpressionType.Convert, "CType")
Call .Add(ExpressionType.ConvertChecked, "CType")
Call .Add(ExpressionType.Decrement, "-")
Call .Add(ExpressionType.Divide, "/")
Call .Add(ExpressionType.DivideAssign, "/=")
Call .Add(ExpressionType.Equal, "=")
Call .Add(ExpressionType.ExclusiveOr, "Xor")
Call .Add(ExpressionType.GreaterThan, ">")
Call .Add(ExpressionType.GreaterThanOrEqual, ">=")
Call .Add(ExpressionType.Increment, "+")
Call .Add(ExpressionType.IsFalse, "IsFalse")
Call .Add(ExpressionType.IsTrue, "IsTrue")
Call .Add(ExpressionType.LeftShift, "<<")
Call .Add(ExpressionType.LeftShiftAssign, "<<=")
Call .Add(ExpressionType.LessThan, "<")
Call .Add(ExpressionType.LessThanOrEqual, "<=")
Call .Add(ExpressionType.Modulo, "Mod")
Call .Add(ExpressionType.Multiply, "*")
Call .Add(ExpressionType.MultiplyAssign, "*=")
Call .Add(ExpressionType.MultiplyAssignChecked, "*=")
Call .Add(ExpressionType.MultiplyChecked, "*")
Call .Add(ExpressionType.Negate, "-")
Call .Add(ExpressionType.NegateChecked, "-")
Call .Add(ExpressionType.Not, "Not")
Call .Add(ExpressionType.NotEqual, "<>")
Call .Add(ExpressionType.Or, "Or")
Call .Add(ExpressionType.OrElse, "OrElse")
Call .Add(ExpressionType.Power, "^")
Call .Add(ExpressionType.PowerAssign, "^=")
Call .Add(ExpressionType.RightShift, ">>")
Call .Add(ExpressionType.RightShiftAssign, ">>=")
Call .Add(ExpressionType.Subtract, "-")
Call .Add(ExpressionType.SubtractAssign, "-=")
Call .Add(ExpressionType.SubtractAssignChecked, "-=")
Call .Add(ExpressionType.SubtractChecked, "-")
Call .Add(ExpressionType.TypeAs, "TryCast")
Call .Add(ExpressionType.UnaryPlus, "+")
End With
End Sub
End Module
End Namespace