public void EvaluateAtomExpression() { Atom atom = new Atom("ok"); Context context = new Context(); AtomExpression expression = new AtomExpression(atom); Assert.AreEqual(atom, expression.Evaluate(context)); }
public void CreateSimpleAtomExpression() { Atom atom = new Atom("ok"); AtomExpression expression = new AtomExpression(atom); Assert.AreEqual(atom, expression.Atom); Assert.IsFalse(expression.HasVariable()); }
private IExpression ParseQualifiedCallExpression(IExpression expression) { var nexpression = new AtomExpression(new Atom(this.ParseAtom())); this.ParseToken(TokenType.Separator, "("); var list = this.ParseExpressionList(); this.ParseToken(TokenType.Separator, ")"); return(new QualifiedCallExpression(expression, nexpression, list)); }
public void ParseAtom() { Parser parser = new Parser("ok."); IExpression expression = parser.ParseExpression(); Assert.IsNotNull(expression); Assert.IsInstanceOfType(expression, typeof(AtomExpression)); AtomExpression atomexpression = (AtomExpression)expression; Assert.AreEqual("ok", atomexpression.Atom.Name); Assert.IsNull(parser.ParseExpression()); }
private IExpression ParseTerm() { Token token = this.NextToken(); IExpression expression = null; if (token == null) return null; if (token.Type == TokenType.Variable) { expression = new VariableExpression(new Variable(token.Value)); if (this.TryParseToken(TokenType.Separator, "(")) { var list = this.ParseExpressionList(); this.ParseToken(TokenType.Separator, ")"); expression = new CallExpression(expression, list); } } else if (token.Type == TokenType.Atom) { if (token.Value == "false") return new ConstantExpression(false); if (token.Value == "true") return new ConstantExpression(true); if (token.Value == "fun") return this.ParseFunExpression(); if (token.Value == "receive") return this.ParseReceiveExpression(); expression = new AtomExpression(new Atom(token.Value)); if (this.TryParseToken(TokenType.Separator, "(")) { var list = this.ParseExpressionList(); this.ParseToken(TokenType.Separator, ")"); expression = new CallExpression(expression, list); } else if (this.TryParseToken(TokenType.Separator, ":")) { var nexpression = new AtomExpression(new Atom(this.ParseAtom())); this.ParseToken(TokenType.Separator, "("); var list = this.ParseExpressionList(); this.ParseToken(TokenType.Separator, ")"); expression = new QualifiedCallExpression(expression, nexpression, list); } } else if (token.Type == TokenType.Integer) expression = new ConstantExpression(int.Parse(token.Value, CultureInfo.InvariantCulture)); else if (token.Type == TokenType.Real) expression = new ConstantExpression(double.Parse(token.Value, CultureInfo.InvariantCulture)); else if (token.Type == TokenType.String) expression = new ConstantExpression(token.Value); else if (token.Type == TokenType.Separator && token.Value == "(") { expression = this.ParseSimpleExpression(); this.ParseToken(TokenType.Separator, ")"); } else if (token.Type == TokenType.Separator && token.Value == "{") { var expressions = this.ParseExpressionList(); this.ParseToken(TokenType.Separator, "}"); expression = new TupleExpression(expressions); } else if (token.Type == TokenType.Separator && token.Value == "[") { var expressions = this.ParseExpressionList(); IExpression tailexpression = null; if (this.TryParseToken(TokenType.Separator, "|")) tailexpression = this.ParseSimpleExpression(); this.ParseToken(TokenType.Separator, "]"); expression = new ListExpression(expressions, tailexpression); } else this.PushToken(token); return expression; }
private IExpression ParseTerm() { Token token = this.NextToken(); IExpression expression = null; if (token == null) { return(null); } if (token.Type == TokenType.Variable) { expression = new VariableExpression(new Variable(token.Value)); if (this.TryParseToken(TokenType.Separator, "(")) { var list = this.ParseExpressionList(); this.ParseToken(TokenType.Separator, ")"); expression = new CallExpression(expression, list); } } else if (token.Type == TokenType.Atom) { if (token.Value == "false") { return(new ConstantExpression(false)); } if (token.Value == "true") { return(new ConstantExpression(true)); } if (token.Value == "fun") { return(this.ParseFunExpression()); } if (token.Value == "receive") { return(this.ParseReceiveExpression()); } expression = new AtomExpression(new Atom(token.Value)); if (this.TryParseToken(TokenType.Separator, "(")) { var list = this.ParseExpressionList(); this.ParseToken(TokenType.Separator, ")"); expression = new CallExpression(expression, list); } else if (this.TryParseToken(TokenType.Separator, ":")) { var nexpression = new AtomExpression(new Atom(this.ParseAtom())); this.ParseToken(TokenType.Separator, "("); var list = this.ParseExpressionList(); this.ParseToken(TokenType.Separator, ")"); expression = new QualifiedCallExpression(expression, nexpression, list); } } else if (token.Type == TokenType.Integer) { expression = new ConstantExpression(int.Parse(token.Value, CultureInfo.InvariantCulture)); } else if (token.Type == TokenType.Real) { expression = new ConstantExpression(double.Parse(token.Value, CultureInfo.InvariantCulture)); } else if (token.Type == TokenType.String) { expression = new ConstantExpression(token.Value); } else if (token.Type == TokenType.Separator && token.Value == "(") { expression = this.ParseSimpleExpression(); this.ParseToken(TokenType.Separator, ")"); } else if (token.Type == TokenType.Separator && token.Value == "{") { var expressions = this.ParseExpressionList(); this.ParseToken(TokenType.Separator, "}"); expression = new TupleExpression(expressions); } else if (token.Type == TokenType.Separator && token.Value == "[") { var expressions = this.ParseExpressionList(); IExpression tailexpression = null; if (this.TryParseToken(TokenType.Separator, "|")) { tailexpression = this.ParseSimpleExpression(); } this.ParseToken(TokenType.Separator, "]"); expression = new ListExpression(expressions, tailexpression); } else { this.PushToken(token); } return(expression); }