예제 #1
0
        T?ParseWord <T>(Dictionary <string, T> values, string word, ArcaeaFileFormatParser.ValueContext context, string type, string field) where T : struct
        {
            if (word == null)
            {
                return(null);
            }
            T result;

            if (values.TryGetValue(word, out result))
            {
                return(result);
            }
            chart.warning.Add($"第 {context.Start.Line + lineOffset} 行第 {context.Start.Column + 1} 列,{type} 事件的 {field} 参数的值不是合法的几个值之一,此事件将被忽略");
            return(null);
        }
예제 #2
0
 T CheckValueType <T>(ArcaeaFileFormatParser.ValueContext context, string type, string field) where T : class, IRawAffValue
 {
     if (context.value != null)
     {
         if (context.value is T)
         {
             return(context.value as T);
         }
         else
         {
             chart.warning.Add($"第 {context.Start.Line + lineOffset} 行第 {context.Start.Column + 1} 列,{type} 事件的 {field} 参数的值类型错误,此事件将被忽略");
         }
     }
     return(null);
 }
예제 #3
0
 public override void ExitValue(ArcaeaFileFormatParser.ValueContext context)
 {
     if (context.Int() != null)
     {
         int data;
         if (int.TryParse(context.Int().GetText(), out data))
         {
             context.value = new RawAffInt()
             {
                 data = data
             };
         }
         else
         {
             chart.warning.Add($"第 {context.Int().Symbol.Line + lineOffset} 行第 {context.Int().Symbol.Column + 1} 列,整数无法解析,可能是超出了数据范围,相关事件将被忽略");
         }
     }
     else if (context.Float() != null)
     {
         float data;
         if (float.TryParse(context.Float().GetText(), out data))
         {
             context.value = new RawAffFloat()
             {
                 data = data
             };
         }
         else
         {
             chart.warning.Add($"第 {context.Int().Symbol.Line + lineOffset} 行第 {context.Int().Symbol.Column + 1} 列,浮点数无法解析,可能是超出了数据范围,相关事件将被忽略");
         }
     }
     else if (context.Word() != null)
     {
         context.value = new RawAffWord()
         {
             data = context.Word().GetText()
         };
     }
 }
 /// <summary>
 /// Exit a parse tree produced by <see cref="ArcaeaFileFormatParser.value"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitValue([NotNull] ArcaeaFileFormatParser.ValueContext context)
 {
 }