У меня есть большой файл грамматики и планируем разбить его на несколько, чтобы я мог повторно использовать некоторые из этих небольших файлов в другом файле грамматики. Я попытался сделать это, но потерпел неудачу. Не могли бы вы рассказать, доступна ли такая функция, и если да, пожалуйста, направьте меня к примеру.Как разбить файл грамматики ANTLR на несколько из них
ответ
Вы не упомянули версию ANTLR, поэтому я собираюсь предположить, что вы используете текущий - 4.x. В ANTLR4 грамматики могут быть импортированы с ключевым словом import
. Что-то вроде этого:
Файл: CommonLexerRules.g4
lexer grammar CommonLexerRules;
ID : [a-zA-Z]+ ;
...
Файл: MyParser.g4
grammar MyParser;
import CommonLexerRules; //includes all rules from lexer CommonLexerRules.g4
...
Правила в «основных грамматику» правил отменяют с импортируемыми грамматик для реализации наследования. Подробнее см. Здесь: https://theantlrguy.atlassian.net/wiki/display/ANTLR4/Grammar+Structure#GrammarStructure-GrammarImports
Если вы хотите разделить лексер и парсер.
Лексер:
lexer grammar HelloLexer;
Hello : 'hello' ;
ID : [a-z]+ ; // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines
Parser:
parser grammar HelloParser;
options { tokenVocab=HelloLexer; }
r : Hello ID ;
Не забудьте назвать файлы HelloLexer.g4 и HelloParser.g4
если вы хотите импортировать всю грамматику, то вы должны используйте ключевое слово импорта
grammar Hello;
import OtherGrammar;
Hello : 'hello' ;
ID : [a-z]+ ; // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines
r : Hello ID ;
, не следует ли ему «импортировать HelloParser;»? – Boriel
- 1. Как разбить файл грамматики Xtext на несколько?
- 2. ANTLR версия2 синтаксис грамматики?
- 3. Есть ли файл грамматики C++ для ANTLR?
- 4. Создание AST из ANTLR грамматики
- 5. Weird ANTLR правило грамматики
- 6. ANTLR грамматики неясность
- 7. Ошибка связывания грамматики ANTLR
- 8. Неожиданное поведение грамматики ANTLR
- 9. Ошибка грамматики ANTLR
- 10. Миграция ANTLR v3 грамматики в ANTLR v4
- 11. ANTLR грамматики для цикла While
- 12. antlr "java.lang.NoSuchFieldError" о действии грамматики
- 13. Создание многомерных массивов из грамматики ANTLR
- 14. Извлечение грамматики из файла ANTLR g
- 15. Генерировать диаграммы BNF из грамматики antlr?
- 16. ANTLR Идентификатор грамматики для COBOL
- 17. Проблемы с Antlr грамматики (лексической)
- 18. ANTLR код для данной грамматики
- 19. Добавить исключение Обработка грамматики ANTLR
- 20. Разбор грамматики DECAF в ANTLR
- 21. Как разбить файл C на несколько файлов
- 22. ANTLR грамматики для SMT формул
- 23. Antlr 4 C# файлы грамматики
- 24. Как разбить файл на n из частей
- 25. Как разбить файл на несколько токенов
- 26. Компиляция ANTLR 3 грамматики в C
- 27. Как разбить текстовый файл на несколько файлов?
- 28. Как разбить файл linux на несколько файлов?
- 29. Как разбить файл Excel на несколько листов?
- 30. Как разбить файл Jquery.js на несколько файлов?
Да, версия, которую я использую, - antlr4.5-opt. Когда я пытаюсь ссылаться на правило в импортированной грамматике в основной грамматике, я получаю это сообщение об ошибке: ссылка на неопределенное правило: temp_rule (com.tunnelvisionlabs: antlr4-maven-plugin: 4.5: antlr4: default: generate-sources) –
попытайтесь уменьшить ваши импортированные и основные файлы грамматики до абсолютного минимума, просто чтобы продемонстрировать ошибку и добавить содержимое файла в ваш исходный вопрос – user3890638