Ejemplo n.º 1
0
        protected override void ComputeToken(int id, string name, PerCederberg.Grammatica.Runtime.TokenPattern.PatternType type, string pattern, ExpressionContext context)
        {
            ExpressionParserOptions options = context.ParserOptions;

            char digitsBeforePattern = (options.RequireDigitsBeforeDecimalPoint ? '+' : '*');

            pattern = string.Format(pattern, digitsBeforePattern, options.DecimalSeparator);

            this.SetData(id, name, type, pattern);
        }
Ejemplo n.º 2
0
		public override PerCederberg.Grammatica.Runtime.Node ExitCastExpression(PerCederberg.Grammatica.Runtime.Production node)
		{
			var childValues = this.GetChildValues(node);
			string[] destTypeParts = (string[])childValues[1];
			bool isArray = (bool)childValues[2];
            var op = new CastElement((ExpressionElement)childValues[0], destTypeParts, isArray, MyServices);
			node.AddValue(op);
			return node;
		}
Ejemplo n.º 3
0
		public override PerCederberg.Grammatica.Runtime.Node ExitExpressionGroup(PerCederberg.Grammatica.Runtime.Production node)
		{
			node.AddValues(this.GetChildValues(node));
			return node;
		}
Ejemplo n.º 4
0
		public override PerCederberg.Grammatica.Runtime.Node ExitRightShift(PerCederberg.Grammatica.Runtime.Token node)
		{
			node.AddValue(ShiftOperation.RightShift);
			return node;
		}
Ejemplo n.º 5
0
		public override PerCederberg.Grammatica.Runtime.Node ExitXor(PerCederberg.Grammatica.Runtime.Token node)
		{
			node.AddValue("Xor");
			return node;
		}
Ejemplo n.º 6
0
		public override PerCederberg.Grammatica.Runtime.Node ExitExpression(PerCederberg.Grammatica.Runtime.Production node)
		{
			this.AddFirstChildValue(node);
			return node;
		}
Ejemplo n.º 7
0
		public override PerCederberg.Grammatica.Runtime.Node ExitLt(PerCederberg.Grammatica.Runtime.Token node)
		{
			node.AddValue(LogicalCompareOperation.LessThan);
			return node;
		}
Ejemplo n.º 8
0
		public override PerCederberg.Grammatica.Runtime.Node ExitArrayBraces(PerCederberg.Grammatica.Runtime.Token node)
		{
			node.AddValue("[]");
			return node;
		}
Ejemplo n.º 9
0
		private void AddBinaryOp(PerCederberg.Grammatica.Runtime.Production node, Type elementType)
		{
			IList childValues = this.GetChildValues(node);

			if (childValues.Count > 1) {
				BinaryExpressionElement e = BinaryExpressionElement.CreateElement(childValues, elementType);
				node.AddValue(e);
			} else if (childValues.Count == 1) {
				node.AddValue(childValues[0]);
			} else {
				Debug.Assert(false, "wrong number of chilren");
			}
		}
Ejemplo n.º 10
0
		private void AddUnaryOp(PerCederberg.Grammatica.Runtime.Production node, Type elementType)
		{
			var childValues = this.GetChildValues(node);

			if (childValues.Count == 2) {
                var element = (UnaryElement)Activator.CreateInstance(elementType);
				element.SetChild((ExpressionElement)childValues[1]);
				node.AddValue(element);
			} else {
				node.AddValue(childValues[0]);
			}
		}
Ejemplo n.º 11
0
		private void AddFirstChildValue(PerCederberg.Grammatica.Runtime.Production node)
		{
			node.AddValue(this.GetChildAt(node, 0).Values[0]);
		}
Ejemplo n.º 12
0
		public override PerCederberg.Grammatica.Runtime.Node ExitArgumentList(PerCederberg.Grammatica.Runtime.Production node)
		{
			var childValues = this.GetChildValues(node);
			node.AddValues(childValues);
			return node;
		}
Ejemplo n.º 13
0
		public override PerCederberg.Grammatica.Runtime.Node ExitFunctionCallExpression(PerCederberg.Grammatica.Runtime.Production node)
		{
			var childValues = this.GetChildValues(node);
			string name = (string)childValues[0];
			childValues.RemoveAt(0);
			var args = new ArgumentList(childValues);
			var funcCall = new FunctionCallElement(name, args);
			node.AddValue(funcCall);
			return node;
		}
Ejemplo n.º 14
0
		public override PerCederberg.Grammatica.Runtime.Node ExitFieldPropertyExpression(PerCederberg.Grammatica.Runtime.Production node)
		{
			string name = (string)node.GetChildAt(0).GetValue(0);
			IdentifierElement elem = new IdentifierElement(name);
			node.AddValue(elem);
			return node;
		}
Ejemplo n.º 15
0
		public override PerCederberg.Grammatica.Runtime.Node ExitCastTypeExpression(PerCederberg.Grammatica.Runtime.Production node)
		{
			var childValues = this.GetChildValues(node);
			var parts = new List<string>();

			foreach (string part in childValues) {
				parts.Add(part);
			}

			bool isArray = false;

			if (parts[parts.Count - 1] == "[]") {
				isArray = true;
				parts.RemoveAt(parts.Count - 1);
			}

			node.AddValue(parts.ToArray());
			node.AddValue(isArray);
			return node;
		}
Ejemplo n.º 16
0
		public override PerCederberg.Grammatica.Runtime.Node ExitIdentifier(PerCederberg.Grammatica.Runtime.Token node)
		{
			node.AddValue(node.Image);
			return node;
		}
Ejemplo n.º 17
0
		public override PerCederberg.Grammatica.Runtime.Node ExitNullLiteral(PerCederberg.Grammatica.Runtime.Token node)
		{
			node.AddValue(new NullLiteralElement());
			return node;
		}
Ejemplo n.º 18
0
		public override PerCederberg.Grammatica.Runtime.Node ExitReal(PerCederberg.Grammatica.Runtime.Token node)
		{
			string image = node.Image;
			var element = RealLiteralElement.Create(image, MyServices);

			node.AddValue(element);
			return node;
		}
Ejemplo n.º 19
0
        public override PerCederberg.Grammatica.Runtime.Node ExitPower(PerCederberg.Grammatica.Runtime.Token node)
		{
			node.AddValue(BinaryArithmeticOperation.Power);
			return node;
		}
Ejemplo n.º 20
0
		public override PerCederberg.Grammatica.Runtime.Node ExitHexLiteral(PerCederberg.Grammatica.Runtime.Token node)
		{
			var element = IntegralLiteralElement.Create(node.Image, true, MyInUnaryNegate, MyServices);
			node.AddValue(element);
			return node;
		}
Ejemplo n.º 21
0
		public override PerCederberg.Grammatica.Runtime.Node ExitGte(PerCederberg.Grammatica.Runtime.Token node)
		{
			node.AddValue(LogicalCompareOperation.GreaterThanOrEqual);
			return node;
		}
Ejemplo n.º 22
0
		public override PerCederberg.Grammatica.Runtime.Node ExitFalse(PerCederberg.Grammatica.Runtime.Token node)
		{
			node.AddValue(new BooleanLiteralElement(false));
			return node;
		}
Ejemplo n.º 23
0
		public override PerCederberg.Grammatica.Runtime.Node ExitOr(PerCederberg.Grammatica.Runtime.Token node)
		{
			node.AddValue(AndOrOperation.Or);
			return node;
		}
Ejemplo n.º 24
0
		public override PerCederberg.Grammatica.Runtime.Node ExitStringLiteral(PerCederberg.Grammatica.Runtime.Token node)
		{
			string s = this.DoEscapes(node.Image);
			var element = new StringLiteralElement(s);
			node.AddValue(element);
			return node;
		}
Ejemplo n.º 25
0
		public override PerCederberg.Grammatica.Runtime.Node ExitNot(PerCederberg.Grammatica.Runtime.Token node)
		{
			node.AddValue(string.Empty);
			return node;
		}
Ejemplo n.º 26
0
		public override PerCederberg.Grammatica.Runtime.Node ExitCharLiteral(PerCederberg.Grammatica.Runtime.Token node)
		{
			string s = this.DoEscapes(node.Image);
			node.AddValue(new CharLiteralElement(s[0]));
			return node;
		}
Ejemplo n.º 27
0
		public override void Child(PerCederberg.Grammatica.Runtime.Production node, PerCederberg.Grammatica.Runtime.Node child)
		{
			base.Child(node, child);
            MyInUnaryNegate = (ExpressionConstants)node.Id == ExpressionConstants.NEGATE_EXPRESSION & (ExpressionConstants)child.Id == ExpressionConstants.SUB;
		}
Ejemplo n.º 28
0
		public override PerCederberg.Grammatica.Runtime.Node ExitDatetime(PerCederberg.Grammatica.Runtime.Token node)
		{
            var context = (ExpressionContext)MyServices.GetService(typeof(ExpressionContext));
			string image = node.Image.Substring(1, node.Image.Length - 2);
			var element = new DateTimeLiteralElement(image, context);
			node.AddValue(element);
			return node;
		}
Ejemplo n.º 29
0
		public override PerCederberg.Grammatica.Runtime.Node ExitShiftExpression(PerCederberg.Grammatica.Runtime.Production node)
		{
			this.AddBinaryOp(node, typeof(ShiftElement));
			return node;
		}
Ejemplo n.º 30
0
		public override PerCederberg.Grammatica.Runtime.Node ExitTimespan(PerCederberg.Grammatica.Runtime.Token node)
		{
			string image = node.Image.Substring(2, node.Image.Length - 3);
			var element = new TimeSpanLiteralElement(image);
			node.AddValue(element);
			return node;
		}