Можно ли установить приоритеты для правил, чтобы избежать шаблона сопоставления «самый длинный-самый ранний»?

Другой простой вопрос: есть ли способ сказать flex, чтобы он предпочел правило, которое соответствует короткому правилу, правилу, которое соответствует более длинному? Я не могу найти никакой хорошей документации по этому поводу.

Вот почему мне это нужно: я анализирую файл на предмет псевдоязыка, который содержит некоторые ключевые слова, соответствующие командам управления. Я бы хотел, чтобы они были абсолютным приоритетом, чтобы они не анализировались как части выражения. Мне действительно нужна эта приоритетная вещь, потому что мне не нужно писать полную грамматику для моего проекта (в моем случае это было бы совершенно излишним, поскольку я выполняю структурный анализ анализируемой программы, мне не нужно знать детали ... .), поэтому я не могу использовать тонкую настройку грамматики, чтобы быть уверенным, что эти блоки не будут преобразованы в выражение.

Любая помощь будет принята с благодарностью.

Вот пример проанализированного файла:

If a > 0 Then read(b); Endif
c := "If I were...";
While d > 5 Do d := d + 1 Endwhile

Я просто хочу собрать информацию о If, Thens, Endifs и т. Д. Остальное для меня не имеет значения. Вот почему я бы хотел, чтобы правила, связанные с If, Thens и т. Д., Были приоритетными, без необходимости писать грамматику.

15
задан lesmana 6 May 2013 в 13:26
поделиться