gpt4 book ai didi

c++ - 使用 boost spirit x3 进行语义检查

转载 作者:行者123 更新时间:2023-11-28 05:33:15 24 4
gpt4 key购买 nike

我目前正在尝试使用 boost spirit x3 编写编译器。我完成了解析器(现在没有语义操作和错误处理,只是解析成 ast)。由于我想实现支持范围和函数调用的语言,我问自己什么时候检查被调用函数是否存在?我应该在构建 ast 时检查函数是否存在于当前范围内(在使用语义操作进行解析时),还是应该在编译 ast 时检查它?与范围堆栈相同。我应该在解析、使用语义操作或编译出 ast 时构建作用域堆栈吗?

最佳答案

这个问题非常不明确。

其中大部分在很大程度上取决于您正在实现的语言的性质(它是如何进行范围界定的?您会有词法范围界定吗?闭包?您会有动态堆栈吗?协程?变量是动态的还是完全静态的?打字?)。

Should I check if a function exists in the current scope while building the ast(while parsing with semantic actions), or should I check this while compileing the ast out?

就像我说的,两者都可以工作。我通常推荐关注点分离。在大多数情况下,只需简单地解析并在 AST 上操作(多次)就更容易思考,并且会产生更清晰、更容易扩展的代码。

根据情况(例如,当您希望变量在解析过程中潜在地隐藏某些关键字或其他一些上下文感知谓词时),您可能需要例如维护一个范围内具有已知标识符的符号表。这将 - IME - 构成一种设计味道,你应该考虑你是否需要复杂性。

The same with the scope stacks. should I build up the scope stacks while parsing, using semantic actions, or while compiling out the ast?

同样,在编译过程中做事通常要简单得多。

关于c++ - 使用 boost spirit x3 进行语义检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38932341/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com