Vhdl парсер на C # - PullRequest
       5

Vhdl парсер на C #

2 голосов
/ 24 августа 2011

Мне нужно сделать парсер VHDL.Я решил использовать генератор синтаксического анализатора antlr и грамматику vhdl с их веб-сайта http://www.antlr.org/grammar/1202750770887/vhdl.g. У меня возникли проблемы при проверке грамматики, и у меня возникает эта ошибка:

Следующие определения токенов никогда не могут бытьсовпадают, потому что предыдущие токены совпадают с одним и тем же входом: LETTER, INTEGER, DIGIT ...

Если кто-то работал с этим раньше, пожалуйста, сообщите мне, если грамматика неверна или я делаю что-то ещенеправильно.

1 Ответ

2 голосов
/ 24 августа 2011

Из vhdl.g

BASIC_IDENTIFIER
   :   LETTER ( '_' | LETTER | DIGIT )*
   ;

...

LETTER  
  :  'a'..'z' | 'A'..'Z'
  ;

LETTER, INTEGER и DIGIT все выглядят так, как будто они должны быть фрагментом, так как они никогда не вызываются правилами синтаксического анализатора.

fragment LETTER 
  :  'a'..'z' | 'A'..'Z'
  ;

РЕДАКТИРОВАТЬ: Как сказал Барт, поскольку BASIC_IDENTIFIER указан перед LETTER в грамматике и охватывает все случаи, которые выполняет LETTER, лексер никогда не будет создавать никаких токенов LETTER.Это то, что вызывает предупреждения.

...