تجزیه کننده گرامر LL1

در علوم کامپیوتر، تجزیه‌کنندهٔ ال‌ال یک پارسر بالا به پایین برای یک زیرمجموعه از گرامرهای مستقل از متن است. با استفاده از این پروژه می توانید چنین گرامر هایی را بررسی کنید.

گیت‌هاب




در علوم کامپیوتر، تجزیه‌کنندهٔ ال‌ال یک پارسر بالا به پایین برای یک زیرمجموعه از گرامرهای مستقل از متن است. این پارسر ورودی را از چپ به راست و بر اساس چپ ترین اشتقاق جملات می‌خواند. (از این رو LL با LR مقایسه می‌شود) به مجموعه گرامرهایی که به وسیله این روش قابل پارس هستند، گرامرهای LL می‌گویند.

ویکی پدیا فارسی

این پروژه یک تجزیه کننده ( Parser ) برای گرامر های LL1 می باشد که با زبان پایتون نوشته شده است و فابلیت های زیر را دارد :

استفاده

ابتدا باید یک فایل برای گرامر خودمان آماده کنیم. به طور پیشفرض دو فایل نمونه با نام های grammar و grammar2 در ریپازیتوری موجود است. گرامر خود را به این گونه می نویسیم :

S -> aA | bB | dC
A -> aA | bA | d
B -> bB | d
C -> d

یا

S -> AB | aS
A -> eAc | d | @
B -> cB | b | @

سپس در فایل parser.py و انتهای آن رشته مورد نظر خودمان را جهت بررسی قرار می دهیم :

parse("aabd", start, ll1Table)

حال کافی است که فایل مورد نظر را اجرا نماییم :

python parser.py

خروجی مشابه زیر خواهد بود :

First

S : {'a', 'd', 'b'}
A : {'a', 'd', 'b'}
B : {'b', 'd'}
C : {'d'}


Follow

S : {'$'}
A : {'$'}
B : {'$'}
C : {'$'}

Parsing Table

('S', 'a') => aA
('S', 'd') => dC
('S', 'b') => bB
('A', 'd') => d
('A', 'a') => aA
('A', 'b') => bA
('B', 'd') => d
('B', 'b') => bB
('C', 'd') => d


Table

    a   b   d
A  aA  bA   d
B   -  bB   d
C   -   -   d
S  aA  bB  dC


Top => S
Current_Input =>  a
('S', 'a')
Top => a
Current_Input =>  a
Top => A
Current_Input =>  a
('A', 'a')
Top => a
Current_Input =>  a
Top => A
Current_Input =>  b
('A', 'b')
Top => b
Current_Input =>  b
Top => A
Current_Input =>  d
('A', 'd')
Top => d
Current_Input =>  d
Top => $
Current_Input =>  $

String accepted!