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); }
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); }
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) { }