我一直在.l文件中创建令牌定义。由于数据集的数量很大,因此变得很乏味。 有什么方法可以从文件中读取所有单词,例如包含所有名词的名词.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;}
%%
答案 0 :(得分:1)
flex 会生成代码,因此您无法在执行时读取noun.txt
,如果期望的话,请直接由 flex 对其进行管理
当然,您可以使用 flex 来读取标识符/单词(字母序列)并管理由于noun.txt
而已知的名词(已经读取并记住其内容以供使用)以特殊方式进入与标识符关联的主体部分({...})。但是在那种情况下,使用 flex 的兴趣非常有限,并且在“洛杉矶”内部有空间的情况下您会遇到问题(但可能是“洛杉矶”吗?)
您还可以编写一个生成器,从noun.txt
生成flex文件,以使其直接由 flex 管理。如果不必随时更改名词,这可能是最好的方法。您的 flex 定义非常简单且易于生成。
答案 1 :(得分:0)
您可能会找到命令
sed 's/^/"/; s/$/"|/' noun.txt >> nounrule.txt
有用。这基本上为您编写了大部分规则,您只需要在最后添加操作部分即可。