ANTLR4, ParseTree works in another way that parser

27 views
Skip to first unread message

vladimir kozhaev

unread,
Sep 7, 2016, 8:36:26 AM9/7/16
to antlr-discussion
Hi all I have create the grammar. See it bellow. When I parse the string

MarketTime;0 8 * * 1-5 America/New_York;'agency.asmp.'yyyyMMdd;America/New_York;_249;1

See that substring 

'agency.asmp.'yyyyMMdd;America/New_York

is parsed as file name, then as notSemicolon

"_249" as timezone and only ";1" as id_or_int_list 

But, when I use ParseTree eclipse view I have parsed mentonied string correctly

Where I'm wrong?
 Regards, Vladimir 



 
/*File trigger validator lexer */
 lexer grammar
FileTriggerLexer;

 CRON
 
:
 
'cron'
 
;

 MARKET_CRON
 
:
 
'marketCron'
 
;

 COMBINED
 
:
 
'combined'
 
;

 FILE_FEED
 
:
 
'FileFeed'
 
;

 MANUAL_NOTICE
 
:
 
'ManualNotice'
 
;

 TIME
 
:
 
'Time'
 
;

 MARKET_TIME
 
:
 
'MarketTime'
 
;

 SCHEDULE
 
:
 
'Schedule'
 
;

 PRODUCT
 
:
 
'Product'
 
;

 UCA_CLIENT
 
:
 
'UCAClient'
 
;

 APEX_GSM
 
:
 
'ApexGSM'
 
;

 DELAY
 
:
 
'Delay'
 
;

 CATEGORY
 
:
 
'Category'
 
;

 EXCHANGE
 
:
 
'Exchange'
 
;

 CALENDAR_EXCHANGE
 
:
 
'CalendarExchange'
 
;

 FEED
 
:
 
'Feed'
 
;

 RANGE
 
:
 
'Range'
 
;

 SYNTH
 
:
 
'Synth'
 
;

 TRIGGER
 
:
 
'Trigger'
 
;

 DELAYED_TRIGGER
 
:
 
'DelayedTrigger'
 
;

 INTRA_TRIGGER
 
:
 
'IntraTrigger'
 
;

 CURRENT_TRIGGER
 
:
 
'CurrentTrigger'
 
;

 CALENDAR_FILE_FEED
 
:
 
'CalendarFileFeed'
 
;

 PREVIOUS
 
:
 
'Previous'
 
;

 LATE_DELAY
 
:
 
'LateDelay'
 
;

 BUILD_ARCHIVE
 
:
 
'BuildArchive'
 
;

 COMPRESS
 
:
 
'Compress'
 
;

 LATE_TIME
 
:
 
'LateTime'
 
;

 CALENDAR_CATEGORY
 
:
 
'CalendarCategory'
 
;

 APEX_GPM
 
:
 
'ApexGPM'
 
;

 PORTFOLIO_NOTICE
 
:
 
'PortfolioNotice'
 
;

 FIXED_TIME_OF_DAY
 
:
 
'fixedTimeOfDay'
 
;

 DELTA
:'delta';

 
Delta:'Delta';


 MARKET_CLOSE
:'marketClose';

 MARKET_OPEN
:'marketOpen';

 X_BUSINESS_DAY
:'xBusinessDay';

 X_CALENDAR_DAY
:'xCalendarDay';

 SEMICOLON
 
:
 
';'
 
;

 ASTERISK
 
:
 
'*'
 
;

 LBRACKET
 
:
 
'('
 
;

 RBRACKET
 
:
 
')'
 
;

 PERCENT
 
:
 
'%'
 
;

 DASH
 
:
 
'-'
 
;

 DOUBLE_QUOTE
 
:
 
'"'
 
;

 QUOTE
 
:
 
'\''
 
;

 SLASH
 
:
 
'/'
 
;

 DOT
 
:
 
'.'
 
;

 COMMA
 
:
 
','
 
;

 UNDERSCORE
 
:
 
'_'
 
;

 EQUAL
 
:
 
'='
 
;

 MORE_THAN
 
:
 
'>'
 
;

 LESS
 
:
 
'<'
 
;

 INTERVAL
 
:
 INTEGER DASH INTEGER
 
;

 INTEGER
 
:
 
[0-9]+
 
;


 ID
 
:
 
[_a-zA-Z] [_a-zA-Z0-9]*
 
;

 WS
 
:
 
[ \t\r\n]+ -> skip
 
;

/**
 * Define Fied Trigger valdiator grammar
 */

grammar
FileTriggerValidator;

options
 
{
 tokenVocab
= FileTriggerLexer;
}

r
:
 
(
 schedule
 
| file_feed
 
| time_feed
 
| market_time_feed
 
| manual_notice
 
| range
 
| not_checked
 
)+
;
range
: RANGE (SEMICOLON cron)+ ;


manual_notice
:
 MANUAL_NOTICE SEMICOLON file_name SEMICOLON timezone
;

time_feed
:
 TIME SEMICOLON cron_part
 
(
 timezone
?
 
) SEMICOLON file_name SEMICOLON timezone
;

market_time_feed
:
 MARKET_TIME SEMICOLON cron_part timezone SEMICOLON file_name SEMICOLON
 timezone id_or_int_list

;

id_or_int_list
:(
 SEMICOLON
(ID|INTEGER)
 
)*;


file_feed
:
 file_feed_name SEMICOLON source_file SEMICOLON source_host SEMICOLON
 source_host SEMICOLON notSemicolon SEMICOLON notSemicolon
 
(
 SEMICOLON source_host
 
)*
;

source_host
:
 ID
 
(
 
(DASH|SLASH) ID
 
)*
;



file_feed_name
:
 FILE_FEED
;

source_file
:
 
(
 ID
 
| DASH
 
| UNDERSCORE
 
)+
;

schedule
:
 SCHEDULE SEMICOLON schedule_defining SEMICOLON file_name SEMICOLON timezone
 
(
 SEMICOLON DASH
? INTEGER
 
)*
;

schedule_defining
:
 cron
 
| market_cron
 
| combined_cron
 
| other_schedule
;
other_schedule
:(FIXED_TIME_OF_DAY|DELTA|MARKET_CLOSE|MARKET_OPEN|X_BUSINESS_DAY|X_CALENDAR_DAY) notSemicolon
 
;


cron
:
 CRON LBRACKET DOUBLE_QUOTE cron_part timezone
? DOUBLE_QUOTE RBRACKET
;

market_cron
:
 MARKET_CRON LBRACKET DOUBLE_QUOTE cron_part timezone DOUBLE_QUOTE COMMA
 DOUBLE_QUOTE
(ID|INTEGER) DOUBLE_QUOTE RBRACKET
;

combined_cron
:
 COMBINED LBRACKET cron_list_element
 
(
 COMMA cron_list_element
 
)* RBRACKET
;



file_name
:
 notSemicolon
;

cron_list_element
:
 cron
 
| market_cron
;
//


cron_part
:
 minutes hours days_of_month month week_days
;
//

minutes
:
 cron_part_list
;

hours
:
 cron_part_list
;
//

days_of_month
:
 cron_part_list
;
//

month
:
 cron_part_list
;
//

week_days
:
 cron_part_list
;
//

timezone
:
 timezone_part
 
(
 SLASH timezone_part
 
)?
;
//

timezone_part
:
 ID
 
(
 UNDERSCORE ID
 
)?
;
//

cron_part_list
 
: int_list_part+
 
;


int_list_part
:int_list_value (COMMA int_list_value)*;

int_list_value
:INTEGER|ASTERISK (SLASH INTEGER)?|INTERVAL;

not_checked
:
 
(
 PRODUCT
 
| UCA_CLIENT
 
| APEX_GSM
 
| APEX_GPM
 
| DELAY
 
| CATEGORY
 
| CALENDAR_CATEGORY
 
| EXCHANGE
 
| CALENDAR_EXCHANGE
 
| FEED
 
| SYNTH
 
| TRIGGER
 
| DELAYED_TRIGGER
 
| INTRA_TRIGGER
 
| CURRENT_TRIGGER
 
| CALENDAR_FILE_FEED
 
| PREVIOUS
 
| LATE_DELAY
 
| LATE_TIME
 
| COMPRESS
 
| BUILD_ARCHIVE
 
|PORTFOLIO_NOTICE
 
|DELTA
 
|Delta
 
)
 
(
 SEMICOLON anyList
 
)?
;

anyList
:
 notSemicolon
 
(
 SEMICOLON notSemicolon
 
)*
;

notSemicolon
:
 
(~';')+;




 
Reply all
Reply to author
Forward
0 new messages