2017-11-27 8 views
0

指定された文法を使って、 "To be finalized ..."という行までファイル情報の下で正常に解析されました。しかし、 "完了するために..."の後にさらにデータを受け取ると、パーサは1-3レコードをスキップし、出力では最初のヘッダーと最後の2レコード(4-5)が得られます。繰り返しテキストに対してANTLR4解析が機能しない

質問:質問:すべてのデータを解析できるように、文法を変更するにはどうすればよいですか?

は、テキスト解析: は非常にあなたは、以下の問題に光に感謝(Javaで地図になるように、ここでは各レコード)

+++ AV_AW_GER_1111_SpringShop  2017-10-09 12:00:00 
O&M #58513 
%%/*123456*/FUN TEST:REC=ALL,SD=2017&10&02,ST=03&01&01,CLRSD=2017&10&09,CLRST=08&10&00;%% 
RETCODE = 0 Operation succeeded 

1RECORD 11111  Creat  Warning   KRAN  14758 Signaling 
    Sync serial No. = 121212 
      Record name = Cell PCI Conflict 
    Record raised time = 2017-11-14 12:15:41 
     Place info = Local Cell ID=1, Cell Name=AO_5655_56551_L1_B, eNodeB ID=15655, Cell ID=1, NB-IoT Cell Flag=FALSE 

2RECORD 22222  Creat  Major   KRAN  52896 Environment 
    Sync serial No. = 231123 
      Record name = Intruder Record 
    Record raised time = 2017-11-14 13:00:09 
     Place info = Cabinet No.=0, Subrack No.=0, Slot No.=19, Port No.=2, Board Type=UPEU 

3RECORD 33333  Creat  Major   KRAN  36369 Environment 
    Sync serial No. = 340434 
      Record name = Intruder Record 
    Record raised time = 2017-11-14 12:58:40 
     Place info = Cabinet No.=0, Subrack No.=0, Slot No.=19, Port No.=2, Board Type=UPEU 
(Number of results = 3) 

To be finalized... 

--- END 

+++ QW_ER_TY_2222_SpringPool  2017-11-20 13:29:34 
O&M #89874 
%%/*012567*/FUN TEST:REC=ALL,SD=2017&10&02,ST=03&01&01,CLRSD=2017&10&09,CLRST=08&10&00;%% 
RETCODE = 0 Operation succeeded 

4RECORD 55555  Creat  Warning   KRAN  14736 Signaling 
    Sync serial No. = 45585 
      Record name = Cell PCI Conflict 
    Record raised time = 2017-11-14 12:15:41 
     Place info = Local Cell ID=1, PCI Value=408, Conflict Type=Confusion, NB-IoT Cell Flag=FALSE 
     Result type = Normally cleared 

5RECORD 44444  Creat  Major   KRAN  65137 Environment 
    Sync serial No. = 99999 
      Record name = Intruder Record 
    Record raised time = 2017-11-14 12:58:40 
     Place info = Cabinet No.=0, Subrack No.=0, Slot No.=19, Port No.=2, Board Type=UPEU 
     Result type = Normally cleared 
(Number of results = 2) 

2 reports in total 

--- END 

文法:

rspAlarm: 
     alarmResponse alarmResponse1 EOF; 
alarmResponse: 
    header recordAlarm+ (COMPLEX_FLAG EOL)? TERMINATOR EOL; 
alarmResponse1: 
     header recordAlarm+ TERMINATOR EOL; 
recordAlarm: 
    completionStatus|(title SPACE* EOL)|(SPACE* keyValue '=' SPACE* value EOL)|TOTAL|EOL ; 
header: 
    connectInfo server_code FUNCTION EOL responseIdentification; 
connectInfo: 
    '+++' SPACE+ STRING (SPACE STRING|NUMBER)? SPACE+ timeStamp EOL*; 
timeStamp: 
    DATE EOL; 
server_code: 
    'O&M' SPACE+ HUSH NUMBER+ EOL; 
responseIdentification: 
     'RETCODE' SPACE '=' SPACE codeStatus SPACE+ completionStatus; 
codeStatus: 
    NUMBER; 
completionStatus: 
    COMPLETION_CODE EOL; 
title: 
    (STRING|NUMBER) (SPACE+ (STRING|NUMBER))*; 
keyValue: 
    ((STRING|NUMBER) SPACE*)+; 
value: 
    ((STRING|NUMBER|DATE|HUSH) SPACE*)+; 

NUMBER:('-')?[0-9]+; 
DATE:NUMBER+'-'NUMBER+'-'NUMBER+SPACE+NUMBER+':'NUMBER+':'NUMBER+; 
STRING:[a-zA-Z0-9\-\'\&\_\@\=\.\:\,\(\)\/]+; 
FUNCTION:[\%][\%](.*)[\%][\%]; 
COMPLETION_CODE:('Success'|'Operation succeeded.'|'No record exists'|'Invalid command,it is inexecutable.'|) EOL; 
TOTAL:'(Number of results = ' NUMBER ')'; 
COMPLEX_FLAG:('To be finalized...'); 
TERMINATOR :('--- END'); 
DASH:[\-]+; 
PLUS:[\+][\+][\+]; 
EOL:'\r'?'\n'; 
SPACE:' '; 
HUSH:[\#]; 
WS:('\t'|'\n'|'\r')->skip; 

出力:

+++ AV_AW_GER_1111_SpringShop  2017-10-09 12:00:00 
O&M #58513 
%%/*123456*/FUN TEST:REC=ALL,SD=2017&10&02,ST=03&01&01,CLRSD=2017&10&09,CLRST=08&10&00;%% 
RETCODE = 0 Operation succeeded 

And Record 4 and 5 + details after. 

パーサーは、レコード1-3をスキップしていますが、すべてのファイルが読み込まれています。

+0

ANTLR 4.6を使用して'STRING'、' FUNCTION'などに9つの '無効なエスケープシーケンス'エラーがあります。投稿された文法はあなたのために働いていますか? – BernardK

+0

ええ、それは私の仕事、@ BernardK – Kris

答えて

0

私はトークン「FUNCTION」は、すべてのレコードは、あなたのケースであなたは貪欲でないルールを使用する必要があり、次のことを試して消費することだと思う:

FUNCTION:[\%][\%](.*?)[\%][\%]; 

ノート疑問符

+0

ありがとう、@ gtosto、それは完璧に働いている!あなたの修正は構造全体に影響を与えました。貪欲なルールは最後の%%に達するまですべての行を消費していました。 – Kris

関連する問題