Построить синтаксический анализатор для понятия простое_выражение

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

code: #delphi
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 - оператор

автор: Vovan-VE

Поделиться:

Похожие статьи: