【发布时间】:2012-07-09 17:13:20
【问题描述】:
我正在尝试优化我只是为了好玩而制作的简单 C 解释器,我正在做这样的解析 - 首先我将文件解析为双向链表中的标记,然后我进行语法和语义分析。
我想用这个原型优化功能:
bool parsed_keyword(struct token *, char dictionary[][]);
在函数内部,我基本上针对 所有关键字 调用 strcmp 并编辑令牌类型。 这当然会导致(几乎)每个正在解析的字符串调用 20 次 strcmp。
我认为 Rabin-Karp 会是最好的,但在我看来它并不最适合这项工作(将一个单词与小字典匹配)。 完成这项工作的最佳算法是什么?感谢您的任何建议。
【问题讨论】:
-
谈到
n = 20优化应该是您最不关心的问题。几乎任何阶多项式函数都可以满足您的需求。 -
根据 Niklaus Wirth 的说法,当您在编译器/解释器中查找本地符号时,是最有效的处理方式。他甚至做了测试以确保。 (当然,他的指标可能与你的不同,但他的指标非常好。)
标签: c algorithm parsing lexical-analysis