All pastes #283044 Raw Edit

Mine

public text v1 · immutable
#283044 ·published 2006-12-18 01:22 UTC
rendered paste body
/** A Java 1.5 grammar for ANTLR v3 derived from the spec
 *
 *  This is a very close representation of the spec; the changes
 *  are comestic (remove left recursion) and also fixes (the spec
 *  isn't exactly perfect).  I have run this on the 1.4.2 source
 *  and some nasty looking enums from 1.5, but have not really
 *  tested for 1.5 compatibility.
 *
 *  I built this with: java -Xmx100M org.antlr.Tool java.g 
 *  and got two errors that are ok (for now):
 *  java.g:691:9: Decision can match input such as
 *    "'0'..'9'{'E', 'e'}{'+', '-'}'0'..'9'{'D', 'F', 'd', 'f'}"
 *    using multiple alternatives: 3, 4
 *  As a result, alternative(s) 4 were disabled for that input
 *  java.g:734:35: Decision can match input such as "{'$', 'A'..'Z',
 *    '_', 'a'..'z', '\u00C0'..'\u00D6', '\u00D8'..'\u00F6',
 *    '\u00F8'..'\u1FFF', '\u3040'..'\u318F', '\u3300'..'\u337F',
 *    '\u3400'..'\u3D2D', '\u4E00'..'\u9FFF', '\uF900'..'\uFAFF'}"
 *    using multiple alternatives: 1, 2
 *  As a result, alternative(s) 2 were disabled for that input
 *
 *  You can turn enum on/off as a keyword :)
 *
 *  Version 1.0 -- initial release July 5, 2006 (requires 3.0b2 or higher)
 *
 *  Primary author: Terence Parr, July 2006
 *
 *  Version 1.0.1 -- corrections by Koen Vanderkimpen & Marko van Dooren,
 *      October 25, 2006;
 *      fixed normalInterfaceDeclaration: now uses typeParameters instead
 *          of typeParameter (according to JLS, 3rd edition)
 *      fixed castExpression: no longer allows expression next to type
 *          (according to semantics in JLS, in contrast with syntax in JLS)
 */
grammar XML;

// LEXER


 XMLDECL :
        '<?' ('x'|'X') ('m'|'M') ('l'|'L') WS? ( ATTRIBUTE WS? )*  '?>'{$channel=HIDDEN;}
	;

 DOCTYPE
    :
        '<!DOCTYPE' WS rootElementName=GENERIC_ID WS
        ( 
            ( 'SYSTEM' WS sys1=VALUE
                
            | 'PUBLIC' WS pub=VALUE WS sys2=VALUE  
            )
            ( WS )?
        )?
        ( dtd=INTERNAL_DTD)?
		'>'
	;

 INTERNAL_DTD : '[' (options {greedy=false;} : .)* ']' ;

 PI :
        '<?' target=GENERIC_ID WS?  ( ATTRIBUTE WS? )*  '?>'
	;



 START_TAG 
    : '<' WS? name=GENERIC_ID WS?( ATTRIBUTE WS? )* '>'
    ;

 EMPTY_ELEMENT 
    : '<' WS? name=GENERIC_ID WS?( ATTRIBUTE WS? )* '/>'
    ;

 ATTRIBUTE 
    : name=GENERIC_ID WS? '=' WS? value=VALUE
    ;

 END_TAG 
    : '</' WS? name=GENERIC_ID WS? '>'
    ;

 COMMENT
	:	'<!--' (options {greedy=false;} : .)* '-->'
	;

 CDATA
	:	'<![CDATA[' (options {greedy=false;} : .)* ']]>'{$channel=HIDDEN;}
	;

 PCDATA : (~'<')+ ; 

 VALUE : 
        ( '\"' (~'\"')* '\"'
        | '\'' (~'\'')* '\''
        )
	;

 GENERIC_ID 
    : ( LETTER | '_' | ':') 
        ( options {greedy=true;} : LETTER | '0'..'9' | '.' | '-' | '_' | ':' )*
	;

 LETTER
	: 'a'..'z' 
	| 'A'..'Z'
	;

WS  :  (' '|'\r'|'\t'|'\u000C'|'\n') {$channel=HIDDEN;}
    ;
	
LINE_COMMENT
    : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
    ;