Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.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 如何从flex中的文件中读取规则(定义)?_C_Flex Lexer - Fatal编程技术网

C 如何从flex中的文件中读取规则(定义)?

C 如何从flex中的文件中读取规则(定义)?,c,flex-lexer,C,Flex Lexer,我一直在.l文件中创建令牌定义。由于数据量很大,它变得有点乏味。 是否有任何方法可以读取文件中的所有单词,例如包含所有名词的noon.txt,并为所有名词指定一个标记 基本上,我想自动化这一部分: %% [\r\n] {;return T_QUIT;} "morning"|"flight" {return NOUN;} "I"|"him" {return PRO;} "a"

我一直在.l文件中创建令牌定义。由于数据量很大,它变得有点乏味。 是否有任何方法可以读取文件中的所有单词,例如包含所有名词的noon.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;}

%%
flex会生成代码,所以您不能在执行时读取
noun.txt
,如果您希望这样做的话,就不能让flex直接管理它们

当然,您可以使用flex来读取标识符/单词(字母序列),并以特殊方式将通过
noon.txt
(已经读取并存储要使用的内容)而已知的名词管理到与标识符关联的身体部位({…})。但是在这种情况下,使用flex的兴趣是非常有限的,而且“洛杉矶”有一个内部空间(但可能是“洛杉矶”?)


您还可以编写一个生成器,从
noun.txt
生成flex文件,让flex直接管理这些文件。如果理性在任何时候都不必改变,这可能是最好的方法。您的flex定义非常简单且易于生成。

您可能会找到以下命令

sed 's/^/"/; s/$/"|/' noun.txt >> nounrule.txt

有用。这基本上为您编写了大部分规则,您只需在最后添加操作部分。

从文件生成flex定义的生成器如何?看到我的答案了吗