Построить синтаксический анализатор для понятия простое_выражение — Delphi(Делфи)

Построить синтаксический анализатор для понятия простое_выражение, простое выражение ::= простой_идентификатор | (простое_выражение знак_операции простое_выражение); простой идентификатор::= буква; знак_операци::= + | – | *;:eek:

var
  source: string; // исходная строка

var
  s1, s2, op: string;

source := ' a  + x';
// поехли
source := TrimLeft(source);
s1 := copy(source, 1, 1);
if s1 = '' then
begin
  // ошибка
end;
if not(s1[1] in ['A' .. 'Z', 'a' .. 'z']) then
begin
  // первой должна быть буква
end;
Delete(source, 1, 1);

source := TrimLeft(source);
op := copy(source, 1, 1);
if op = '' then
begin
  // ошибка
end;
if not(op[1] in ['+', '-', '*']) then
begin
  // неизвестный оператор
end;
Delete(source, 1, 1);

source := TrimLeft(source);
s2 := copy(source, 1, 1);
if s2 = '' then
begin
  // ошибка
end;
if not(s2[1] in ['A' .. 'Z', 'a' .. 'z']) then
begin
  // теперь снова должна быть буква
end;
Delete(source, 1, 1);

source := TrimLeft(source);
if source <> '' then
begin
  // больше ничего не должно быть
end;

// s1, s2 - операнды; op - оператор

Leave a Comment