[英]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.