Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 哪个是关键字哈希表的键,哪个是项?_C#_Data Structures_Compiler Construction_Compilation_Lexical Analysis - Fatal编程技术网

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

C# 哪个是关键字哈希表的键,哪个是项?,c#,data-structures,compiler-construction,compilation,lexical-analysis,C#,Data Structures,Compiler Construction,Compilation,Lexical Analysis,我需要实现一个词法分析器,我需要一个数据结构来保存关键字。 有人建议我使用哈希表来保存关键字,有人建议我使用C#哈希表表单System.Collections。但我有一个问题:要使用这个哈希表,我需要一个键和一个项。我只有关键词。我应该使用关键字作为键还是项,或者两者都使用? 既然关键字不同,我可以使用另一种数据结构吗,比如二叉树? 我真正感兴趣的是:编译器如何实现这个问题?一般来说,关键字只有语法值,所以在大多数编译器中,它们只用于选择适当的语法规则。它们的“价值”也会立即被消耗掉。由于它们的

我需要实现一个词法分析器,我需要一个数据结构来保存关键字。 有人建议我使用哈希表来保存关键字,有人建议我使用C#哈希表表单System.Collections。但我有一个问题:要使用这个哈希表,我需要一个键和一个项。我只有关键词。我应该使用关键字作为键还是项,或者两者都使用? 既然关键字不同,我可以使用另一种数据结构吗,比如二叉树?
我真正感兴趣的是:编译器如何实现这个问题?

一般来说,关键字只有语法值,所以在大多数编译器中,它们只用于选择适当的语法规则。它们的“价值”也会立即被消耗掉。由于它们的标识是唯一有用的信息,因此使用
HashSet
可能比使用
HashMap
更合适

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

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


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

另请参阅,非常感谢您的支持!祝您有个美好的一天!