2015-12-21 6 views
-2

Я планирую создать парсер, который анализирует только конкретный формат, как показано ниже.Как сделать парсер после создания файла parser.java с помощью ANTLR4?

Dec 17 14:00:00 IP firewall,info FFFW forward: in:<pppoe-mm.demo.649> out:sfp-sfpplus1.vlan113, proto TCP (ACK,PSH), IP:PORT->IP:PORT, NAT (IP:PORT->IP:PORT)->IP:PORT, len 250 

Это один из журналов для маршрутизатора. Я наивный разработчик. И только что встретил ANTLR4 несколько дней назад. Используя ANTLRWorks2, я проверил свою грамматику. Я создал lexer и parser - два класса с использованием ANTLR4. Отныне я не знаю, что делать. Пожалуйста, направляйте.

Я предполагаю, что мне нужно создать другой java-файл, который импортирует файл parser.java, и в этом файле мне приходится писать логику парсера.

Я прилагаю грамматический файл здесь.

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 

grammar Hello; 

r : MONTH ID TIME IP X UNAME Y PROTOCOL Z FULLIP SEP FULLIP W FULLIP SEP FULLIP V SEP FULLIP P;   // match keyword hello followed by an identifier 
MONTH:[A-Z][a-z]+; 
ID : [0-9]+ ;    // match lower-case identifiers 
TIME : ID SEPERATOR ID SEPERATOR ID; 
SEPERATOR: [:] | [.]; 
SEP: [-][>] ; 
IP: ID SEPERATOR ID SEPERATOR ID SEPERATOR ID ; 
FULLIP: IP SEPERATOR ID/*Port*/ ; 
X: [a-z]+[,][a-z]+[ ][A-Z]+[ ][a-z]+[:][ ][a-z]+[:][<] ; 
UNAME: [a-z]+[-][a-z]+[.][a-z]+[.][0-9]+ ; 
Y: [>][ ][a-z]+[:][a-z]+[-][a-z]+[0-9][.][a-z]+[0-9]+[,][ ][a-z]+[ ] ; 
PROTOCOL: [A-Z]+ ; 
Z: [(][A-Z]+[,][A-Z]+[)][,]; 
W: [,][ ][A-Z]+[ ][(] ; 
V: [)]; 
P: [,][ ][a-z]+[ ][0-9]+ ; 
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines, \r (Windows) 
+1

Купите книгу. Он отвечает на ваш вопрос подробно, плюс намного больше. «Окончательный ANTLR 4 Reference» в пар. –

ответ

0

Получите дерево синтаксиса из вашего синтаксического анализатора, а затем пройдите его с помощью посетителя.

+0

Спасибо. Но, мой вопрос, что делать после получения файла парсера. Нужно ли создавать другой .java-файл для ввода и использовать файл parser.class? И, пожалуйста, укажите один подходящий пример файла парсера. –

+0

Я не понимаю ваш вопрос. Пожалуйста, посмотрите [недавний проект, который я использовал с использованием ANTLR4] (https://bitbucket.org/peturingi/trains/src/eb4434d5fcc0?at=master). RailSystem является основным классом в этом проекте. Модульные тесты также могут помочь вам лучше понять это. Сеть - это один парсер, TrainRoute - другой. Я мог бы лучше помочь вам, если бы вы связали последующие вопросы с моим исходным кодом. –

 Смежные вопросы

  • Нет связанных вопросов^_^