Как читать правила (определения) из файлов в flex? - PullRequest
0 голосов
/ 08 мая 2019

Я создавал определения токенов в моем .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;}

%%

Ответы [ 2 ]

1 голос
/ 08 мая 2019

flex генерирует код, поэтому вы не можете прочитать noun.txt во время выполнения и управлять ими напрямую flex , если вы ожидаете

Конечновы можете использовать flex для чтения идентификатора / слова (последовательность альфа) и управлять существительными, известными благодаря noun.txt (уже прочитано и его содержимое запомнено для использования) особым образом в части тела({...}) связанный с идентификатором.Но в этом случае интерес к использованию flex очень ограничен, и у вас есть проблема с пробелом в «Лос-Анджелесе» (но может быть, это «Лос-Анджелес»?)

Вы также можете написать генератор, создающий файл flex из noun.txt, чтобы напрямую им управлять flex .Это, вероятно, лучший способ сделать это, если nous не нужно менять в любое время.Ваши flex определения очень просты и легко генерируются.

0 голосов
/ 08 мая 2019

Может оказаться полезной команда

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

.Это в основном пишет основную часть правила для вас, вам просто нужно добавить часть действия в конце.

...