1. C++ / Говнокод #6047

    +159

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    bool Document::_Parse_Auto (char sym)
    	{
    		bool error = 0;
    
    		switch (mInfo.AutoState)
    		{
    		case 0:
    			{
    				if (is_stag (sym))
    					mInfo.AutoState = 1;
    				else
    					mInfo.AutoState = 14;
    				break;
    			}
    		case 1:
    			{
    				if (is_name (sym))
    					mInfo.AutoState = 24;
    				else if (is_delim (sym))
    					mInfo.AutoState = 2;
    				else if (is_prcom (sym))
    					mInfo.AutoState = 11;
    				else if (is_info (sym))
    					mInfo.AutoState = 25;
    				else if (is_ekey (sym))
    					mInfo.AutoState = 21;
    				else
    					error = true;
    				break;
    			}
    <100500 строк case'ов>
    		case 26:
    			{
    				if (is_etag (sym))
    					mInfo.AutoState = 0;
    				else
    					error = true;
    				break;
    			}
    		}
    
    		return error;
    	}
    
    	void Document::_Parse_React (char sym)
    	{
    		switch (mInfo.AutoState)
    		{
    		case 0:
    			{
    				switch (mInfo.NodeType)
    				{
    				case ParseInfo::preproc:
    					{
    						delete mInfo.CurrentNode;
    						mInfo.CurrentNode = mInfo.LastTextNode;
    						break;
    					}
    				case ParseInfo::info:
    					{
    						delete mInfo.CurrentNode;
    						mInfo.CurrentNode = mInfo.LastTextNode;
    						break;
    					}
    				case ParseInfo::close:
    					{
    						
    						if (mInfo.name == mInfo.CurrentNode->name)
    							mInfo.CurrentNode = mInfo.CurrentNode->parent;
    						else
    						{ mInfo.Error = 51; return; }
    
    						mInfo.name.clear ();
    						break;
    					}
    				}
    				break;
    			}
    <ещё 100500 строк case'ов>
    		case 25:
    			{
    				mInfo.NodeType = ParseInfo::info;
    				mInfo.LastTextNode = mInfo.CurrentNode;
    				mInfo.CurrentNode = new Node;
    				break;
    			}
    		}
    
    		switch (mInfo.LastAutoState)
    		{
    <и ещё 100500 строк case'ов>

    Это я в 10 классе писал XML парсер, работающий на конечном автомате, в котором было 27 состояний.

    Запостил: YuraTim, 20 Марта 2011

    Комментарии (10) RSS

    Добавить комментарий