2016-08-14 1 views
0

ich die Grammatik erstellen (siehe es unten) und wenn ich versuche, die Zeichenfolgenicht Zeichenfolge in der antlr4 Grammatik übergeben

Zeit zu validieren; 15 16 * * 1-5; 'muni_eval_comments_'yyyyMMdd_HHmmss'.csv';

haben folgende Fehlermeldung

Zeile 1 :, charPositionInLine: 57, msg: Fremd input 'CSV' Erwartung { ';', '-', '' '' ',. '_', ID}

Wo ich falsch liege und wie es zu beheben?

Grüße, Vladimir

lexer grammar FileTriggerLexer; 

@header { 
} 

STEP 
: 
    '/' INTEGER 
; 

SCHEDULE 
: 
    'Schedule' 
; 

SEMICOLON 
: 
    ';' 
; 

ASTERISK 
: 
    '*' 
; 

CRON 
: 
    'cron' 
; 

MARKET_CRON 
: 
    'marketCron' 
; 

COMBINED 
: 
    'combined' 
; 

FILE_FEED 
: 
    'FileFeed' 
; 

TIME: 'Time'; 

LBRACKET 
: 
    '(' 
; 

RBRACKET 
: 
    ')' 
; 

PERCENT 
: 
    '%' 
; 

INTEGER 
: 
    [0-9]+ 
; 


DASH 
: 
    '-' 
; 

DOUBLE_QUOTE 
: 
    '"' 
; 

QUOTE 
: 
    '\'' 
; 

SLASH 
: 
    '/' 
; 

DOT 
: 
    '.' 
; 

COMMA 
: 
    ',' 
; 

UNDERSCORE 
: 
    '_' 
; 

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

REGEX 
: 
    (
     ID 
     | DOT 
     | ASTERISK 
     | INTEGER 
     | PERCENT 
    )+ 
; 

WS 
: 
    [ \t\r\n]+ -> skip 
; 
/** 
* Define a grammar called Hello 
*/ 
grammar FileTriggerValidator; 

options 
    { 
    tokenVocab = FileTriggerLexer; 
} 

r 
: 
    (
     schedule 
     | file_feed 
     | time_feed 
    )+ 
; 

time_feed 
: 
    TIME SEMICOLON cron_part SEMICOLON file_name SEMICOLON 
; 

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

formatString 
: 
    source_host 
    (
     '%' source_host? 
    )* DOT source_host 
; 

regEx 
: 
    REGEX 
; 

source_host 
: 
    ID 
    (
     DASH ID 
    )* 
; 

file_feed_name 
: 
    FILE_FEED 
; 

source_file 
: 
    (
     ID 
     | DASH 
     | UNDERSCORE 
    )+ 
; 

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

schedule_defining 
: 
    cron 
    | market_cron 
    | combined_cron 
; 

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 DOUBLE_QUOTE RBRACKET 
; 

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

mic_defining 
: 
    ID 
; 

file_name 
: 
    (
     ID 
     | DOT 
     | QUOTE 
     | DASH 
     | UNDERSCORE 
    )+ 
; 

cron_list_element 
: 
    cron 
    | market_cron 
; 
// 

schedule_defined_string 
: 
    cron 
; 
// 

cron_part 
: 
    minutes hours days_of_month month week_days 
; 
// 

minutes 
: 
    INTEGER 
    | with_step_value 
; 
// 

hours 
: 
    INTEGER 
    | with_step_value 
; 
// 

int_list 
: 
    INTEGER 
    (
     COMMA INTEGER 
    )* 
; 

interval 
: 
    INTEGER DASH INTEGER 
; 
// 

days_of_month 
: 
    INTEGER 
    | with_step_value 
; 
// 

month 
: 
    INTEGER 
    | with_step_value 
; 
// 

week_days 
: 
    INTEGER 
    | with_step_value 
; 
// 

timezone 
: 
    timezone_part 
    (
     SLASH timezone_part 
    )? 
; 
// 

timezone_part 
: 
    ID 
    (
     UNDERSCORE ID 
    )? 
; 
// 

with_step_value 
: 
    (
     int_list 
     | interval 
     | ASTERISK 
    ) STEP? 
; 

Antwort

0

Ihr .csv Codefragment wurde als REGEX Token erkannt worden:

TIME SEMICOLON(;) INTEGER(15) INTEGER(16) ASTERISK(*) ASTERISK(*) 
INTEGER(1) DASH(-) INTEGER(5) SEMICOLON(;) QUOTE(') ID(muni) UNDERSCORE(_) 
ID(eval) UNDERSCORE(_) ID(comments) UNDERSCORE(_) QUOTE(') ID(yyyyMMdd) 
UNDERSCORE(_) ID(HHmmss) QUOTE(') REGEX(.csv) QUOTE(') SEMICOLON(;) EOF(<EOF>) EOF 

Aber file_name nicht REGEX Token enthält:

file_name 
: 
    (
     ID 
     | DOT 
     | QUOTE 
     | DASH 
     | UNDERSCORE 
    )+ 
; 

Versuchen Sie, schließe 01 ein-file_name Regel oder entfernen REGEX und regEx Parser-Regel verwenden Sie stattdessen:

regEx 
: 
    (
     ID 
     | DOT 
     | ASTERISK 
     | INTEGER 
     | PERCENT 
    )+ 
; 
Verwandte Themen