parseLuAndQnaWithAntlr = async function (parsedContent, fileContent, log, locale) {
    fileContent = helpers.sanitizeNewLines(fileContent);
    let luResource = luParser.parse(fileContent);

    if (luResource.Errors && luResource.Errors.length > 0) {
        if (log) {
            var warns = luResource.Errors.filter(error => (error && error.Severity && error.Severity === DiagnosticSeverity.WARN));
            if (warns.length > 0) {
                process.stdout.write(warns.map(warn => warn.toString()).join('\n').concat('\n'));
            }
        }

        var errors = luResource.Errors.filter(error => (error && error.Severity && error.Severity === DiagnosticSeverity.ERROR));
        if (errors.length > 0) {
            throw (new exception(retCode.errorCode.INVALID_LINE, errors.map(error => error.toString()).join('\n'), errors));
        }
    }

    // parse model info section
    let enableMergeIntents = parseAndHandleModelInfoSection(parsedContent, luResource, log);

    // parse reference section
    await parseAndHandleImportSection(parsedContent, luResource);

    // parse nested intent section
    parseAndHandleNestedIntentSection(luResource, enableMergeIntents);

    GetEntitySectionsFromSimpleIntentSections(luResource);

    // parse entity definition v2 section
    let featuresToProcess = parseAndHandleEntityV2(parsedContent, luResource, log, locale);
    
    // parse entity section
    parseAndHandleEntitySection(parsedContent, luResource, log, locale);

    // parse simple intent section
    await parseAndHandleSimpleIntentSection(parsedContent, luResource);

    // parse qna section
    await parseAndHandleQnaSection(parsedContent, luResource);

    if (featuresToProcess && featuresToProcess.length > 0) {
        parseFeatureSections(parsedContent, featuresToProcess);
    }

    validateNDepthEntities(parsedContent.LUISJsonStructure.entities, parsedContent.LUISJsonStructure.flatListOfEntityAndRoles, parsedContent.LUISJsonStructure.intents);

    // Update intent and entities with phrase lists if any
    updateIntentAndEntityFeatures(parsedContent.LUISJsonStructure);

    helpers.checkAndUpdateVersion(parsedContent.LUISJsonStructure);
    
}
Main parser code to parse current file contents into LUIS and QNA sections.
@param {parserObj} Object with that contains list of additional files to parse, parsed LUIS object and parsed QnA object
@param {string} fileContent current file content
@param {boolean} log indicates if we need verbose logging.
@param {string} locale LUIS locale code
@throws {exception} Throws on errors. exception object includes errCode and text.