C 如何从flex中的文件中读取规则(定义)?
我一直在.l文件中创建令牌定义。由于数据量很大,它变得有点乏味。 是否有任何方法可以读取文件中的所有单词,例如包含所有名词的noon.txt,并为所有名词指定一个标记 基本上,我想自动化这一部分: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"
%%
[\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定义的生成器如何?看到我的答案了吗