我有以下(非常简单的) Ragel文件scanner.rl
void lex(string data) {
int cs, act, top;
auto p = data.ptr;
typeof(p)
pe = &data[$ -1],
eof = pe,
ts,
te;
%%{
machine scanner;
identifier = alpha . alnum**;
main := |*
identifier => { ("Identifier: " + data[ts..te]).writeln; };
space;
*|;
write data;
write init;
write exec;
}%%
}
void main() {
"this is a test".lex;
}我使用scanner.rl将scanner.d转换为ragel -D scanner.rl。当我试图用D编译生成的dmd scanner.d文件时,我会得到以下错误消息:
D(97):错误:不能隐式地将const(字节)*的表达式(&_scanner_actions[cast(ulong)_scanner_from_state_actionscast(ulong)cs])转换为字节* scanner.d(110):错误:不能隐式转换const(char)*的表达式(&_scanner_trans_keys[cast(ulong)_scanner_key_offsetscast(ulong)cs])到char* scanner.d(166):错误:不能隐式转换表达式(&_scanner )_actions[cast(ulong)_scanner_trans_actionscast(ulong)_trans])类型的const(字节)*到字节* scanner.rl(22):错误:不能隐式地将类型为immutable(char)*的表达式(ts)转换为ulong scanner.d(186):Error:不能隐式地将const(字节)*的表达式(&_scanner_actions[cast(ulong)_scanner_to_state_actionscast(ulong)cs])转换为字节*
也许我错过了什么重要的东西?
发布于 2013-09-30 22:27:26
您确定ragel正在生成D2代码吗?看来它不见了康斯特..。查看ragel的源代码,看起来ragel -D生成了D1,ragel -E生成了D2,尽管这并没有在--帮助中得到记录!
https://stackoverflow.com/questions/19097954
复制相似问题