Реализуйте парсер из грамматики для make-файлов - PullRequest
0 голосов
/ 18 октября 2018

Мне нужно написать парсер для некоторых make-файлов без переменных и символов (\ $ @, $ <и т. Д.), Все они содержат <strong>R ules как:

T arget: D ependencies

[tab] C ommands

Согласно Грамматика Makefile , грамматикаMakefile в целом является контекстно-зависимым, что усложняет реализацию синтаксического анализатора.Я пытался написать грамматику упрощенной версии (рис. Ниже), но я не уверен, правильно ли она и не зависит ли она от контекста.

Рис. Грамматика

Я не детализировал C (команды), потому что оболочка его проанализирует.

1 Ответ

0 голосов
/ 18 октября 2018

В произведениях для 'n', 'b' и 'e', ​​предположительно, '*' означает, что каждый из них может получить эпсилон (пустая строка), что неверно.(Это означает, что за D может следовать C без перевода строки или табуляции или даже пробела.)

Кроме того, это неоднозначно, что не обязательно означает, что оно некорректно для генерации языка, но, вероятно,означает, что он некорректен для построения парсера.

  • Продукция типа T ::= TeT означает, что T получает TeTeT двумя способами (и т. д.).
  • Продукция типа n ::= n* означает, что любое производное от n может включать в себя произвольно много n -> n шагов.
...