گرامر: هر زبانی یک دستور زبان یا گرامر داره، و کلا زبانهای مختلفی وجود داره، Natural Language ، Regular Languages ، Context-Free Languages ، .....
کار Parser ترجمه کردن و پردازش کد است، حالا میتواند کد را به یک زبان ساده تر مانند Assembly تبدیل کند، میتواند کدهارا اجرا کند (که شما دنبال این هستید).
شما وقتی یک Parser رو میخواهید بنویسید، گرامری برای زبان خود مشخص میکنید، و اصولا زبان برنامه نویسی شما در گروه Context-Free Languages قرار میگره و Parseri که برای گرامری در این زبان بخواهید بنویسید، سریعتر عمل خواهد کرد.
گرامر شما در Context-Free Language ، میتواند مدل های مختلفی داشته باشد مانند LL(1) LALR LR و ... شما برای بهتر متوجه شدن این مباحث در مورد زبان ها، و اگر میخواهید که یک Interpreter یا Compiler کاربردی بسازید، باید به این اصول اشراف داشته باشید.
شما با توجه به گرامر، syntax زبان خودتون رو مشخص میکنید و وقتی یک parser رو برای آن گرامر میسازید، Parser شما با توجه به Action هایی که شما برای آن تعیین کردید، یک حرکت اجرایی را انجام میدهد.
به شما توصیه میکنم یک کتابی به موضوع
Automata Theory, Languages, and Computation رو مطالعه کنید، که این مباحث بصورت کامل در آن صحبت شده.
شما فرض کنید که ما یک Interperter ساده با استفاده از اصول طراحی کامپایلر میخواهید بنویسیم که عداد وارد شده بین کلمه کلیدی begin و end قرار دارد را بخواند، و آنهارا را محاصبه و چاپ کند.
begin
2+2;
3*3;
end.
و گرامر زیر که برای زبان قوع است:
S -> begin STMTS end
STMTS -> STMT;STMTS
STMTS -> epsilon
STMT -> num+ STMT
STMT - > num- STMT
STMT -> num
شما میتوانید برای ساختن این زبان یک Predictive Parser برای گرامر بالا بنویسید.
که اگر در گوگل این اسم را search کنید، حتما جوابی کاملتر میگیرد.