/// <summary> /// Special visitor to extract composite entities. /// This class is static. /// </summary> /// <param name="context">The intent context.</param> /// <returns>The utterance to entities map.</returns> public static UtteranceAndEntitiesMap VisitNormalIntentStringContext(LUFileParser.NormalIntentStringContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } var utterance = string.Empty; var entities = new List <EntityElement>(); var errorMessages = new List <string>(); // TODO: Check that this interface is actually implemented in the iterable foreach (ITerminalNode innerNode in context.children) { switch (innerNode.Symbol.Type) { case LUFileParser.DASH: break; case LUFileParser.EXPRESSION: var tokenizedUterance = TokenizeUtterance(innerNode.GetText().Trim()); var utteranceBuilder = new StringBuilder(utterance.TrimStart()); utterance = RecursivelyResolveTokenizedUtterance(tokenizedUterance, entities, errorMessages, utteranceBuilder).ToString(); break; default: utterance += innerNode.GetText(); break; } } return(new UtteranceAndEntitiesMap { Utterance = utterance.Trim(), Entities = entities, ErrorMsgs = errorMessages }); }
/// <summary> /// Visit a parse tree produced by <see cref="LUFileParser.normalIntentString"/>. /// <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 VisitNormalIntentString([NotNull] LUFileParser.NormalIntentStringContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by <see cref="LUFileParser.normalIntentString"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitNormalIntentString([NotNull] LUFileParser.NormalIntentStringContext context) { }