lib/grammar.js
function checkStruct(obj, callback, root) {
    if (obj.type == 'struct' || obj.type == 'static' || obj.type == 'message') {
        if (!isTypeString(obj.name)) {
            callback(false, 'struct ' + obj.name + ': The first letter should be capitalized.');

            return false;
        }

        for (var i = 0; i < obj.val.length; ++i) {
            if (base.countMember(obj.val[i].name.name, obj, root) > 1) {
                callback(false, 'struct ' + obj.name + '.' + obj.val[i].name.name + ': duplication of name.');

                return false;
            }

            if (!checkStructMember(obj.name, obj.val[i], callback, root)) {
                return false;
            }

            if (obj.type == 'message') {
                if (obj.val[i].name.name.indexOf('_') == 0) {
                    callback(false, 'message ' + obj.name + '.' + obj.val[i].name.name + ": can't begin with an underscore(_).");

                    return false;
                }
            }
        }
    }

    return true;
}
function checkStruct(obj, callback, root) {
    if (obj.type == 'struct' || obj.type == 'static' || obj.type == 'message') {
        if (!isTypeString(obj.name)) {
            callback(false, 'struct ' + obj.name + ': The first letter should be capitalized.');

            return false;
        }

        for (var i = 0; i < obj.val.length; ++i) {
            if (base.countMember(obj.val[i].name.name, obj, root) > 1) {
                callback(false, 'struct ' + obj.name + '.' + obj.val[i].name.name + ': duplication of name.');

                return false;
            }

            if (!checkStructMember(obj.name, obj.val[i], callback, root)) {
                return false;
            }

            if (obj.type == 'message') {
                if (obj.val[i].name.name.indexOf('_') == 0) {
                    callback(false, 'message ' + obj.name + '.' + obj.val[i].name.name + ": can't begin with an underscore(_).");

                    return false;
                }
            }
        }
    }

    return true;
}
callback(isok, err)