Пример #1
0
        public string ToCompareNumberExp(ITerminalNode property, ITerminalNode op, ITerminalNode number)
        {
            var propertyString = property.ToString();

            if (SqlSchemaColumns.Contains(propertyString))
            {
                var valueParam = CreateSqlParameter(number, SqlDbType.Int);
                return($"({property.ToString()} {op} @{valueParam})");
            }
            else
            {
                queryContainsProperty = true;
                throw new NotImplementedException();
            }
        }
Пример #2
0
        protected ObjectDef EmitConstant(ITerminalNode constant)
        {
            ObjectDef returnObjectDef = null;

            if (int.TryParse(constant.ToString(), out _))
            {
                returnObjectDef = EmitInteger(constant);
            }
            else if (double.TryParse(constant.ToString(), out _))
            {
                returnObjectDef = EmitDouble(constant);
            }

            return(returnObjectDef);
        }
Пример #3
0
        protected void EmitFunction(
            CParser.TypeSpecifierContext typeSpecifier,
            ITerminalNode identifier,
            CParser.ParameterTypeListContext parameters,
            CParser.CompoundStatementContext compoundStatement)
        {
            var functionName = identifier.ToString();

            //CurrentArgs_ = Functions_[CurrentTypeBuilder_.Name][functionName].Args;
            _generatorIL = _functions[functionName].MethodBuilder.GetILGenerator();

            LocalObjectDef.InitGenerator(_generatorIL);

            if (compoundStatement.blockItemList() != null)
            {
                var returnObjectDef = EmitCompoundStatement(compoundStatement);

                returnObjectDef.Load();

                if (_functions[functionName].MethodBuilder.ReturnType == typeof(void))
                {
                    _generatorIL.Emit(OpCodes.Pop);
                }

                _generatorIL.Emit(OpCodes.Ret);

                returnObjectDef.Remove();
            }
            else
            {
                _generatorIL.Emit(OpCodes.Ret);
            }
        }
Пример #4
0
        public string ToCompareStringExp(ITerminalNode property, ITerminalNode op, ITerminalNode escapedString)
        {
            var propertyString = property.ToString();
            var valueParam     = CreateSqlParameter(escapedString);

            if (SqlSchemaColumns.Contains(propertyString))
            {
                return($"({property.ToString()} {op} @{valueParam})");
            }
            else
            {
                queryContainsProperty = true;
                throw new NotImplementedException();

                // TODO: SqlParameter, Different Operators
                var propParam = CreateSqlParameter(property);
                return($"(X.exist('//*[@key=\"@{propParam}\" and contains(.,\"@{valueParam}\")]') = 1)");
            }
        }
Пример #5
0
        protected void DefineFunction(
            CParser.TypeSpecifierContext typeSpecifier,
            ITerminalNode identifier,
            CParser.ParameterTypeListContext parameters)
        {
            Type[] inputTypes = Type.EmptyTypes;

            var functionName       = identifier.ToString();
            var functionReturnType = typeSpecifier.RBAType(_moduleBuilder);
            var args = new Dictionary <string, MethodArgDef>
            {
                { "this", new MethodArgDef(_programClass, 0, "this") }
            };

            if (parameters != null)
            {
                //var parametersStack
                //= new Stack<CParser.ExternalDeclarationContext>();

                //parameters.
                //var functionListNode = treeNode.GetChild(3);
                //inputTypes = new Type[functionListNode.ChildCount];
                //for (int k = 0; k < functionListNode.ChildCount; k++)
                //{
                //    inputTypes[k] = GetType(functionListNode.GetChild(k).GetChild(1).Text);
                //    var argName = functionListNode.GetChild(k).GetChild(0).Text;
                //    args.Add(argName, new ArgObjectDef(inputTypes[k], k + 1, argName));
                //}
            }
            else
            {
                inputTypes = Type.EmptyTypes;
            }

            MethodBuilder methodBuilder;

            if (functionName == "main")
            {
                methodBuilder = _programClass.DefineMethod(functionName,
                                                           MethodAttributes.Private | MethodAttributes.Static | MethodAttributes.HideBySig, typeof(void), Type.EmptyTypes);
                methodBuilder.SetCustomAttribute(new CustomAttributeBuilder(
                                                     typeof(STAThreadAttribute).GetConstructor(Type.EmptyTypes), new object[] { }));
                _assemblyBuilder.SetEntryPoint(methodBuilder);
                _entryPoint = methodBuilder;
            }
            else
            {
                methodBuilder = _programClass.DefineMethod(functionName, MethodAttributes.Public | MethodAttributes.HideBySig, functionReturnType, inputTypes);
            }

            _functions.Add(functionName, new MethodDef(functionName, args, methodBuilder));
        }
Пример #6
0
        private int CreateSqlParameter(ITerminalNode item, SqlDbType type = SqlDbType.VarChar)
        {
            var propertyCounter = Command.Parameters.Count;

            var p = new SqlParameter($"@{propertyCounter}", type);

            if (type == SqlDbType.VarChar)
            {
                var trimmedString = item.ToString().Trim('"');
                p.Value = trimmedString;
                p.Size  = trimmedString.Length;
            }
            else
            {
                //Assert Int
                p.Value = int.Parse(item.ToString());
            }

            Command.Parameters.Add(p);

            return(propertyCounter);
        }
        public AntlrRawTreeTerminalNode(ITerminalNode terminalNode)
        {
            var symbol     = terminalNode.Symbol;
            var recognizer = (IRecognizer)symbol?.TokenSource;

            if (recognizer == null)
            {
                DisplayName = terminalNode.ToString();
            }
            else
            {
                DisplayName = symbol.Text;
                TypeName    = recognizer.Vocabulary.GetSymbolicName(symbol.Type);
            }

            Children = null;
        }
Пример #8
0
 public override void VisitTerminal(ITerminalNode node)
 {
     base.VisitTerminal(node);
     Console.WriteLine("term: " + node.ToString());
 }
Пример #9
0
 public override void VisitTerminal(ITerminalNode node)
 {
     base.VisitTerminal(node);
     Console.WriteLine("term: " + node.ToString());
 }
Пример #10
0
 public void Visit(ITerminalNode node)
 {
     VisitLog.Add(node.ToString());
 }