首页 > 解决方案 > 如何从 flex 文件中读取规则(定义)?

问题描述

我一直在我的 .l 文件中创建令牌定义。由于数据量很大,它变得有点乏味。有没有办法从包含所有名词的文件中读取所有单词,例如 noun.txt 并给它们一个单一的标记。

基本上,我想自动化这部分:

%%

[\r\n]                  {;return T_QUIT;}
"morning"|"flight"      {return NOUN;}
"I"|"him"                       {return PRO;}
"a"                     {return DET;}
"prefer"|"play"|"love"              {return VERB;}
"Los Angeles"|"ali"|"home"  {return PNOUN;}
"on"|"at"                   {return PRE;}
"exit"      {return T_QUIT;}
"quit"      {return T_QUIT;}

%%

标签: cflex-lexer

解决方案


flex生成代码,因此您无法noun.txt在执行时阅读并让它们直接由flex管理,如果这是您所期望的

当然,您可以使用flex读取标识符/单词(字母序列)并以特殊方式将已知的名词管理noun.txt到正文部分({...})与标识符相关联。但是在那种情况下,使用flex的兴趣非常有限,并且您对“洛杉矶”内部有空间的情况有疑问(但可能是“洛杉矶”?)

您还可以编写一个生成 flex 文件的生成器noun.txt,让它们直接由flex管理。如果 nous 不必随时更改,这可能是最好的方法。您的flex定义非常简单且易于生成。


推荐阅读