static tokenizeUtterance()

in parsers/LU/JS/packages/lu/src/parser/lufile/visitor.js [84:146]


    static tokenizeUtterance(exp) {
        let splitString = [];
        let curList = splitString;
        let curEntity = undefined;
        let entityNameCapture = false;
        let entityValueCapture = false;
        let entityRoleCapture = false;
        exp.split('').forEach(char => {
            switch(char) 
            {
                case '{':
                    let newEntity = {entityName : '', role : '', entityValue : undefined, parent : curEntity};
                    curList.push(newEntity);
                    curEntity = newEntity;
                    entityNameCapture = true;
                    entityRoleCapture = false;
                    entityValueCapture = false;
                    break;
                case '}':
                    curEntity = curEntity.parent || undefined;
                    curList = curEntity != undefined ? curEntity.entityValue : splitString;
                    entityValueCapture = false;
                    entityRoleCapture = false;
                    entityNameCapture = false;
                    break;
                case '=':
                    curEntity.entityValue = [];
                    curList = curEntity.entityValue;
                    entityNameCapture = false;
                    entityValueCapture = true;
                    entityRoleCapture = false;
                    break;
                case ':':
                    if (curEntity !== undefined && curEntity.entityName !== '' && entityNameCapture === true) {
                        entityRoleCapture = true;
                        entityNameCapture = false;
                        entityValueCapture = false;
                    } else {
                        curList.push(char);
                    }
                    break;
                default :
                    if (entityNameCapture) {
                        curEntity.entityName += char;
                    } else if (entityValueCapture) {
                        if (char === ' ') {
                            // we do not want leading spaces
                            if (curList.length !== 0) {
                                curList.push(char);
                            }
                        } else {
                            curList.push(char);
                        }
                    } else if (entityRoleCapture) {
                        curEntity.role += char;
                    } else {
                        curList.push(char);
                    }
                    break;
            }
        });
        return splitString;
    }