我正在为编译器编写一个简单的预处理器。以下是我的代码的编辑片段:
%{
#include <string.h>
#include <hash_map>
#include "scanner.h"
#include "errors.h"
struct eqstr {
bool operator()(const char* s1, const char* s2) const {
return strcmp(s1, s2) == 0;
}
};
std::hash_map<const char*, char*, hash<const char*>, eqstr> defs; // LINE 28
%}
// Definitions here
%%
// Patterns and actions here
%%
编译时出现以下错误:
dpp.l:28:错误:预期的构造函数, 析构函数,或类型转换之前 '&lt;'令牌
任何想法可能有什么问题?我几乎从sgi文档中复制并粘贴了这一行。
答案 0 :(得分:2)
您需要std::hash
而不仅仅是hash
,因为您没有将using
语句拉入范围。此外,默认的std::hash<const char *>
将直接散列指针,这对于此用途不起作用 - 您需要一个哈希函数来散列指向的c字符串。您需要定义自己的hash
专精或您自己的散列函数 - 后者可能更好。