用于存储令牌属性的数据结构

时间:2015-02-03 18:30:25

标签: parsing rust interpreter lexical-analysis

我正在为Rust中的数学语言编写一个解释器,用于解决数学表达式。

lexing 时,程序需要根据令牌中使用的字符知道它是什么类型的令牌(例如它是一个函数还是一个操作符)。

目前,我使用枚举来表示一种令牌:

pub enum IdentifierType {
    Function,
    Variable,
    Operator,
    Integer,
}

要检查令牌的类型,我使用一个函数,该函数将IdentifierType作为输入,并根据输入进行匹配以返回bool。在这种情况下可以使用的数据结构相对简单,因为令牌只有一个属性:允许的字符。

解析到抽象语法树(AST)时,我想知道基于令牌使用了什么特定的运算符或函数,并且能够添加对该运算符的引用和它与AST的相关功能。

解释时,我希望能够在节点上调用execute并让它知道如何执行自己的函数。

我试图想出一个存储所有这些相关项目的解决方案,但我遇到的并不令人满意。

例如,我将所有运算符存储在TOML文件(一种映射到哈希表的配置文件)中,但存储枚举(受约束的值)很困难,并且无法存储运算符函数。我还希望能够通过多个键进行搜索,例如运算符关联性(例如,获取所有正确关联的运算符),这意味着在源代码中存储不是很令人满意。

我所拥有的其他可能的想法是使用某种SQL混合系统,但这似乎很难实现

0 个答案:

没有答案