public override string VisitASTRestriction(ASTRestriction astRestriction)
        {
            var indent      = astRestriction.Depth == 1 ? "    " : "        ";
            var annotations = astRestriction
                              .Annotations
                              .Select(Visit)
                              .Select(a => indent + a);
            var a = string.Join("\n", annotations);

            if (annotations.Count() > 0)
            {
                return($"\n{a}\n{indent}& {astRestriction.Key} {astRestriction.Value}");
            }
            else
            {
                return($"{indent}& {astRestriction.Key} {astRestriction.Value}");
            }
        }
 public T Visit(IASTNode node)
 {
     return(node switch
     {
         ASTType n => VisitASTType(n),
         ASTTypeField n => VisitASTTypeField(n),
         ASTTypeDefinition n => VisitASTTypeDefinition(n),
         ASTRestriction n => VisitASTRestriction(n),
         ASTAlias n => VisitASTAlias(n),
         ASTData n => VisitASTData(n),
         ASTAnnotation n => VisitASTAnnotation(n),
         ASTDirective n => VisitASTDirective(n),
         ASTChoice n => VisitASTChoice(n),
         ASTOption n => VisitASTOption(n),
         ASTChapter n => VisitASTChapter(n),
         ASTParagraph n => VisitASTParagraph(n),
         _ => VisitDefault(node),
     });
        public void StringRestrictions()
        {
            var code      = @"
alias Name = String
    & default ""Other thing""
;
";
            var tokens    = new Lexer().Lex(code);
            var parseTree = new Parser(tokens).Parse().ToList();

            Assert.NotNull(parseTree);
            Assert.Single(parseTree);

            var alias = parseTree[0] as ASTAlias;

            Assert.Single(alias.Restrictions);
            ASTRestriction restriction = alias.Restrictions.First();

            Assert.Equal(TokenType.String, restriction.Token.TokenType);
        }
        public void PatternRestrictions()
        {
            var code      = @"
alias Name = String
    & pattern /[A-Z][a-z]{1,30}/
;
";
            var tokens    = new Lexer().Lex(code);
            var parseTree = new Parser(tokens).Parse().ToList();

            Assert.NotNull(parseTree);
            Assert.Single(parseTree);

            ASTAlias alias = parseTree[0] as ASTAlias;

            Assert.Single(alias.Restrictions);
            ASTRestriction restriction = alias.Restrictions.First();

            Assert.Equal(TokenType.Pattern, restriction.Token.TokenType);
        }
Exemple #5
0
 public override string VisitASTRestriction(ASTRestriction astRestriction)
 {
     return("");
 }
Exemple #6
0
 public override T VisitASTRestriction(ASTRestriction astRestriction) => d;
Exemple #7
0
 public override XmlSchemaObject?VisitASTRestriction(ASTRestriction astRestriction)
 {
     return(null);
 }