コード例 #1
0
ファイル: Dsl.cs プロジェクト: genechiaramonte/dsl
        private Tuple <string, string, bool> ReadProperty(GrammarParser.ArgumentContext argument)
        {
            var type          = VisitTerminal(argument.type().ID());
            var typeArguments = argument.type().typeArguments();

            if (typeArguments != null)
            {
                type += typeArguments.GetText();
            }
            string name;

            var modifier   = argument.type().typeModifier();
            var isOptional = modifier?.OPTIONAL() != null;

            if (argument.name() == null)
            {
                name = VisitTerminal(argument.type().ID());
                var definition = File.FindPropertyDefinition(name);
                if (string.IsNullOrEmpty(definition?.Item1))
                {
                    throw new Exception($"Tried to use an undefined property '{name}'");
                }

                type       = definition.Item2;
                name       = definition.Item1;
                isOptional = definition.Item3 || isOptional;
            }
            else
            {
                name = VisitTerminal(argument.name().ID());
            }

            return(Tuple.Create(name, type, isOptional));
        }
コード例 #2
0
 /// <summary>
 /// Exit a parse tree produced by <see cref="GrammarParser.argument"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitArgument([NotNull] GrammarParser.ArgumentContext context)
 {
 }
コード例 #3
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="GrammarParser.argument"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitArgument([NotNull] GrammarParser.ArgumentContext context)
 {
     return(VisitChildren(context));
 }