Advertisement
_egorka_

analizator)

Dec 9th, 2019
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.56 KB | None | 0 0
  1. // Написать программу которая проверяет на корректность целые переменные и массивы char
  2. /* План
  3. * 1. Поиск первого инта в текстовике.
  4. * 1.1 Разделение изначального массива на кусок с нужными интами. Готово.
  5. * 2. Проверка на точку с запятой. Если не находит-программа вырубается. Готово.
  6. * 3. Проверка на количество слов int/char в строке. Если больше одного-программа вырубается. Готово.
  7. * 4. Проверка на
  8. * 5. И тд проверки до ...
  9. * 5.1
  10. */
  11. //
  12. #include <iostream>// поиск вызов поверки..
  13. #include <math.h>
  14. #include <fstream>
  15. #include <string.h>
  16.  
  17. using namespace std;
  18. char s[1000];
  19. int j;
  20.  
  21. //функции int
  22. int cheking_point_int(int n)// проверка на точку с запятой (работает)
  23. {
  24. int kol=0; int i,error_point = 0;
  25. // место где начинается синтаксис переменных
  26.  
  27.  
  28. for(i = 0; i<=n; i++)
  29. {
  30. //проверка на точку с запятой ";"
  31. if(s[i]==';' && s[i+1]=='\n')//if(s[i]==';' && s[i+1]=='\n')
  32. kol++;
  33. }
  34. cout<<"Kolvo strok="<<kol<<endl;
  35. for (i=1;i<=n;i++)
  36. if ((s[i]=='\n')&&(s[i-1]!=';')){
  37. error_point=1;
  38. break;}
  39.  
  40. return error_point;
  41. }
  42. int counter_int (int n){
  43. int error=0,k=0,i;
  44. for (i=0;i<n;i++) {
  45. if((s[i] == 'i' && s[i+1] == 'n' && s[i+2] == 't')||(s[i-2]!=';' && s[i] == 'i' && s[i+1] == 'n' && s[i+2] == 't'))
  46. k++;
  47. if((s[i] == '\n') && (k>1))
  48. {
  49. cout<<"Bad!"<<endl;
  50. k=0;
  51. error=1;
  52. break;
  53. }
  54. if ((s[i]=='\n')&&(k<=1)) {
  55. cout<<"Good!"<<endl;
  56. k=0; }
  57. }
  58.  
  59. return error;
  60. }
  61. int perezapis_int (char* c, int n)// перезапись
  62. {
  63. int error = 0, k = 0, i;
  64. j = 0;
  65. for (i=0;i<=n;i++)
  66. if (((c[i]=='i')&&(c[i+1]=='n')&&(c[i+2]=='t'))||((c[i]=='c')&&(c[i+1]=='h')&&(c[i+2]=='a')&&(c[i+3]=='r'))){
  67. k=i;
  68. break;}
  69. if ((k!=0)||(k==0)) {//(k!=0) ошибка будет тут
  70. for (i=k;i<=n;i++){
  71. s[j]=c[i];
  72. j++;}
  73. }
  74. else {
  75. cout<<"BiG ProbleM"<<endl;
  76. exit(0);
  77. }
  78. return j;
  79. }
  80. int cheking_correct_int(int n)//число в начале перменной
  81. {
  82. int error = 0, i = 0;
  83. for (i=0;i<n;i++)
  84. if(((s[i]>=48)&&(s[i]<=57))&&(s[i-1]==32))
  85. {
  86. error = 1;
  87. break;
  88. }
  89. return error;
  90. }
  91. int cheking_int(int n)//счетчик int (но тут должна быть проверка корректного написания int)
  92. {
  93. int error=0, i, k = 0;
  94. for(i=0;i<n;i++)
  95. {
  96. if(s[i] == 'i' && s[i+1] == 'n' && s[i+2] == 't')
  97. {
  98. k++;
  99. }
  100. }
  101. cout<<"colli4estvo int: "<<k<<endl;
  102. if(k>=0)
  103. {
  104. error = 0;
  105. }
  106. return error;
  107. }
  108. int cheking_pavno(int n)//присвоение значений без пробелов (вроде работает)
  109. {
  110. int error=0, i;
  111. for(i=0;i<n;i++)
  112. {
  113. if(s[i]=='=')
  114. {
  115. while((s[i]!=',')||(s[i]!=';'))
  116. {
  117. if(((s[i+1]>=48) && (s[i+1]<=57))||((s[i+2]>=48) && (s[i+2]<=57)))// диапозон целочисленных значений ascii
  118. {
  119. cout << "Diapozon norm" << endl;
  120. break;
  121. }
  122. else
  123. {
  124. cout << "Diapozon ne norm"<< endl;
  125. error = 1;
  126. break;
  127.  
  128. }
  129. }
  130. }
  131. }
  132. return error;
  133. }
  134. int check_for_assignment_of_int_values(int n)//проверка на присвоение переменной значений (целые числа)
  135. {
  136. int error=0, i;
  137. for(i=0;i<n;i++)
  138. {
  139. if(s[i]=='=')
  140. {
  141. while((s[i+1]!=';')&&(s[i+1]!=','))//while(s[i+1]!=';')
  142. {
  143. if(((s[i+1]>=48) && (s[i+1]<=57))||s[i+1]=='-')
  144. {
  145. //cout<<s[i+1]<<endl;
  146. }
  147. else
  148. {
  149.  
  150. error = 1;
  151. break;
  152. }
  153. i++;
  154. }
  155.  
  156. }
  157. }
  158. return error;
  159. }
  160. int checking_for_variables(int n)// проверка на запятаю между переменными (оч сложная штука)нет! ничего сложного не бывает.Я нормальный.
  161. {
  162. int error = 0, i;
  163. for(i=0;i<n;i++)
  164. {
  165. if(s[i]==' ')
  166. {
  167. //cout<< "!!!!!!!: " << s[i-1] << endl;
  168. if((s[i-1]==',')||(s[i-1]=='t')||(s[i-1]=='r')||(s[i-1]=='\n'))// если будет ошибка скорее всего она сдесь
  169. {
  170.  
  171. }
  172. else
  173. {
  174. error = 1;
  175. break;
  176. }
  177. }
  178. }
  179. return error;
  180. }
  181. //функции char
  182. int cheking_char(int n)// проверка на колличество скобочек [] и {}
  183. {
  184. int error=0, i, t = 0, y = 0;
  185. for(i=0;i<n;i++)
  186. {
  187. if(s[i]=='[')
  188. {
  189. t = t + 1;
  190. }
  191. if(s[i]==']')
  192. {
  193. t = t + 1;
  194. }
  195. if(s[i]=='{')
  196. {
  197. y = y + 1;
  198. }
  199. if(s[i]=='}')
  200. {
  201. y = y + 1;
  202. }
  203.  
  204. }
  205. if(t%2 == 0) //если t чётное
  206. {
  207. cout<<"skobki norm"<<endl;
  208. }
  209. else
  210. {
  211. error=1;
  212. }
  213. if(y%2 == 0) //если t чётное
  214. {
  215. cout<<"skobki norm"<<endl;
  216. }
  217. else
  218. {
  219. error=1;
  220. }
  221.  
  222.  
  223. return error;
  224. }
  225. int checking_for_numbers_in_parenthesis_char(int n)//проврека на размерность массива
  226. {
  227. int error=0, i, r;
  228. for (i=0;i<n;i++)
  229. {
  230. if(s[i]=='[')
  231. {
  232. while(s[i+1]!=']')
  233. {
  234. if((s[i+1]>=48)&&(s[i+1]<=57))
  235. {
  236.  
  237. }
  238. else
  239. {
  240. error = 1;
  241. break;
  242. }
  243. // cout << s[i+1] << endl;
  244. i++;
  245. }
  246. }
  247. }
  248. return error;
  249. }
  250. int checking_for_the_first_character_of_an_array(int n)// проверка на символ перед скобочкой массива
  251. {
  252. int error=0, i=0, score = 1;
  253. for(i=0; i<n; i++)
  254. {
  255. if(s[i]=='[')
  256. {
  257. if(s[i-1]>=97 && s[i-1]<=122)// 97 122
  258. {
  259. score = 0;
  260. }
  261. else
  262. {
  263. error = 1;
  264. break;
  265. }
  266. }
  267. }
  268. return error;
  269. }
  270.  
  271. int main()
  272. {
  273. ifstream ttt;
  274. int error1 = 0, n = 0, i = 0, rrr = 0;
  275. char c[1000],buff;
  276. ttt.open("C:\\Users\\User\\Desktop\\aaa.txt",ios::in);
  277. if (!ttt.is_open()){
  278. cout<<"error opening file";
  279. }
  280. else{
  281. while (ttt >> noskipws >> buff)
  282. {
  283. c[i] = buff;
  284. i++;
  285. n++;
  286. }
  287.  
  288. cout<<"Mystrign is:"<<endl;
  289. cout << endl;
  290. ttt.close();
  291. rrr = rrr+n;
  292. for (i = 0; i < rrr ; i++)
  293. {
  294. cout << c[i];
  295. }
  296. cout << endl;
  297. cout << "coll elem vsego: " << n << endl;
  298. //вызоы функции перезаписи
  299. n = perezapis_int(c,n);
  300. cout << "coll elem new: " << n << endl;
  301. cout<<endl;
  302. cout<<"My new string: "<<endl;
  303. cout<<endl;
  304. for (i = 0; i < n-1 ; i++)
  305. {
  306. cout << s[i];// s[i] с ключегого слова
  307. }
  308. cout<<endl;
  309. //вызовы функций проверки int
  310. error1=cheking_point_int(n);
  311. if (error1==0) {
  312. cout << "First stage is good!"<<endl;
  313. }
  314. else {
  315. cout<<"Error! Exit."<<endl;
  316. exit(0);
  317. }
  318. //
  319. error1=counter_int(n);
  320. if (error1==0) {
  321. cout << "Second stage is good!"<<endl;
  322. }
  323. else {
  324. cout<<"Error! Exit."<<endl;
  325. exit(0);
  326. }
  327. //
  328. error1=cheking_correct_int(n);
  329. if (error1==0) {
  330. cout << "Third stage is good!"<<endl;
  331. }
  332. else {
  333. cout<<"Error! Exit."<<endl;
  334. exit(0);
  335. }
  336. //
  337. error1=cheking_int(n);
  338. if (error1==0) {
  339. cout << "Third stage is good!"<<endl;
  340. }
  341. else {
  342. cout<<"Error! Exit."<<endl;
  343. exit(0);
  344. }
  345. // присвоение значений целому типу переменных int = 2323;
  346. error1=cheking_pavno(n);
  347. if(error1==0){
  348. cout << "Third stage is good!" << endl;
  349. }
  350. else{
  351. cout<<"Error! Exit."<<endl;
  352. exit(0);
  353. }
  354. error1=check_for_assignment_of_int_values(n);
  355. if(error1==0){
  356. cout << "Third stage is good!" << endl;
  357. }
  358. else{
  359. cout<<"Error! Exit."<<endl;
  360. exit(0);
  361. }
  362. //вызовы функций проверки char
  363. // проверка на скобочки []
  364. error1=cheking_char(n);
  365. if(error1==0){
  366. cout << "Third stage is good!" << endl;
  367. }
  368. else{
  369. cout<<"Error! Exit."<<endl;
  370. exit(0);
  371. }
  372. // проверка на числа в скобочках у char
  373. error1=checking_for_numbers_in_parenthesis_char(n);
  374. if(error1==0){
  375. cout << "Third stage is good!" << endl;
  376. }
  377. else{
  378. cout<<"Error! Exit."<<endl;
  379. exit(0);
  380. }
  381.  
  382. // вызов проверки есть ли перед скобочкой нормальный символ массива
  383. error1=checking_for_the_first_character_of_an_array(n);
  384. if(error1==0){
  385. cout << "Third stage is good!" << endl;
  386. }
  387. else{
  388. cout<<"Error! Exit."<<endl;
  389. exit(0);
  390. }
  391.  
  392. // вызов функции проверки на запятые между переменными int и массивами char
  393. error1=checking_for_variables(n);
  394. if(error1==0){
  395. cout << "Third stage is good!" << endl;
  396. }
  397. else{
  398. cout<<"Error! Exit."<<endl;
  399. exit(0);
  400. }
  401.  
  402. // конец всех проверок и просто всего
  403. cout << endl;
  404. cout << "Otvet:" <<endl;
  405. cout << endl;
  406. if(error1 == 0)
  407. {
  408. cout << "The syntax is correct (yes)" << endl;
  409. }
  410. else
  411. cout << "The syntax is no correct (no)" << endl;
  412. }
  413. return 0;
  414. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement