fork download
  1. unit SemanticUnit;
  2.  
  3. interface
  4.  
  5. uses
  6. Hash, LexemArrType;
  7.  
  8. function CheckSemantic(var L: LexemArr; var N: Integer): LexemArr;
  9.  
  10. implementation
  11.  
  12. // Вспомогательные функции Проверка на принадлежность к цифре или символу\\
  13.  
  14. function IsNum(c: char): Boolean;
  15. begin
  16. Result := True;
  17. if (c > '9') or (c < '1') then
  18. Result := False;
  19. end;
  20.  
  21. function IsSymbol(c: char): Boolean;// Выдаст True, если символ
  22. begin
  23. result := True;
  24. if (c > 'z') or (c < 'a') then
  25. result := False;
  26. end;
  27.  
  28. // Вспомогательные модули Проверка принадлежности к числу или идентификатору \\
  29. function CheckNumber(s: String): Boolean;
  30. var
  31. i: Integer;
  32. begin
  33. Result := True;
  34. for i := 1 to Length(s) Do
  35. if not IsNum(s[i]) then begin
  36. Result := False;
  37. break;
  38. end;
  39. end;
  40.  
  41. function CheckID(s: string): Boolean;// Выдаст TRUE если лексема начинается с символа
  42. var
  43. i: Integer;
  44. begin
  45. Result := True;
  46. if not IsSymbol(s[1]) then begin
  47. Result := False;
  48. exit;
  49. end;
  50. end;
  51.  
  52. // Основной модуль библиотеки. Проверка синтаксиса выражения \\
  53.  
  54. function CheckSemantic(var L: LexemArr; var N: Integer): LexemArr;
  55. var
  56. i: Integer;
  57. t: text;
  58. begin
  59. if N = 0 then Exit; // В случае ошибки выходим из функции
  60. assign(t, 'Hash4Lexems.txt');
  61. for i := 1 to N do
  62. begin
  63. Result[i, 1] := L[i, 1];
  64. Reset(t);
  65. Result[i, 2] := HashFind(L[i, 1], t);
  66. Close(t);
  67. if L[i, 2] = 'ERROR' then
  68. begin
  69. Result[i, 1] := 'ERROR';
  70. if CheckID(L[i, 1]) then Result[i, 2] := 'ID' else // Проверка на принадлежность к ID
  71. if CheckNumber(L[i, 1]) then Result[i, 2] := 'NUMBER' else // Проверка на принадлежность к числу
  72. begin
  73. Result[i, 2] := 'ERROR'; // Иначе ошибка
  74. N := 0;
  75. Exit;
  76. end;
  77. end;
  78. end;
  79. end;
  80.  
  81. end.
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Free Pascal Compiler version 2.6.4+dfsg-4 [2014/10/14] for i386
Copyright (c) 1993-2014 by Florian Klaempfl and others
Target OS: Linux for i386
Compiling prog.pas
prog.pas(1,6) Error: Illegal unit name: SemanticUnit
prog.pas(6,3) Fatal: Can't find unit Hash used by SemanticUnit
Fatal: Compilation aborted
Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)
stdout
Standard output is empty