digraph "xml_states" {
	epsilon=0.0000001;
	maxiter=1000;
	start=3;
	center=1;
	size="7,8";
	edgehandles=0;
/*	rankdir=LR;*/
/*	ordering=out;*/

	"start" [shape = doublecircle];

	"start"	-> "tag"	[label="<"]
	"tag"	->	"tagexcl"	[label="!"]
	"tag"	->	"tag"	[label="ws"]

	"tagexcl"->	"swallowdtd" [label="D"]
	"swallowdtd"->	"start"  [label="ret"]
	"swallowdtd"->	"swallowdtd" [label="in dtd"]

	"tagexcl"->	"commentdash1"			[label="-"]
	"commentdash1"->	"commentdash2"	[label="-"]
	"commentdash2"->	"incomment"	[label="!-"]
	"commentdash2"->	"commentenddash1" [label="-"]

	"incomment"->"incomment"
	"incomment" -> "commentenddash1" [label="-"]
	"commentenddash1"	->	"incomment" [label="!-"]
	"commentenddash1"	->	"commentenddash2" [label="-"]
	"commentenddash2"	->	"incomment" [label="!-"]
	"commentenddash2"	->	"commentdone" [label=">"]
	"commentdone"	->	"start" [label="ret"]
	"tag"	->	"prolog"		    [label="?"]
	"prolog"	->	"prologq"     	[label="?"]
	"prolog"	-> "prolog"  [label="!?"]
	"prologq"	->	"prolog"         [label="!>"]
	"prologq"	->	"prologdone"                [label=">"]
	"prologdone"	->	"start" 
	"tag"	->	"tagnamestart"		[label="a..Z"]
	"tagnamestart"	->	"tagname"	[label="a..Z"]
	"tagnamestart"	->	"tagnamestart"		[label="ws"]
	"tagname"	->	"tagname"		[label="a..Z,0..9"]
	"tagname"	->	"tagnamedone"		[label="ws,/,>"]
	"tagnamedone"	->	"intag"		[label="ret"]
	"tag"		->	"tagclose"			[label="/"]
	"tagclose"	->	"tagclosenamestart"	[label="a..Z"]
	"tagclosenamestart"	->	"tagclosename"		[label="a..Z"]
	"tagclosenamestart"	->	"tagclosedone"	[label=">"]
	"tagclosename"	->	"tagclosename"	[label="a..Z"]
	"tagclosename"	->	"tagclosedone"	[label=">"]
	"tagclosedone"    -> "start"	[label="ret"]
	"start"		-> "whitespace" 				[label="ws"]
	"whitespace"			-> "whitespace" 	[label="ws"]
	"whitespace"			-> "whitespacedone" [label="!ws"]
	"whitespacedone"	-> "start" 				[label="ret"]

	"start"		-> "entitystart"				[label="&"]
	"entitystart"	-> "entity"					[label="!;"]
	"entity"	-> "entity"						[label="!;"]
	"entity"	-> "entitydone"					[label=";"]
	"entitydone"	-> "start"

	"start"			->	"word"					[label="."]
	"word"			-> "word"					[label="."]
	"word"			-> "worddone"				[label="<,ws,&"]
	"worddone"		-> "start"					[label="ret"]

	"intag"	-> "intag" [label="ws"]
	"intag"	-> "tagend"		[label=">"]
	"intag"	-> "empty"		[label="/"]
	"empty"			-> "empty"					[label="ws"]
	"empty"			->	"emptyend"				[label=">"]
	"intag"	-> "attstart"				[label="a..Z,0..9"]
	"attstart"		->	"attname"		[label="a..Z,0..9"]
	"attstart"		->	"attdone"		[label="ws,/,>"]
	"attname"		->	"attname"		[label="a..Z,0..9"]
	"attname"		->	"attdone"		[label="ws"]
	"attdone"		->	"intag"			[label="ws"]

	"attdone"		->	"att"			[label="ret"]

	"att"			->	"atteq" 		[label="="]
	"att"			->	"att"			[label="ws"]
	"att"			->	"intag"			[label="*"]

	"atteq"	    	 -> "atteq" 		[label="ws"]

	"atteq"	    	 -> "eqapos" 		[label="'"]
	"eqapos"		 -> "eqaposval"		[label="!'"]
	"eqapos"		 -> "eqaposvaldone" [label="'"]
	"eqaposval" 	 -> "eqaposval"		[label="!'"]
	"eqaposval" 	 -> "eqaposvaldone" [label="'"]
	"eqaposvaldone"  -> "intag"			[label="ret"]

	"atteq"	    	 -> "eqquot" 		[label="\""]
	"eqquot"		 -> "eqquotval"		 [label="!\""]
	"eqquot"		 -> "eqquotvaldone" [label="\""]
	"eqquotval" 	 -> "eqquotval"		[label="!\""]
	"eqquotval" 	 -> "eqquotvaldone" [label="\""]
	"eqquotvaldone"  -> "intag"			[label="ret"]

	"atteq"	    	 -> "eqval"  [label="!ws"]
	"eqval" 	 	 -> "eqval"       [label="!ws"]
	"eqval" 	 	 -> "eqvaldone"   [label="ws"]
	"eqvaldone"  	 -> "intag"       [label="ret"]


	"tagend" 	    -> "start"
	"emptyend" 	    -> "start"

}
