public void Interpret_GivenValidRuleDefinition_ReturnsCorrectResult() { var lexer = new DefaultLexer(); const string queryText = "ensure holding.Nav is within 10 of fund.Nav"; var tokens = lexer.Lex(queryText).ToList(); var parser = new DefaultParser(); var ruleDefinition = parser.Parse(tokens); var sut = new DefaultInterpreter(); var ruleFunc = sut.Interpret <Holding, Fund>(ruleDefinition); var holding = new Holding { Nav = 5 }; var fund = new Fund { Nav = 6 }; var actual = ruleFunc(holding, fund); Assert.That(actual, Is.True); }
public void Parse_GivenTargetObjectPropertyOfMethod_ReturnsCorrectResult() { var lexer = new DefaultLexer(); const string queryText = "ensure target.SomeMethod() is within 10 of comparison.SomeProperty"; var tokens = lexer.Lex(queryText).ToList(); var sut = new DefaultParser(); var expected = new RuleDefinition { Id = null, RuleConditions = new List <RuleCondition> { new RuleCondition { ComparisonType = RuleObject.ObjectProperty, ComparisonAttribute = "SomeProperty", ComparisonTypeName = "comparison", LogicalOperator = RuleLogicalOperator.None, Operator = RuleComparatorOperator.Within, Value = "10" } }, TargetAttribute = "SomeMethod", TargetType = RuleObject.ObjectMethod, TargetTypeName = "target" }; var actual = sut.Parse(tokens); Assert.That(actual, Is.EqualTo(expected)); }
static void Main(string[] args) { if (args.Length != 1 || !File.Exists(args[0])) { return; } using (InitializeLLVM()) { RegisterNative(); var session = new Session(); //var machine = new TargetMachine( Triple.HostTriple); //var visitor = new CodeGenVisitor(false, session, machine); //var listener = new CodeGenParserListener(visitor); var visitor = new IlGeneratorVisitor(session); var listener = new IlGeneratorParserListener(visitor); var lexer = new DefaultLexer(File.OpenText(args[0])); var parser = new DefaultParser(lexer, listener, session); MainLoop(lexer, parser); /*machine.EmitToFile(visitor.Module, "output.o", CodeGenFileType.ObjectFile); * if( !visitor.Module.WriteToTextFile( "output.ll", out string msg ) ) * { * Console.Error.WriteLine( msg ); * return; * } * machine.EmitToFile( visitor.Module, "output.s", CodeGenFileType.AssemblySource );*/ } }
public void Parse_GivenValidTokens_ReturnsCorrectResult() { var lexer = new DefaultLexer(); const string queryText = "ensure holding.Nav is within 10 of fund.Nav"; var tokens = lexer.Lex(queryText).ToList(); var sut = new DefaultParser(); var expected = new RuleDefinition { Id = null, RuleConditions = new List <RuleCondition> { new RuleCondition { ComparisonType = RuleObject.ObjectProperty, ComparisonAttribute = "Nav", ComparisonTypeName = "fund", LogicalOperator = RuleLogicalOperator.None, Operator = RuleComparatorOperator.Within, Value = "10" } }, TargetAttribute = "Nav", TargetType = RuleObject.ObjectProperty, TargetTypeName = "holding" }; var actual = sut.Parse(tokens); Assert.That(actual, Is.EqualTo(expected)); }