۰
subtitle
ارسال: #۱
  
نوشتن برنامه تجزیه کننده پشینگر
سلام دوستان
من میخوام واسه گرامر زیر یک تجزیه کننده پیش نگر بنویسم همانطور که می دونید برای هر پایانه بایستی یک پروسیجر تعریف بشه و توکن ها رو باید با تابع match صدا کنیم. من نوشتم به دو روش ولی نمی دونم کدوم درسته اگه امکانش هست کمکم کنید>
این گرامر
[tex]E \rightarrow TR[/tex]
[tex]T \rightarrow '1' | '2' | '3'[/tex]
[tex]R \rightarrow ' 'E |'*'E|\xi[/tex]
برنامه ای که من نوشتم:
procedure E()
begin
if lookahead in {'1','2','3') then
T();
R();
else
error;
end;
procedure T() begin
if lookahead == '1' then
match('1');
else if lookahead == '2' then
match('2');
else if lookahead=='3' then
match('3');
else error;
end;
procedure R()
begin
if lookahead=='+' then
begin match('+'); E();
end
else if lookahead=='*' then
begin
match('*'); E();
end
else
error;
end;
procedure match(token:T)
begin
if(lookahead==T)
nextToken();
else
error;
end;
من میخوام واسه گرامر زیر یک تجزیه کننده پیش نگر بنویسم همانطور که می دونید برای هر پایانه بایستی یک پروسیجر تعریف بشه و توکن ها رو باید با تابع match صدا کنیم. من نوشتم به دو روش ولی نمی دونم کدوم درسته اگه امکانش هست کمکم کنید>
این گرامر
[tex]E \rightarrow TR[/tex]
[tex]T \rightarrow '1' | '2' | '3'[/tex]
[tex]R \rightarrow ' 'E |'*'E|\xi[/tex]
برنامه ای که من نوشتم:
procedure E()
begin
if lookahead in {'1','2','3') then
T();
R();
else
error;
end;
procedure T() begin
if lookahead == '1' then
match('1');
else if lookahead == '2' then
match('2');
else if lookahead=='3' then
match('3');
else error;
end;
procedure R()
begin
if lookahead=='+' then
begin match('+'); E();
end
else if lookahead=='*' then
begin
match('*'); E();
end
else
error;
end;
procedure match(token:T)
begin
if(lookahead==T)
nextToken();
else
error;
end;
Can I see some ID?
Feeling left out?
نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close