簡體   English   中英

如何在具有空值的antlr中生成語法是一種終止條件?

[英]how to genete a grammar in antlr with null is a terminating condoition?

identifier 
    : 'int' (ID|ID '=' INT) (','ID|','ID '=' INT)*';' '\n' identifier 
    | 'float' (ID|ID '=' FLOAT) (','ID|','ID '=' FLOAT)*';' '\n' identifier
    | 'char' (ID|ID '=' CHAR) (','ID|','ID '=' CHAR)*';' '\n' identifier
    | 'string' (ID|ID '=' STRING) (','ID|','ID '=' STRING)*';' '\n' identifier  
    ;

ID  :   ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
    ;

INT :   '0'..'9'+
    ;

FLOAT
    :   ('0'..'9')+ '.' ('0'..'9')* EXPONENT?
    |   '.' ('0'..'9')+ EXPONENT?
    |   ('0'..'9')+ EXPONENT
    ;
STRING
    :  '"' ( ESC_SEQ | ~('\\'|'"') )* '"'
    ;

CHAR:  '\'' ( ESC_SEQ | ~('\''|'\\') ) '\''
    ;

fragment
EXPONENT : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;

fragment
HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ;

fragment
ESC_SEQ
    :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
    |   UNICODE_ESC
    |   OCTAL_ESC
    ;

fragment
OCTAL_ESC
    :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')
    |   '\\' ('0'..'7') ('0'..'7')
    |   '\\' ('0'..'7')
    ;

fragment
UNICODE_ESC
    :   '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
    ;

我在antlr中返回此代碼,但未終止標識符該如何解決?

您的標識符語法規則沒有終止。 添加| '\\r' ? '\\n' | '\\r' ? '\\n' 那個規則的| '\\r' ? '\\n'

例如

identifier 
    : 'int' (ID|ID '=' INT) (','ID|','ID '=' INT)*';' '\n' identifier 
    | 'float' (ID|ID '=' FLOAT) (','ID|','ID '=' FLOAT)*';' '\n' identifier
    | 'char' (ID|ID '=' CHAR) (','ID|','ID '=' CHAR)*';' '\n' identifier
    | 'string' (ID|ID '=' STRING) (','ID|','ID '=' STRING)*';' '\n' identifier  
    | '\r\n';
    ;

或者你可以嘗試

identifier 
    : 'int' (ID|ID '=' INT) (','ID|','ID '=' INT)*';' '\n' identifier 
    | 'float' (ID|ID '=' FLOAT) (','ID|','ID '=' FLOAT)*';' '\n' identifier
    | 'char' (ID|ID '=' CHAR) (','ID|','ID '=' CHAR)*';' '\n' identifier
    | 'string' (ID|ID '=' STRING) (','ID|','ID '=' STRING)*';' '\n' identifier  
    | EOF
    ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM