Ejemplo n.º 1
0
        private Expression Suffix(INode node)
        {
            if (node.Name == "quantified")
            {
                Debug.Assert(node.Count == 2);

                var expression = Primary(node[0]);
                switch (node[1].Name)
                {
                case "?":
                    return(OptionalExpression.From(node, expression));

                case "*":
                    return(StarExpression.From(node, expression));

                case "+":
                    return(PlusExpression.From(node, expression));

                default:
                    throw new NotImplementedException();
                }
            }

            return(Primary(node));
        }
Ejemplo n.º 2
0
 protected override void VisitOptionalExpression(OptionalExpression optional)
 {
     CS.IndentInOut(
         "OptionalExpression",
         () =>
     {
         VisitExpression(optional.Expression);
         using var node = Locals.Use("node");
         CS.Ln($"{node} = NodeList.From({Locals.Result}, NodeSymbols.Optional, {Locals.Result}.Nodes.ToArray());");
         CS.If(
             $"{Locals.Result}.IsSuccess",
             () => CS.Ln($"{Locals.Result} = Result.Success({Locals.Result}, {Locals.Result}.Next, {node});"),
             () => CS.Ln($"{Locals.Result} = Result.Success({Cfg.CurName}, {Cfg.CurName}, {node});"));
     });
 }
Ejemplo n.º 3
0
        private ParseAction ImportOptionalExpression(Expression exp,
                                                     Entity entity,
                                                     ParseAction parent = null,
                                                     bool optional      = false)
        {
            OptionalExpression option = ((OptionalExpression)exp);

            // recurse down
            ParseAction consume = this.ImportPropertiesAndParseActions(
                option.Expression, entity, parent, true
                );

            // mark optional
            consume.IsOptional = true;

            return(consume);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// RenderAny create-table column
 /// </summary>
 /// <param name="writer">to render to</param>
 public void ToEPL(TextWriter writer)
 {
     writer.Write(ColumnName);
     writer.Write(" ");
     if (OptionalExpression != null)
     {
         OptionalExpression.ToEPL(writer, ExpressionPrecedenceEnum.MINIMUM);
     }
     else
     {
         writer.Write(OptionalTypeName);
         if (OptionalTypeIsArray != null && OptionalTypeIsArray.Value)
         {
             if (OptionalTypeIsPrimitiveArray != null && OptionalTypeIsPrimitiveArray.Value)
             {
                 writer.Write("[primitive]");
             }
             else
             {
                 writer.Write("[]");
             }
         }
         if (PrimaryKey.GetValueOrDefault())
         {
             writer.Write(" primary key");
         }
     }
     if (Annotations != null && !Annotations.IsEmpty())
     {
         writer.Write(" ");
         string delimiter = "";
         foreach (AnnotationPart part in Annotations)
         {
             if (part.Name == null)
             {
                 continue;
             }
             writer.Write(delimiter);
             delimiter = " ";
             part.ToEPL(writer);
         }
     }
 }
Ejemplo n.º 5
0
            private static Expression Expression(INode node)
            {
                switch (node.Name)
                {
                case "sequence": return(Sequence(node));

                case "choice": return(Choice(node));

                case "prefix.drop": return(DropExpression.From(node[0], Expression(node[0])));

                case "prefix.lift": return(LiftExpression.From(node[0], Expression(node[0])));

                case "prefix.fuse": return(FuseExpression.From(node[0], Expression(node[0])));

                case "prefix.not": return(NotExpression.From(node[0], Expression(node[0])));

                case "suffix.zero-or-more": return(StarExpression.From(node[0], Expression(node[0])));

                case "suffix.one-or-more": return(PlusExpression.From(node[0], Expression(node[0])));

                case "suffix.zero-or-one": return(OptionalExpression.From(node[0], Expression(node[0])));

                case "inline": return(InlineExpression.From(node[0], Tree.Rule.From(Identifier(node[0]), Expression(node[1]))));

                case "identifier": return(NameExpression.From(node, Identifier(node)));

                case "any": return(AnyExpression.From(node));

                case "verbatim-string": return(StringLiteralExpression.From(node, ((ILeaf)node).Value));

                case "character-class": return(Class(node));

                case "string": return(String(node));

                default:
                    throw new NotImplementedException();
                }
            }
Ejemplo n.º 6
0
        private string GenerateOptionalExpression(Expression expression)
        {
            OptionalExpression optional = expression as OptionalExpression;

            return("[ " + this.GenerateExpression(optional.Expression) + " ]");
        }
Ejemplo n.º 7
0
 protected override void VisitOptionalExpression(OptionalExpression expression)
 {
     MaybeParent(expression.Expression is PrefixExpression, expression.Expression);
     Writer.Write($"{OpSymbols.Option}");
 }
Ejemplo n.º 8
0
 protected override void VisitOptionalExpression(OptionalExpression optional)
 {
     VisitExpression(optional.Expression);
     Push(new Parsers.Optional(Pop()));
 }