0

次の(非常に単純な) 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.dragel -D scanner.rlDdmd 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* に暗黙的に変換できません

おそらく私は何か重要なものを見逃していますか?

4

1 に答える 1

2

Ragel が D2 コードを生成していることは確かですか? const が欠落しているように見えます.... ragel のソース コードを見ると、ragel -D は D1 を生成し、ragel -E は D2 を生成するように見えますが、これは --help には文書化されていません!

于 2013-09-30T22:27:26.893 に答える