d如何使用lexer

原文

我正在试写脚本来解析c头文件,然后输出多语言的基本绑定.
前段时间在论坛上看到D编译器可作为使用,并发现lexer页
但:

import dmd.lexer: Lexer

失败.
要如何才能调用lexer(或解析器)?

dmd是个单独的代码基,在普通D构建中不可用.
必须提供它,然后链接进它.
最简单方法是通过dub使用dmd-fe.示例

{
    "name": "lexer_test",
    "dependencies": {
        "dmd:frontend": "~>2.101.0"
    }
}

测试:

//source/lexer_test.d:
module lexer_test.d;

void main()
{
    import dmd.globals;
    import dmd.lexer;
    import dmd.tokens;

    immutable expected = [
        TOK.void_,
        TOK.identifier,
        TOK.leftParenthesis,
        TOK.rightParenthesis,
        TOK.leftCurly,
        TOK.rightCurly
    ];

    immutable sourceCode = "void test() {} // foobar";
    scope lexer = new Lexer("test", sourceCode.ptr, 0, sourceCode.length, 0, 0);
    lexer.nextToken;

    TOK[] result;

    do
    {
        result ~= lexer.token.value;
    } while (lexer.nextToken != TOK.endOfFile);

    assert(result == expected);
}

然后只需"$dub run".

posted @   zjh6  阅读(18)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示