次の(非常に単純な) 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
scanner.d(97): エラー: const(byte)* 型の式 (&_scanner_actions[cast(ulong)_scanner_from_state_actions[cast(ulong)cs]]) を byte* に暗黙的に変換できません scanner.d(110): エラー: できませんconst(char)* 型の式 (&_scanner_trans_keys[cast(ulong)_scanner_key_offsets[cast(ulong)cs]]) を char* に暗黙的に変換する scanner.d(166): エラー: 式を暗黙的に変換できません (&_scanner_actions[cast(ulong) _scanner_trans_actions[cast(ulong)_trans]]) 型 const(byte)* から byte* への scanner.rl(22): エラー: immutable(char)* 型の式 (ts) を ulong scanner.d(186) に暗黙的に変換できません): エラー: const(byte)* 型の式 (&_scanner_actions[cast(ulong)_scanner_to_state_actions[cast(ulong)cs]]) を byte* に暗黙的に変換できません
おそらく私は何か重要なものを見逃していますか?