哪个是关键字,哪个是关键字哈希表的项目?

时间:2014-11-15 08:01:23

标签: c# data-structures compiler-construction compilation lexical-analysis

我需要实现一个词法分析器,我需要一个数据结构来保存关键字。 我被建议使用哈希表来保存关键字,一个建议是使用C#哈希表格式System.Collections。但是我有一个问题:使用这个哈希表我需要一个键和一个项目。我只有关键字。我应该使用关键字作为键或项目,还是同时使用? 由于关键字不同,我可以使用其他数据结构,例如二叉树吗? 我真正感兴趣的是:编译器如何实现这个问题?

1 个答案:

答案 0 :(得分:0)

通常,关键字只具有句法价值,因此在大多数编译器中,它们仅用于选择合适的语法规则。他们的"值"就这样,立即被消耗掉。由于他们的身份是唯一有用的信息,因此使用HashSet而不是HashMap可能更合适。

但是,可能存在一组在语法上相同的关键字,形成有效的枚举类型。在这种情况下,枚举值可以是与关键字关联的值。

对于手工编写的词法分析器,使用散列集或其他此类数据结构可能很简单,但大多数编译器实际上会将关键字与其他词法标记模式一起编译为有限状态自动机。这允许在词法扫描期间识别关键字,而无需任何外部数据结构。

无论如何,在几乎所有语言中,关键字集都是固定的,因此最适合使用编译到词法扫描程序中的高效数据结构。例如,代替二叉树,使用可以二进制搜索的有序字符串的静态向量是合理的。或者,可以使用预构造的线索;这几乎相当于上面提到的有限状态自动机。

相关问题