public void ParseAddressWithOffset() { var t_Rule = new RulePatternRule(new List <IParseRule> { new IdentifierRule(), new PlusOperatorRule(), new NumericalLiteralRule() }); var t_Expression = t_Rule.Match(CreateState( new Token(TokenType.Identifier, "RAM"), new Token(TokenType.Operator, "+"), new Token(TokenType.Literal, "4"))); t_Expression .HasError() .Should() .BeFalse(); var t_Expressions = t_Expression.Value.Expressions; t_Expressions .Should() .HaveCount(3); t_Expressions.ToList()[0].Should() .BeOfType <IdentifierExpression>(); t_Expressions.ToList()[1].Should() .BeOfType <PlusOperatorExpression>(); t_Expressions.ToList()[2].Should() .BeOfType <NumericalLiteralExpression>(); }
public void ParseInvalidAddressWithOffset() { var t_Rule = new RulePatternRule(new List <IParseRule> { new IdentifierRule(), new PlusOperatorRule(), new NumericalLiteralRule() }); var t_Expression = t_Rule.Match(CreateState( new Token(TokenType.Identifier, "RAM"), new Token(TokenType.Operator, ","), new Token(TokenType.Literal, "4"))); t_Expression .HasError() .Should() .BeTrue(); }
public void ParseTrivialMathExpression() { var t_RepeatRule = new RepeatRule(new List <IParseRule> { new MultiAttemptRule(new List <IParseRule> { new OperatorRule("+"), new OperatorRule("-"), new OperatorRule("*"), new OperatorRule("/"), new OperatorRule("^") }), new NumericalLiteralRule() }); var t_PatternRule = new RulePatternRule(new List <IParseRule> { new NumericalLiteralRule(), t_RepeatRule }); var t_Expression = t_PatternRule.Match(CreateState( new Token(TokenType.Literal, "2"), new Token(TokenType.Operator, "+"), new Token(TokenType.Literal, "3"), new Token(TokenType.Operator, "-"), new Token(TokenType.Literal, "4"), new Token(TokenType.Operator, "*"), new Token(TokenType.Literal, "5"), new Token(TokenType.Operator, "/"), new Token(TokenType.Literal, "6"))); t_Expression.HasError().Should().BeFalse(); var t_Expressions = t_Expression.Value.Expressions; t_Expressions.Should().HaveCount(9); }