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