Exemple #1
0
        private IExpression ParseDefExpression()
        {
            string           name  = this.ParseName();
            INamedExpression named = null;

            if (name == "self")
            {
                named = new SelfExpression();
            }
            else
            {
                named = new NameExpression(name);
            }

            while (true)
            {
                if (this.TryParseToken(TokenType.Separator, "."))
                {
                    string newname = this.ParseName();
                    named = new DotExpression(named, newname, new IExpression[0]);
                    continue;
                }

                if (this.TryParseToken(TokenType.Separator, "::"))
                {
                    string newname = this.ParseName();
                    named = new DoubleColonExpression(named, newname);
                    continue;
                }

                break;
            }

            IList <string> parameters = this.ParseParameterList();
            IExpression    body       = this.ParseCommandList();

            return(new DefExpression(named, parameters, body));
        }
Exemple #2
0
        private ClassExpression ParseClassExpression()
        {
            string           name  = this.ParseName();
            INamedExpression named = null;

            if (name == "self")
            {
                named = new SelfExpression();
            }
            else
            {
                named = new NameExpression(name);
            }

            while (true)
            {
                if (this.TryParseToken(TokenType.Separator, "::"))
                {
                    string newname = this.ParseName();
                    named = new DoubleColonExpression(named, newname);
                    continue;
                }

                break;
            }

            this.ParseEndOfCommand();
            IExpression body = this.ParseCommandList();

            if (!Predicates.IsConstantName(named.Name))
            {
                throw new SyntaxError("class/module name must be a CONSTANT");
            }

            return(new ClassExpression(named, body));
        }
Exemple #3
0
 public ClassExpression(INamedExpression namedexpression, IExpression expression, INamedExpression superclassexpression = null)
 {
     this.namedexpression      = namedexpression;
     this.expression           = expression;
     this.superclassexpression = superclassexpression;
 }
Exemple #4
0
 public DefExpression(INamedExpression namedexpression, IList <string> parameters, IExpression expression)
 {
     this.namedexpression = namedexpression;
     this.parameters      = parameters;
     this.expression      = expression;
 }
Exemple #5
0
 void AssertNamedExpression(INamedExpression expected, INamedExpression actual, string label)
 {
     Assert.AreEqual(expected.Name, actual.Name, $"{label}.Name");
     Assert.AreEqual(expected.Expression?.GetType(), actual.Expression?.GetType(), $"{label}.Expression.Type");
     AssertExpression((dynamic)expected.Expression, (dynamic)actual.Expression, label: $"{label}.Expression");
 }