在词法分析器中比较字符串的有效方法

问题描述

基本上这只会解析字符串文字输出它所具有的标记类型。 我使用了 Aho-Cohasick 算法来确保字符串有效或存在于符号列表中。 我的问题是我应该使用字符串的“==”运算符,缺点是我将使用 if-else 语句,或者我应该使用 crc16 计算然后在 switch case 语句中使用更好可读性还是性能,两者哪个更好?

Token Lexer::type_identifier()
{
    char* name = type_name();
    string sym_name(name);
    trie.only_whole_words();
    auto result = trie.parse_text(sym_name);   //trie using Aho-Corasick algorithm

    if (!result.size())
        throw - 1;
    
    unsigned short crc = crc16(name,strlen(name));

    switch (crc) {
    case 0xfb81:
        return Token(Identifiers::e_T,"T");
    case 0x9b7a:
        return Token(Identifiers::e_OpAdd,"<Addition>");
    }

    //if(symname == "T")
    //  return Token(Identifiers::e_T,"T");
    return Token();
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)