protected virtual void VisitSnippetStatement(SnippetStatement statement) { var value = statement.GetValue(this.SupportedDialects); if (statement.Arguments.Count > 0) { var index = 0; SnippetArgumentRegex.Replace(value, match => { if (match.Index > index) { State.Write(value.Substring(index, match.Index - index)); } var argIndex = int.Parse(match.Groups["index"].Value); VisitToken(statement.Arguments[argIndex]); index = match.Index + match.Length; return(""); }); State.Write(value.Substring(index)); } else { State.Write(value); } }