fork download
  1. /*
  2. Exemplu de program in limbajul IPP:
  3. #include<stdio>
  4.  
  5. int main()
  6. {
  7. int a,b;
  8. float c;
  9. std::cin>>a>>b>>c;
  10. std::cout<<"Variables: "<<a<<b<<c;
  11. }
  12. */
  13. /*
  14. Setul de reguli al limbajului IPP:
  15. E = E1+E2*E3E4mainE5E6E2E7E2(E8|E9|E10|E11)*E12
  16. E1 = #include<[a-z]+>E2+
  17. E2=\n
  18. E3=int
  19. E4=" "
  20. E5=(
  21. E6=)
  22. E7={
  23. E12=}
  24. E13=,
  25. E14=;
  26. E8=E3E4[a-z]+(E13[a-z]+)*E14E2+
  27. E9=E15E4(E13[a-z]+)+E14E2+
  28. E10=E16E17{2}cin(E18{2}[a-z]*)+E14E2+
  29. E11=E16E17{2}cout(E19{2}([a-z]*|(E20[a-zA-Z0-9 ]*E20)))+E14E2+
  30. E15=float
  31. E16=std
  32. E17=:
  33. E18=>
  34. E19=<
  35. E20="
  36. */
  37.  
  38. #include <stdio.h>
  39. #include <stdlib.h>
  40. #include <string.h>
  41. #include <ctype.h>
  42. void parseDiez(char **p)
  43. {
  44. if(**p == '#')
  45. (*p)++;
  46. }
  47.  
  48. void parseIncludeKeyWord(char **p)
  49. {
  50. char include[8];
  51. int i = 0;
  52. for(i = 0; i < 7; i++)
  53. include[i] = *(*p+i);
  54. if(strcmp(include, "include") !=0)
  55. {
  56. printf("Eroare: Dupa # nu urmeaza include");
  57. exit(1);
  58. }
  59. (*p)+=strlen(include);
  60. }
  61.  
  62. void parsespatiigoale(char **p)
  63. {
  64. while(**p==' ') (*p) ++;
  65. }
  66.  
  67. void parsemaimic(char **p)
  68. {
  69. if(**p != '<')
  70. {
  71. printf("Eroare: Dupa numele bibliotecii nu urmeaza <");
  72. exit(3);
  73. }
  74. (*p)++;
  75. }
  76.  
  77. void parsemaimare(char **p)
  78. {
  79. if(**p != '>')
  80. {
  81. printf("Eroare: Dupa numele bibliotecii nu urmeaza >");
  82. exit(3);
  83. }
  84. (*p)++;
  85. }
  86.  
  87. void parseenter(char **p)
  88. {
  89. if(**p != '\n')
  90. {
  91. printf("Eroare: Dupa semnul > nu urmeza enter");
  92. exit(4);
  93. }
  94. }
  95.  
  96. void parsenumebiblioteca(char **p)
  97. {
  98. while(**p>='a'&& **p<='z') (*p)++;
  99. }
  100.  
  101. void parseInclude(char **p)
  102. {
  103. parseDiez(p);
  104. parseIncludeKeyWord(p);
  105. parsespatiigoale(p);
  106. parsemaimic(p);
  107. parsenumebiblioteca(p);
  108. parsemaimare(p);
  109. parseenter(p);
  110. }
  111.  
  112.  
  113. int main(void) {
  114. char linie[60];
  115. char * p = fgets(linie, 60, stdin);
  116. char * p_backup = NULL;
  117. char sep[] = ",";
  118. p = strtok(linie, sep);
  119. while(p)
  120. {
  121. if(*p == '#')
  122. {
  123. parseInclude(&p);
  124. }
  125. else if(strcmp(p,"\n") == 0)
  126. {
  127. p = fgets(linie, 60, stdin);
  128. while(strcmp(p,"\n") == 0) {
  129. p_backup = p;
  130. p = fgets(linie, 60, stdin);
  131. }
  132. p = p_backup;
  133. }
  134. else if(strncmp(p,"int",3)==0)
  135. {
  136. p += strlen("int");
  137.  
  138. if(*p != ' ')
  139. {
  140. printf("Eroare: Dupa cuvantul cheie int nu urmeaza spatiu!");
  141. exit(5);
  142. }
  143. p++;
  144. if(strncmp(p,"main",4) == 0)
  145. {
  146. p+=strlen("main");
  147. if(*p != '(')
  148. {
  149. printf("Eroare: Dupa cuvantul main nu urmeaza paranteza deschisa!");
  150. exit(6);
  151. }
  152. p++;
  153. if(*p != ')')
  154. {
  155. printf("Eroare: Dupa paranteza deschisa nu urmeaza paranteza inchisa!");
  156. exit(7);
  157. }
  158. }
  159. else
  160. {
  161. p = strtok(p,sep);
  162. char * backup;
  163. while(*p >= 'a' && *p <= 'z')
  164. {
  165. p++;
  166. }
  167. if((*p < 'a' || *p > 'z') && *p != ';' && *p != '\0')
  168. {
  169. printf("Eroare: Numele variabilei este compus si din alte caractere decat litere mici!");
  170. exit(8);
  171. }
  172. backup = p;
  173. p=strtok(NULL,sep);
  174. while(p)
  175. {
  176. if(p)
  177. {
  178. while(*p >= 'a' && *p <= 'z')
  179. {
  180. p++;
  181. }
  182. if((*p < 'a' || *p > 'z') && *p != ';' && *p != '\0')
  183. {
  184. printf("Eroare: Numele variabilei este compus si din alte caractere decat litere mici!");
  185. exit(9);
  186. }
  187. }
  188. else
  189. {
  190. printf("Eroare: Lipseste numele variabilei int!");
  191. exit(10);
  192. }
  193. p=strtok(NULL,sep);
  194. }
  195. p=backup;
  196. while(*p >= 'a' && *p <= 'z') p++;
  197. if((*p < 'a' || *p > 'z') && *p != ';')
  198. {
  199. printf("Eroare: Numele variabilei este compus si din alte caractere decat litere mici!");
  200. exit(11);
  201. }
  202. if(strcmp(p,";\n") != 0)
  203. {
  204. printf("Eroare: Dupa ; nu urmeaza enter!");
  205. exit(12);
  206. }
  207. }
  208. }
  209. else if(strncmp(p,"float",5) == 0)
  210. {
  211. p += strlen("float");
  212. if(*p != ' ')
  213. {
  214. printf("Eroare: Dupa cuvantul cheie int nu urmeaza spatiu!");
  215. exit(13);
  216. }
  217. p++;
  218.  
  219. p = strtok(p,sep);
  220. char * backup;
  221. while(*p >= 'a' && *p <= 'z')
  222. {
  223. p++;
  224. }
  225. if((*p < 'a' || *p > 'z') && *p != ';' && *p != '\0')
  226. {
  227. printf("Eroare: Numele variabilei este compus si din alte caractere decat litere mici!");
  228. exit(14);
  229. }
  230. backup = p;
  231. p=strtok(NULL,sep);
  232. while(p)
  233. {
  234. if(p)
  235. {
  236. while(*p >= 'a' && *p <= 'z')
  237. {
  238. p++;
  239. }
  240. if((*p < 'a' || *p > 'z') && *p != ';' && *p != '\0')
  241. {
  242. printf("Eroare: Numele variabilei este compus si din alte caractere decat litere mici!");
  243. exit(15);
  244. }
  245. }
  246. else
  247. {
  248. printf("Eroare: Lipseste numele variabilei float!");
  249. exit(16);
  250. }
  251. p=strtok(NULL,sep);
  252. }
  253. p=backup;
  254. while(*p >= 'a' && *p <= 'z') p++;
  255. if((*p < 'a' || *p > 'z') && *p != ';')
  256. {
  257. printf("Eroare: Numele variabilei este compus si din alte caractere decat litere mici!");
  258. exit(17);
  259. }
  260. if(strcmp(p,";\n") != 0)
  261. {
  262. printf("Eroare: Dupa ; nu urmeaza enter!");
  263. exit(18);
  264. }
  265. }
  266. else if(strcmp(p,"{\n") == 0)
  267. {
  268. }
  269. else if(strncmp(p, "std::cin", 8) == 0)
  270. {
  271. p+=strlen("std::cin");
  272. while (p && *p == '>' && (p+1) && *(p+1) == '>')
  273. {
  274. p+=2;
  275. char * backup = p;
  276. while(*p >= 'a' && *p <= 'z') p++;
  277. if(*p != '>' && *p != ';')
  278. {
  279. printf("Eroare: Numele variabilei nu este scris corect!");
  280. exit(19);
  281. }
  282. if(p-backup == 0)
  283. {
  284. printf("Eroare: Dupa >> nu exista variabila sau nu este scrisa corect!");
  285. exit(20);
  286. }
  287. }
  288. if(strcmp(p, ";\n") != 0)
  289. {
  290. printf("Eroare: Lipseste ; la cin!");
  291. exit(21);
  292. }
  293. }
  294. else if(strncmp(p, "std::cout", 9) == 0)
  295. {
  296. p+=strlen("std::cout");
  297. while (p && *p == '<' && (p+1) && *(p+1) == '<')
  298. {
  299. p+=2;
  300. if(*p == '"')
  301. {
  302. p++;
  303. while(*p >= 'a' && *p <= 'z' || *p >= 'A' && *p <= 'Z' || *p == ' ' || *p >= '0' && *p <= '9') p++;
  304. if(*p != '"')
  305. {
  306. printf("Eroare: Nu sunt inchise ghilimelele la sirul de caractere sau acesta nu este scris corect!");
  307. exit(22);
  308. }
  309. p++;
  310. }
  311. else
  312. {
  313. char * backup = p;
  314. while(*p >= 'a' && *p <= 'z') p++;
  315. if(*p != '<' && *p != ';')
  316. {
  317. printf("Eroare: Numele variabilei nu este scris corect!");
  318. exit(23);
  319. }
  320. if(p-backup == 0)
  321. {
  322. printf("Eroare: Dupa << nu exista variabila sau nu este scrisa corect!");
  323. exit(24);
  324. }
  325. }
  326. }
  327. if(strcmp(p, ";\n") != 0)
  328. {
  329. printf("Eroare: Lipseste ; la cout!");
  330. exit(25);
  331. }
  332. }
  333. else if(strcmp(p,"}\n") == 0)
  334. {
  335. }
  336. if(p_backup)
  337. {
  338. p=p_backup;
  339. }
  340. else
  341. {
  342. p = fgets(linie, 60, stdin);
  343. p_backup = NULL;
  344. }
  345. }
  346. return 0;
  347. }
Success #stdin #stdout 0s 5404KB
stdin
#include   <stdio>
 

int main()
{

int ay;
float ay;

std::cin>>a>>b;
std::cout<<"Variables "<<a<<b<<c;
}
stdout
Standard output is empty