ایک کمپائلر کیا ہے؟


ایک کمپائلر کے مراحل اہم ہیں۔


Interpreters are also used in programming.

انٹرپریٹر بھی پروگرامنگ میں استعمال ہوتے ہیں۔


کسی کو کمپائلرز کے بارے میں کیوں سیکھنا چاہیے؟


یہ کتاب اچھی طرح سے منظم ہے۔


لیکچرر کو مطلع کیا جانا چاہیے۔


میں موصول ہونے والی مدد کا اعتراف کرتا ہوں۔


Permission to use the content is granted.

مواد کے استعمال کی اجازت دی جاتی ہے۔


لسانی تجزیہ پہلا قدم ہے۔


باقاعدہ اظہار طاقتور اوزار ہیں۔


مختصر اظہار کو آسان بناتے ہیں۔


آئیے کچھ مثالیں دیکھتے ہیں۔


Nondeterministic finite automata are used.

غیر یقینی محدود آٹومیٹا استعمال ہوتے ہیں۔


Converting a regular expression is a process.

ایک باقاعدہ اظہار کو تبدیل کرنا ایک عمل ہے۔


اصلاحات کارکردگی کو بہتر بنا سکتی ہیں۔


Deterministic finite automata are important.

قطعی محدود آٹومیٹا اہم ہیں۔


Converting an NFA to a DFA is a key step.

ایک NFA کو DFA میں تبدیل کرنا ایک اہم قدم ہے۔


سائز بمقابلہ رفتار ایک سمجھوتہ ہے۔


DFAs کو کم سے کم کرنا ضروری ہے۔


لیکسر جنریٹر مفید اوزار ہیں۔


The algorithm calculates the epsilon closure of a set of states.

الگورتھم ریاستوں کے ایک سیٹ کے ایپسیلون بندش کا حساب لگاتا ہے۔


A DFA is constructed from an NFA to perform lexical analysis.

لسانی تجزیہ کرنے کے لیے ایک ڈی ایف اے کو این ایف اے سے بنایا جاتا ہے۔


The example shows how to minimize a DFA.

مثال میں دکھایا گیا ہے کہ ڈی ایف اے کو کیسے کم سے کم کیا جائے۔


Lexical analysis is a crucial step in the compilation process.

لسانی تجزیہ تالیف کے عمل میں ایک اہم قدم ہے۔


ڈی ایف اے میں چار ریاستیں ہیں۔


We add s'1 and s'2 to our incomplete S'.

ہم اپنے نامکمل ایس' میں ایس'1 اور ایس'2 شامل کرتے ہیں۔


الگورتھم ڈی ایف اے کو کم سے کم کرتا ہے۔


ڈی ایف اے کم سے کم نہیں ہے۔


مثال میں 4 ریاستوں کے ساتھ ایک ڈی ایف اے استعمال کیا گیا ہے۔


لیکسر جنریٹر ایک ڈی ایف اے بناتا ہے۔


پروگرام لسانی تجزیہ کرتا ہے۔


ڈی ایف اے کا استعمال ٹوکنز کو پہچاننے کے لیے کیا جاتا ہے۔


الگورتھم موثر ہے۔


The lexer distinguishes between different token types.

لیکسر مختلف قسم کے ٹوکنز میں فرق کرتا ہے۔


ان پٹ کو ٹوکنز میں تقسیم کیا گیا ہے۔


The lexer generator handles the longest matching prefix.

لیکسر جنریٹر سب سے طویل مماثل سابقہ کو ہینڈل کرتا ہے۔


The principle of the longest match takes precedence.

سب سے طویل میچ کا اصول فوقیت رکھتا ہے۔


لسانی غلطی واقع ہوئی ہے۔


The DFA is constructed from regular expressions.

ڈی ایف اے کو باقاعدہ اظہار سے بنایا گیا ہے۔


The algorithm is used for DFA minimization.

الگورتھم ڈی ایف اے کو کم سے کم کرنے کے لیے استعمال ہوتا ہے۔


The compiler translates high-level code into machine language.

کمپائلر اعلیٰ سطحی کوڈ کو مشین لینگویج میں ترجمہ کرتا ہے۔


Compilers help bridge the gap between human-readable code and machine instructions.

کمپائلر انسانی پڑھنے کے قابل کوڈ اور مشین ہدایات کے درمیان فرق کو ختم کرنے میں مدد کرتے ہیں۔


High-level languages make programming easier and faster.

اعلیٰ سطحی زبانیں پروگرامنگ کو آسان اور تیز تر بناتی ہیں۔


A compiler identifies and reports programmer mistakes.

ایک کمپائلر پروگرامر کی غلطیوں کی نشاندہی کرتا ہے اور رپورٹ کرتا ہے۔


The same program can run on different machines due to compilers.

کمپائلرز کی وجہ سے ایک ہی پروگرام مختلف مشینوں پر چل سکتا ہے۔


Machine language is tedious and error-prone to write.

مشین لینگویج لکھنا تھکا دینے والا اور غلطی کا شکار ہے۔


Good compilers optimize code to run efficiently.

اچھے کمپائلر کوڈ کو موثر طریقے سے چلانے کے لیے بہتر بناتے ہیں۔


The compilation process is divided into several phases.

ترجمہ کرنے کے عمل کو کئی مراحل میں تقسیم کیا گیا ہے۔


Lexical analysis is the first phase of compilation.

لسانی تجزیہ ترجمہ کا پہلا مرحلہ ہے۔


سنٹیکس تجزیہ ایک سنٹیکس ٹری بناتا ہے۔


Type checking ensures the program's consistency.

ٹائپ چیکنگ پروگرام کی مستقل مزاجی کو یقینی بناتی ہے۔


The compiler identifies tokens from the source code.

کمپائلر سورس کوڈ سے ٹوکن کی نشاندہی کرتا ہے۔


A variable might be used without declaration, which is an error.

ایک متغیر کو اعلان کے بغیر استعمال کیا جا سکتا ہے، جو کہ ایک غلطی ہے۔


The compiler translates high-level programming languages into machine code.

کمپائلر اعلیٰ سطحی پروگرامنگ زبانوں کا مشین کوڈ میں ترجمہ کرتا ہے۔


The phases of compilation are often interleaved.

ترجمہ کے مراحل اکثر آپس میں جڑے ہوتے ہیں۔


The compiler attempts to spot and report programmer mistakes.

کمپائلر پروگرامر کی غلطیوں کو تلاش کرنے اور رپورٹ کرنے کی کوشش کرتا ہے۔


Programs written in high-level languages tend to be shorter.

اعلیٰ سطحی زبانوں میں لکھے گئے پروگرام چھوٹے ہوتے ہیں۔


The notation used by programming languages is closer to how humans think.

پروگرامنگ زبانوں کے ذریعہ استعمال ہونے والا طریقہ کار اس کے قریب ہے کہ انسان کیسے سوچتے ہیں۔


A compiler is a crucial tool for software development.

کمپائلر سافٹ ویئر کی ترقی کے لیے ایک اہم ٹول ہے۔


Understanding compiler phases is essential for optimization.

کمپائلر کے مراحل کو سمجھنا اصلاح کے لیے ضروری ہے۔


The sign and the number are not possible with the above.

اوپر دیے گئے طریقہ کار سے نشان اور عدد ممکن نہیں ہیں۔


فلوٹ میں اختیاری علامت ہو سکتی ہے۔


The mantissa part is described as a sequence of digits followed by a decimal point and then another sequence of digits.

مینٹیسا حصے کو ہندسوں کی ایک ترتیب کے طور پر بیان کیا گیا ہے جس کے بعد اعشاریہ نقطہ اور پھر ہندسوں کی ایک اور ترتیب ہے۔


Either one of the digit sequences can be empty.

ہندسوں کی ترتیب میں سے کوئی ایک خالی ہو سکتا ہے۔


ایک اختیاری ایکسپونینٹ حصہ ہے۔


The mantissa part can be written as an integer constant.

مینٹیسا حصے کو ایک عدد مستقل کے طور پر لکھا جا سکتا ہے۔


Some examples include 3.14, -3, .23, 3e+4, and 11.22e-3.

کچھ مثالوں میں 3.14، -3، .23، 3e+4، اور 11.22e-3 شامل ہیں۔


This format can be described by the following regular expression.

اس فارمیٹ کو مندرجہ ذیل باقاعدہ اظہار سے بیان کیا جا سکتا ہے۔


The exponent is optional if the mantissa contains a decimal point.

اگر مینٹیسا میں اعشاریہ نقطہ شامل ہے تو ایکسپونینٹ اختیاری ہے۔


We can make the description simpler if we make the regular expression for floats also include integers.

ہم بیان کو آسان بنا سکتے ہیں اگر ہم فلوٹس کے لیے باقاعدہ اظہار میں عدد بھی شامل کریں۔


A string constant starts with a quotation mark.

سٹرنگ مستقل ایک کوٹیشن مارک سے شروع ہوتا ہے۔


There are usually some restrictions on the symbols allowed between the quotation marks.

عام طور پر کوٹیشن مارکس کے درمیان اجازت یافتہ علامتوں پر کچھ پابندیاں ہوتی ہیں۔


Line-feed characters or quotes are typically not allowed.

لائن فیڈ حروف یا کوٹس عام طور پر اجازت یافتہ نہیں ہیں۔


We can describe string constants where the allowed symbols are alphanumeric characters.

ہم سٹرنگ مستقل کو بیان کر سکتے ہیں جہاں اجازت یافتہ علامتیں عددی حروف ہیں۔


Nondeterministic finite automata are not quite as close to “real machines” as we would like.

غیر یقینی محدود آٹومیٹا اتنے قریب نہیں ہیں جتنا ہم


A finite automaton is a machine that has a finite number of states.

ایک محدود آٹومیٹن ایک ایسی مشین ہے جس میں محدود تعداد میں ریاستیں ہوتی ہیں۔


A transition between states is usually labelled by a character.

ریاستوں کے درمیان منتقلی کو عام طور پر ایک حرف سے لیبل کیا جاتا ہے۔


We will also use transitions marked with ε, the so-called epsilon transitions.

ہم ε کے ساتھ نشان زد منتقلیوں کا بھی استعمال کریں گے، جسے ایپسیلون منتقلی کہا جاتا ہے۔


A finite automaton can be used to decide if an input string is a member in some particular set of strings.

ایک محدود آٹومیٹن کا استعمال یہ فیصلہ کرنے کے لیے کیا جا سکتا ہے کہ آیا ان پٹ سٹرنگ سٹرنگ کے کسی خاص سیٹ کا رکن ہے۔


We start in this state and in each step, we can do one of the following.

ہم اس حالت میں شروع کرتے ہیں اور ہر قدم پر، ہم مندرجہ ذیل میں سے ایک کام کر سکتے ہیں۔


The program is translated to a simple machine- independent intermediate language.

پروگرام کو ایک سادہ مشین سے آزاد انٹرمیڈیٹ زبان میں ترجمہ کیا جاتا ہے۔


Register allocationThe symbolic variable names used in the intermediate code are translated to numbers, each of which corresponds to a register in the target machine code.

رجسٹر مختص کرنا۔ انٹرمیڈیٹ کوڈ میں استعمال ہونے والے علامتی متغیر ناموں کا ترجمہ نمبروں میں کیا جاتا ہے، جن میں سے ہر ایک ہدف مشین کوڈ میں ایک رجسٹر سے مطابقت رکھتا ہے۔


The first three phases are collectively called the frontend of the compiler and the last three phases are collectively called the backend.

پہلے تین مراحل کو مجموعی طور پر کمپائلر کا فرنٹ اینڈ کہا جاتا ہے اور آخری تین مراحل کو مجموعی طور پر بیک اینڈ کہا جاتا ہے۔


The middle part of the compiler is in this context only the intermediate code generation, but this often includes various optimisations and transformations on the intermediate code.

کمپائلر کا درمیانی حصہ اس تناظر میں صرف انٹرمیڈیٹ کوڈ جنریشن ہے، لیکن اس میں اکثر انٹرمیڈیٹ کوڈ پر مختلف اصلاحات اور تبدیلیاں شامل ہوتی ہیں۔


For example, the type checker can assume absence of syntax errors and the code generation can assume absence of type errors.

مثال کے طور پر، ٹائپ چیکر نحو کی غلطیوں کی عدم موجودگی کو فرض کر سکتا ہے اور کوڈ جنریشن ٹائپ کی غلطیوں کی عدم موجودگی کو فرض کر سکتا ہے۔


Assembly and linking are typically done by programs supplied by the machine or operating system vendor, and are hence not part of the compiler itself, so we will not further discuss these phases in this book.

اسمبلی اور لنکنگ عام طور پر مشین یا آپریٹنگ سسٹم وینڈر کے ذریعہ فراہم کردہ پروگراموں کے ذریعہ کی جاتی ہے، اور اس لیے یہ خود کمپائلر کا حصہ نہیں ہیں، لہذا ہم اس کتاب میں ان مراحل پر مزید بحث نہیں کریں گے۔


An interpreter is another way of implementing a programming language.

ایک مترجم پروگرامنگ زبان کو لاگو کرنے کا ایک اور طریقہ ہے۔


Interpretation shares many aspects with compiling.

تشریح کمپائلنگ کے ساتھ بہت سے پہلوؤں کا اشتراک کرتی ہے۔


Lexing, parsing and type-checking are in an interpreter done just as in a compiler.

لیکسنگ، پارسنگ اور ٹائپ چیکنگ ایک مترجم میں بالکل اسی طرح کی جاتی ہے جیسے کمپائلر میں۔


But instead of generating code from the syntax tree, the syntax tree is processed directly to evaluate expressions and execute statements, and so on.

لیکن نحو کے درخت سے کوڈ تیار کرنے کے بجائے، نحو کے درخت کو براہ راست اظہار کی تشخیص اور بیانات پر عمل درآمد کے لیے پروسیس کیا جاتا ہے، اور اسی طرح۔


An interpreter may need to process the same piece of the syntax tree (for example, the body of a loop) many times and, hence, interpretation is typically slower than executing a compiled program.

ایک مترجم کو نحو کے درخت کے ایک ہی ٹکڑے (مثال کے طور پر، ایک لوپ کا جسم) کو کئی بار پروسیس کرنے کی ضرورت پڑ سکتی ہے اور، اس لیے، تشریح عام طور پر مرتب شدہ پروگرام پر عمل درآمد کرنے سے سست ہوتی ہے۔


But writing an interpreter is often simpler than writing a compiler and the interpreter is easier to move to a different machine.

لیکن ایک مترجم لکھنا اکثر کمپائلر لکھنے سے آسان ہوتا ہے اور مترجم کو ایک مختلف مشین پر منتقل کرنا آسان ہوتا ہے۔


Compilation and interpretation may be combined to implement a programming language.

پروگرامنگ زبان کو لاگو کرنے کے لیے کمپائلیشن اور تشریح کو ملایا جا سکتا ہے۔


The compiler may produce intermediate-level code which is then interpreted rather than compiled to machine code.

کمپائلر انٹرمیڈیٹ لیول کا کوڈ تیار کر سکتا ہے جسے پھر مشین کوڈ میں مرتب کرنے کے بجائے تشریح کی جاتی ہے۔


In some systems, there may even be parts of a program that are compiled to machine code, some parts that are compiled to intermediate code, which is interpreted at runtime while other parts may be kept as a syntax tree and interpreted directly.

کچھ نظاموں میں، یہاں تک کہ ایک پروگرام کے ایسے حصے بھی ہو سکتے ہیں جو مشین کوڈ میں مرتب کیے جاتے ہیں، کچھ حصے جو انٹرمیڈیٹ کوڈ میں مرتب کیے جاتے ہیں، جن کی رن ٹائم پر تشریح کی جاتی ہے جبکہ دوسرے حصوں کو نحو کے درخت کے طور پر رکھا جا سکتا ہے اور براہ راست تشریح کی جا سکتی ہے۔


Each choice is a compromise between speed and space.

ہر انتخاب رفتار اور جگہ کے درمیان ایک سمجھوتہ ہے۔


Using an interpreter is also useful during program development, where it is more important to be able to test a program modification quickly rather than run the program efficiently.

پروگرام کی ترقی کے دوران ایک مترجم کا استعمال بھی مفید ہے، جہاں پروگرام میں ترمیم کو تیزی سے جانچنے کے قابل ہونا زیادہ اہم ہے بجائے اس کے کہ پروگرام کو مؤثر طریقے سے چلایا جائے۔


And since interpreters do less work on the program before execution starts, they are able to start running the program more quickly.

اور چونکہ مترجم عملدرآمد شروع ہونے سے پہلے پروگرام پر کم کام کرتے ہیں، اس لیے وہ پروگرام کو تیزی سے چلانا شروع کرنے کے قابل ہوتے ہیں۔


Furthermore, since an interpreter works on a representation that is closer to the source code than is compiled code, error messages can be more precise and informative.

مزید برآں، چونکہ ایک مترجم ایک ایسے نمائندے پر کام کرتا ہے جو مرتب شدہ کوڈ کے مقابلے میں سورس کوڈ کے قریب ہے، اس لیے غلطی کے پیغامات زیادہ درست اور معلوماتی ہو سکتے ہیں۔


We will discuss interpreters briefly in chapters 5 and 13, but they are not the main focus of this book.

ہم باب 5 اور 13 میں مختصراً مترجمین پر بحث کریں گے، لیکن وہ اس کتاب کا بنیادی مرکز نہیں ہیں۔


عام طور پر، لیکسر ایک غلطی کی اطلاع دے گا۔


At this point, it may stop reading the input.

اس مقام پر، یہ ان پٹ پڑھنا بند کر سکتا ہے۔


The purpose of the latter approach is to try finding further lexical errors.

بعد والے طریقہ کار کا مقصد مزید لسانی غلطیوں کو تلاش کرنے کی کوشش کرنا ہے۔


Some of these subsequent errors may, however, not be real errors.

تاہم، ان میں سے کچھ بعد کی غلطیاں حقیقی غلطیاں نہیں ہو سکتیں۔


If, for example, the start of a comment is ill-formed, the lexer may try to interpret the contents of the comment as individual tokens.

مثال کے طور پر، اگر کسی تبصرے کا آغاز غلط ہے، تو لیکسر تبصرے کے مندرجات کو انفرادی ٹوکن کے طور پر تشریح کرنے کی کوشش کر سکتا ہے۔


When the lexer finds an error, the consumer of the tokens that the lexer produces can not usually itself produce a valid result.

جب لیکسر کو کوئی غلطی ملتی ہے، تو ٹوکن کا صارف جو لیکسر تیار کرتا ہے عام طور پر خود ایک درست نتیجہ تیار نہیں کر سکتا۔


However, the compiler may try to find other errors in the remaining input.

تاہم، کمپائلر بقیہ ان پٹ میں دیگر غلطیوں کو تلاش کرنے کی کوشش کر سکتا ہے۔


Again, some of the subsequent errors may really be spurious errors caused by lexical error(s).

دوبارہ، بعد کی کچھ غلطیاں واقعی لسانی غلطی (غلطیوں) کی وجہ سے ہونے والی بے بنیاد غلطیاں ہو سکتی ہیں۔


Nevertheless, such error recovery has, when the input is so large that restarting the lexer from the start of input incurs a considerable time overhead, proven to be an aid in productivity.

تاہم، اس طرح کی غلطی کی بازیابی، جب ان پٹ اتنا بڑا ہو کہ ان پٹ کے آغاز سے لیکسر کو دوبارہ شروع کرنے سے وقت کا کافی خرچ ہوتا ہے، پیداواری صلاحیت میں مددگار ثابت ہوا ہے۔


A lexer generator will typically use a notation for regular expressions.

ایک لیکسر جنریٹر عام طور پر باقاعدہ اظہار کے لیے ایک اشارے کا استعمال کرے گا۔


For example, an * intended to match a multiplication symbol in the input is distinguished from an * used to denote repetition by quoting the * symbol, e.g. as ‘*‘.

مثال کے طور پر، ان پٹ میں ضرب کی علامت سے ملنے کا ارادہ رکھنے والے * کو تکرار کو ظاہر کرنے کے لیے استعمال ہونے والے * سے ممتاز کیا جاتا ہے، * علامت کو کوٹ کرکے، مثلاً ‘*‘۔


The input to the lexer generator will normally contain a list of regular expressions that each denote a token.

لیکسر جنریٹر کا ان پٹ عام طور پر باقاعدہ اظہار کی ایک فہرست پر مشتمل ہوگا جو ہر ایک ٹوکن کو ظاہر کرتا ہے۔


Each of these regular expressions has an associated action.

ان میں سے ہر ایک باقاعدہ اظہار کا ایک منسلک عمل ہوتا ہے۔


The action describes what is passed on to the consumer.

عمل اس بات کی وضاحت کرتا ہے کہ صارف کو کیا منتقل کیا جاتا ہے۔


Normally, the lexer generator requires white-space and comments to be defined by regular expressions.

عام طور پر، لیکسر جنریٹر کو سفید جگہ اور تبصروں کو باقاعدہ اظہار کے ذریعے بیان کرنے کی ضرورت ہوتی ہے۔


An action can be more than just returning a token.

ایک عمل صرف ایک ٹوکن واپس کرنے سے زیادہ ہو سکتا ہے۔


If, for example, a language has a large number of keywords, then a DFA that recognises all of these individually can be fairly large.

مثال کے طور پر، اگر کسی زبان میں بڑی تعداد میں مطلوبہ الفاظ ہیں، تو ایک DFA جو ان سب کو انفرادی طور پر پہچانتا ہے کافی بڑا ہو سکتا ہے۔


In such cases, the keywords are not described as separate regular expressions in the lexer definition but instead treated as special cases of the identifier token.

ایسے معاملات میں، مطلوبہ الفاظ کو لیکسر کی تعریف میں الگ الگ باقاعدہ اظہار کے طور پر بیان نہیں کیا جاتا ہے بلکہ شناخت کنندہ ٹوکن کے خصوصی معاملات کے طور پر سمجھا جاتا ہے۔


Another use of non-trivial lexer actions is for nested comments.

غیر معمولی لیکسر اعمال کا ایک اور استعمال گھونسلے والے تبصروں کے لیے ہے۔


In principle, a regular expression cannot recognise arbitrarily nested comments.

اصولی طور پر، ایک باقاعدہ اظہار من مانی طور پر گھونسلے والے تبصروں کو نہیں پہچان سکتا۔


where φ is the regular expression for the empty language (see exercise 2.10).

جہاں φ خالی زبان کے لیے باقاعدہ اظہار ہے (دیکھیں مشق 2.10).


a) Complete the definition of non empty by replacing the occurrences of “...” in the rules above by expressions similar to those shown in the rules for ε and s|t.

الف) غیر خالی کی تعریف کو مکمل کریں، اوپر دیے گئے قواعد میں “...” کی جگہ ایسے اظہار سے بدل کر جو ε اور s|t کے قواعد میں دکھائے گئے ہیں۔


b) Use this definition to find non empty(a * b * ).

ب) اس تعریف کا استعمال کرتے ہوئے غیر خالی (a * b * ) تلاش کریں۔


Exercise 2.16 If L is a regular language, so is the set of all prefixes of strings in L (see section 2.10.3).

مشق 2.16 اگر L ایک باقاعدہ زبان ہے، تو L میں موجود سٹرنگز کے تمام سابقوں کا سیٹ بھی ایسا ہی ہے (دیکھیں سیکشن 2.10.3).


So we should be able to transform a regular expression for L into a regular expression for the set of all prefixes of strings in L.

لہذا، ہمیں L کے لیے ایک باقاعدہ اظہار کو L میں موجود سٹرنگز کے تمام سابقوں کے سیٹ کے لیے ایک باقاعدہ اظہار میں تبدیل کرنے کے قابل ہونا چاہیے۔


We want to do this with a function prefixes that is recursive over the structure of the regular expression for L, i.e., of the form:

ہم یہ ایک فنکشن prefixes کے ساتھ کرنا چاہتے ہیں جو L کے لیے باقاعدہ اظہار کی ساخت پر دوبارہ چلتا ہے، یعنی، اس شکل کا:


prefixes(a) = a? where a is an alphabet symbol

prefixes(a) = a? جہاں a ایک حروف تہجی کی علامت ہے


a) Complete the definition of prefixes by replacing the occurrences of “...” in the rules above by expressions similar to those shown in the rules for ε, a and s|t.

الف) prefixes کی تعریف کو مکمل کریں، اوپر دیے گئے قواعد میں “...” کی جگہ ایسے اظہار سے بدل کر جو ε, a اور s|t کے قواعد میں دکھائے گئے ہیں۔


b) Use this definition to find prefixes(ab * c).

ب) اس تعریف کا استعمال کرتے ہوئے prefixes(ab * c) تلاش کریں۔


Chapter 3 Syntax Analysis 3.1 Introduction Where lexical analysis splits the input into tokens, the purpose of syntax analysis (also known as parsing) is to recombine these tokens.

باب 3 نحو کا تجزیہ 3.1 تعارف جہاں لسانی تجزیہ ان پٹ کو ٹوکنز میں تقسیم کرتا ہے، نحو کے تجزیہ (جسے پارسنگ بھی کہا جاتا ہے) کا مقصد ان ٹوکنز کو دوبارہ جوڑنا ہے۔


Not back into a list of characters, but into something that reflects the structure of the text.

واپس حروف کی فہرست میں نہیں، بلکہ ایسی چیز میں جو متن کی ساخت کی عکاسی کرتی ہے۔


This “something” is typically a data structure called the syntax tree of the text.

یہ “کچھ” عام طور پر ایک ڈیٹا ڈھانچہ ہے جسے متن کا نحو درخت کہا جاتا ہے۔


As the name indicates, this is a tree structure.

جیسا کہ نام سے ظاہر ہے، یہ ایک درخت کی ساخت ہے۔


The leaves of this tree are the tokens found by the lexical analysis, and if the leaves are read from left to right, the sequence is the same as in the input text.

اس درخت کے پتے لسانی تجزیہ کے ذریعے پائے جانے والے ٹوکنز ہیں، اور اگر پتوں کو بائیں سے دائیں پڑھا جائے تو، ترتیب ان پٹ متن کی طرح ہی ہے۔


Hence, what is important in the syntax tree is how these leaves are combined to form the structure of the tree and how the interior nodes of the tree are labelled.

لہذا، نحو کے درخت میں جو اہم ہے وہ یہ ہے کہ ان پتوں کو درخت کی ساخت بنانے کے لیے کیسے ملایا جاتا ہے اور درخت کے اندرونی نوڈس کو کیسے لیبل کیا جاتا ہے۔


The program analyzes the input symbol to choose a production.

پروگرام ان پُٹ علامت کا تجزیہ کرتا ہے تاکہ ایک پیداوار کا انتخاب کیا جا سکے۔


If they match, we move on to the following input symbol.

اگر وہ ملتے ہیں، تو ہم اگلی ان پُٹ علامت کی طرف بڑھتے ہیں۔


A nonterminal on the right-hand side is handled by calling the corresponding function.

دائیں ہاتھ کی طرف ایک غیر ٹرمینل کو متعلقہ فنکشن کو کال کرکے ہینڈل کیا جاتا ہے۔


When there are no more symbols on the right-hand side, the function returns.

جب دائیں ہاتھ کی طرف مزید کوئی علامتیں نہیں ہوتیں، تو فنکشن واپس آ جاتا ہے۔


Figure 3.16 shows pseudo-code for a recursive descent parser.

شکل 3.16 ایک ریکرسیو نزول پارسر کے لیے سوڈو کوڈ دکھاتی ہے۔


We have constructed this program by the following process.

ہم نے اس پروگرام کو مندرجہ ذیل عمل سے بنایا ہے۔


We have first added a production T' → T$.

ہم نے سب سے پہلے ایک پیداوار T' → T$ شامل کی ہے۔


For the parseT function, we look at the productions for T.

parseT فنکشن کے لیے، ہم T کے لیے پیداواروں کو دیکھتے ہیں۔


As FIRST(R)={b}, the production T→R is chosen on the symbol b.

چونکہ FIRST(R)={b} ہے، علامت b پر پیداوار T→R کا انتخاب کیا جاتا ہے۔


Since R is also Nullable, we must choose this production also on symbols in FOLLOW(T), i.e., c or $.

چونکہ R بھی Nullable ہے، ہمیں اس پیداوار کا انتخاب FOLLOW(T) میں موجود علامتوں پر بھی کرنا چاہیے، یعنی c یا $۔


The function match takes as argument a symbol, which it tests for equality.

فنکشن میچ ایک علامت کو دلیل کے طور پر لیتا ہے، جس کا وہ مساوات کے لیے تجربہ کرتا ہے۔


In table-driven LL(1) parsing, we encode the selection of productions into a table.

ٹیبل سے چلنے والے LL(1) پارسنگ میں، ہم پیداواروں کے انتخاب کو ایک ٹیبل میں انکوڈ کرتے ہیں۔


A simple non-recursive program uses this table and a stack to perform the parsing.

ایک سادہ غیر ریکرسیو پروگرام اس ٹیبل اور ایک اسٹیک کو پارسنگ انجام دینے کے لیے استعمال کرتا ہے۔


The table is cross-indexed by nonterminal and terminal.

ٹیبل کو غیر ٹرمینل اور ٹرمینل کے ذریعے کراس انڈیکس کیا جاتا ہے۔


If the table-entry is empty, we report an error.

اگر ٹیبل انٹری خالی ہے، تو ہم ایک غلطی کی اطلاع دیتے ہیں۔


The program in figure 3.18, like the one in figure 3.16, only checks if the input is valid.

شکل 3.18 میں موجود پروگرام، شکل 3.16 کی طرح، صرف یہ چیک کرتا ہے کہ آیا ان پُٹ درست ہے۔


Conflicts may be caused by ambiguous grammars.

تنازعات مبہم گرامر کی وجہ سے ہو سکتے ہیں۔


We will in the next section see how we can rewrite this grammar to avoid conflicts.

ہم اگلے حصے میں دیکھیں گے کہ ہم اس گرامر کو تنازعات سے بچنے کے لیے کیسے دوبارہ لکھ سکتے ہیں۔


In this section we will look at methods for rewriting grammars.

اس حصے میں ہم گرامر کو دوبارہ لکھنے کے طریقوں پر غور کریں گے۔


We start by looking at direct left-recursion.

ہم براہ راست بائیں ریکرشن کو دیکھ کر شروع کرتے ہیں۔


Hence, the productions for a nonterminal corresponding to a particular precedence level refers only to nonterminals that correspond to the same or higher precedence levels, un- less parentheses or similar bracketing constructs disambiguate the use of these.

لہذا، ایک خاص ترجیحی سطح سے مطابقت رکھنے والے غیر ٹرمینلز کے لیے تیار کردہ پروڈکشنز صرف ان غیر ٹرمینلز کا حوالہ دیتی ہیں جو اسی یا اس سے زیادہ ترجیحی سطحوں سے مطابقت رکھتے ہیں، جب تک کہ بریکٹ یا اسی طرح کی بریکٹنگ تعمیرات ان کے استعمال کو غیر مبہم نہ بنائیں۔


Grammar 3.11 shows how these rules are used to make an unambiguous version of grammar 3.2.

گرامر 3.11 دکھاتا ہے کہ ان قواعد کو گرامر 3.2 کا غیر مبہم ورژن بنانے کے لیے کیسے استعمال کیا جاتا ہے۔


Figure 3.12 show the syntax tree for2+3*4using this grammar.

شکل 3.12 اس گرامر کا استعمال کرتے ہوئے 2+3*4 کے لیے نحو کا درخت دکھاتا ہے۔


تجویز کردہ مشقیں: 3.6۔


3.5 Other sources of ambiguity Most of the potential ambiguity in grammars for programming languages comes from expression syntax and can be handled by exploiting precedence rules as shown in section 3.4.

3.5 ابہام کے دیگر ذرائع پروگرامنگ زبانوں کے لیے گرامر میں ممکنہ ابہام کی اکثریت اظہار نحوی سے آتی ہے اور اسے ترجیحی قواعد کو استعمال کرکے سنبھالا جا سکتا ہے جیسا کہ سیکشن 3.4 میں دکھایا گیا ہے۔


Another classical example of ambiguity is the “dangling-else” prob- lem.

ابہام کی ایک اور کلاسک مثال “ڈینگنگ-ایلس” مسئلہ ہے۔


Imperative languages like Pascal or C often let the else-part of a conditional be optional, like shown in grammar 3.3.

پاسکل یا سی جیسی لازمی زبانیں اکثر مشروط کی ایلس-پارٹ کو اختیاری ہونے دیتی ہیں، جیسا کہ گرامر 3.3 میں دکھایا گیا ہے۔


The problem is that it is not clear how to 3.5. OTHER SOURCES OF AMBIGUITY67 Ex p 0 0 @ @ Ex p + Ex p2 0 0 @ @ Ex p2Ex p2 * Ex p3 Ex p3Ex p3 4 2 3 Figure 3.12: Syntax tree for2+3*4using grammar 3.11 parse, for example, if p then if q then s1 else s2 According to the grammar, theelsecan equally well match eitherif.

مسئلہ یہ ہے کہ یہ واضح نہیں ہے کہ کیسے 3.5۔ ابہام کے دیگر ذرائع 67 Ex p 0 0 @ @ Ex p + Ex p2 0 0 @ @ Ex p2Ex p2 * Ex p3 Ex p3Ex p3 4 2 3 شکل 3.12: گرامر 3.11 کا استعمال کرتے ہوئے 2+3*4 کے لیے نحو کا درخت، مثال کے طور پر، اگر p تو اگر q تو s1 ورنہ s2 گرامر کے مطابق، ایلس اتنی ہی اچھی طرح سے یا تو if سے مماثل ہو سکتا ہے۔


The usual convention is that anelsematches the closest not previously matchedif, which, in the example, will make theelsematch the secondif.

عام رواج یہ ہے کہ ایک ایلس قریب ترین سے مماثل ہے جو پہلے سے مماثل نہیں ہے، جو، مثال میں، ایلس کو دوسرے if سے مماثل بنائے گا۔


How do we make this clear in the grammar?

ہم اسے گرامر میں کیسے واضح کریں؟


We can treatif,thenandelse as a kind of right-associative operators, as this would make them group to the right, making anif-thenmatch the closestelse.

ہم if, then اور else کو دائیں ایسوسی ایٹو آپریٹرز کی ایک قسم کے طور پر برتاؤ کر سکتے ہیں، کیونکہ یہ انہیں دائیں طرف گروپ کرے گا، جو ایک if-then کو قریب ترین else سے مماثل بنائے گا۔


However, the grammar transforma- tions shown in section 3.4 can not directly be applied to grammar 3.3, as the pro- ductions for conditionals do not have the right form.

تاہم، سیکشن 3.4 میں دکھائے گئے گرامر ٹرانسفارمیشنز کو براہ راست گرامر 3.3 پر لاگو نہیں کیا جا سکتا، کیونکہ مشروط کے لیے پروڈکشنز صحیح شکل میں نہیں ہیں۔


Instead we use the following observation: When anifand anelsematch, all ifs that occur between these must have matchingelses.

اس کے بجائے ہم مندرجہ ذیل مشاہدے کا استعمال کرتے ہیں: جب ایک if اور ایک else مماثل ہوتے ہیں، تو ان کے درمیان آنے والے تمام ifs میں مماثل else ہونا ضروری ہے۔


This can easily be proven by assuming otherwise and concluding that this leads to a contradiction.

اسے آسانی سے اس کے برعکس فرض کرکے اور یہ نتیجہ اخذ کرکے ثابت کیا جا سکتا ہے کہ اس سے تضاد پیدا ہوتا ہے۔


Hence, we make two nonterminals: One for matched (i.e.withelse-part) conditionals and one for unmatched (i.e.withoutelse-part) conditionals.

لہذا، ہم دو غیر ٹرمینلز بناتے ہیں: ایک مماثل (یعنی ایلس-پارٹ کے ساتھ) مشروط کے لیے اور ایک غیر مماثل (یعنی بغیر ایلس-پارٹ کے) مشروط کے لیے۔


نتیجہ گرامر 3.13 میں دکھایا گیا ہے۔


This grammar also resolves the associativity of semicolon (right) and the precedence ofifover semicolon.

یہ گرامر سیمیکولن (دائیں) کی ایسوسی ایٹیوٹی اور سیمیکولن پر if کی ترجیح کو بھی حل کرتی ہے۔


An alternative to rewriting grammars to resolve ambiguity is to use an ambigu- ous grammar and resolve conflicts by using precedence rules during parsing.

ابہام کو حل کرنے کے لیے گرامر کو دوبارہ لکھنے کا ایک متبادل یہ ہے کہ ایک مبہم گرامر کا استعمال کیا جائے اور پارسنگ کے دوران ترجیحی قواعد کا استعمال کرکے تنازعات کو حل کیا جائے۔


We shall look into this in section 3.16.

ہم اس پر سیکشن 3.16 میں غور کریں گے۔


All cases of ambiguity must be treated carefully: It is not enough that we elim- inate ambiguity, we must do so in a way that results in the desired structure: The structure of arithmetic expressions is significant, and it makes a difference to which ifanelseis matched.

ابہام کے تمام معاملات کو احتیاط سے برتاؤ کرنا چاہیے: یہ کافی نہیں ہے کہ ہم ابہام کو ختم کریں، ہمیں ایسا اس انداز میں کرنا چاہیے جو مطلوبہ ڈھانچے کا نتیجہ ہو: ریاضیاتی اظہار کا ڈھانچہ اہم ہے، اور اس سے فرق پڑتا ہے کہ کون سا ifanelse مماثل ہے۔


Adding the epsilon transitions as arrows in figure 3.26 would produce a very cluttered picture.

شکل 3.26 میں ایپسیلون ٹرانزیشن کو تیروں کے طور پر شامل کرنے سے ایک بہت ہی گندا منظر نامہ تیار ہوگا۔


But this is for presentation purposes only: The transi- tions have the same meaning regardless of whether they are shown in the picture of the DFA or in the table.

لیکن یہ صرف پیشکش کے مقاصد کے لیے ہے: منتقلی کا ایک ہی مطلب ہے اس سے قطع نظر کہ آیا وہ DFA کی تصویر میں دکھائے گئے ہیں یا جدول میں۔


Together with these epsilon-transitions, the NFAs in figure 3.26 form a single, combined NFA.

ان ایپسیلون منتقلیوں کے ساتھ، شکل 3.26 میں NFAs ایک واحد، مشترکہ NFA بناتے ہیں۔


This NFA has the starting state A (the starting state of the NFA for the added start production) and an accepting state for each production in the grammar.

اس NFA میں ابتدائی حالت A (شروع کی گئی پیداوار کے لیے NFA کی ابتدائی حالت) اور گرامر میں ہر پیداوار کے لیے ایک قبول کرنے والی حالت ہے۔


We must now convert this NFA into a DFA using the subset construc- tion shown in section 2.5.

اب ہمیں اس NFA کو ذیلی سیٹ کنسٹرکشن کا استعمال کرتے ہوئے DFA میں تبدیل کرنا ہوگا جو سیکشن 2.5 میں دکھایا گیا ہے۔


Instead of showing the resulting DFA graphically, we construct a table where transitions on terminals are shown asshiftactions and tran- sitions on nonterminals asgoactions.

نتیجے میں آنے والے DFA کو گرافیکل طور پر دکھانے کے بجائے، ہم ایک جدول بناتے ہیں جہاں ٹرمینلز پر منتقلی کو شفٹ ایکشنز کے طور پر اور غیر ٹرمینلز پر منتقلی کو گو ایکشنز کے طور پر دکھایا جاتا ہے۔


Figure 3.28 shows the DFA constructed from the NFA made by adding epsilon-transitions in 3.27 to figure 3.26.

شکل 3.28 میں وہ DFA دکھایا گیا ہے جو NFA سے بنایا گیا ہے جو شکل 3.26 میں 3.27 میں ایپسیلون منتقلی کو شامل کرکے بنایا گیا ہے۔


The sets of NFA states that form each DFA state is shown in the second column of the table in figure 3.28.

NFA ریاستوں کے سیٹ جو ہر DFA ریاست بناتے ہیں وہ شکل 3.28 میں جدول کے دوسرے کالم میں دکھائے گئے ہیں۔


We will need these below for addingreduceand acceptactions, but once this is done, we will not need them anymore, so we can remove them from the final table.

ہمیں ان کی ضرورت ذیل میں reduce اور accept ایکشنز شامل کرنے کے لیے ہوگی، لیکن ایک بار جب یہ ہو جائے گا، تو ہمیں ان کی مزید ضرورت نہیں رہے گی، اس لیے ہم انہیں حتمی جدول سے ہٹا سکتے ہیں۔


To addreduceandacceptactions, we first need to compute theFOLLOWsets for each nonterminal, as described in section 3.10.

reduce اور accept ایکشنز شامل کرنے کے لیے، ہمیں سب سے پہلے ہر غیر ٹرمینل کے لیے FOLLOW سیٹ کا حساب لگانا ہوگا، جیسا کہ سیکشن 3.10 میں بیان کیا گیا ہے۔


For purpose of calculatingFOL- LOW, we add yet another extra start production:T ′′ →T ′ $, to handle end-of-text conditions as described in section 3.10.

FOL-LOW کا حساب لگانے کے مقصد کے لیے، ہم ایک اور اضافی ابتدائی پیداوار شامل کرتے ہیں: T ′′ → T ′ $، تاکہ متن کے اختتام کی شرائط کو سنبھالا جا سکے جیسا کہ سیکشن 3.10 میں بیان کیا گیا ہے۔


This gives us the following result: FOLLOW(T ′ ) ={$} FOLLOW(T) ={c,$} FOLLOW(R) ={c,$}

یہ ہمیں درج ذیل نتیجہ دیتا ہے: FOLLOW(T ′ ) ={$} FOLLOW(T) ={c,$} FOLLOW(R) ={c,$}


We then addreduceactions by the following rule: If a DFA statescontains the accepting NFA state for a productionp:N→α, we addreduce pas action toson 94CHAPTER 3. SYNTAX ANALYSIS DFANFATransitions statestatesa b cTR 0A, C, E, I, Js3s4g1g2 1B 2D 3F, C, E, I, Js3s4g5g2 4K, I, Js4g6 5Gs7 6L 7H Figure 3.28: SLR DFA for grammar 3.9 all symbols inFOLLOW(N).

اس کے بعد ہم درج ذیل اصول کے ذریعے reduce ایکشنز شامل کرتے ہیں: اگر ایک DFA ریاست میں پیداوار p:N→α کے لیے قبول کرنے والی NFA ریاست شامل ہے، تو ہم تمام علامتوں میں reduce pas ایکشن شامل کرتے ہیں جو FOLLOW(N) میں ہیں۔


Reduction on production 0 (the extra start production that was added before constructing the NFA) is written asaccept.

پیداوار 0 پر کمی (اضافی ابتدائی پیداوار جو NFA بنانے سے پہلے شامل کی گئی تھی) کو قبول کے طور پر لکھا جاتا ہے۔


In figure 3.28, state 0 contains NFA state I, which accepts production 3.

شکل 3.28 میں، ریاست 0 میں NFA ریاست I شامل ہے، جو پیداوار 3 کو قبول کرتی ہے۔


Hence, we add r3 as actions at the symbolscand $ (as these are inFOLLOW(R)).

لہذا، ہم علامتوں c اور $ پر r3 کو ایکشنز کے طور پر شامل کرتے ہیں (کیونکہ یہ FOLLOW(R) میں ہیں۔)


State 1 contains NFA state B, which accepts production 0.

ریاست 1 میں NFA ریاست B شامل ہے، جو پیداوار 0 کو قبول کرتی ہے۔


We add this at the symbol $ (FOLLOW(T ′ )).

ہم اسے علامت $ (FOLLOW(T ′ )) پر شامل کرتے ہیں۔


As noted above, this is written asaccept(abbreviated to “a”).

جیسا کہ اوپر بتایا گیا ہے، اسے قبول کے طور پر لکھا جاتا ہے (مختصر طور پر “a”)۔


In the same way, we add reduce actions to state 3, 4, 6 and 7.

اسی طرح، ہم ریاست 3، 4، 6 اور 7 میں reduce ایکشنز شامل کرتے ہیں۔


Context-free languages are used in programming language design.

مفروضہ لسانیات پروگرامنگ زبان کے ڈیزائن میں استعمال ہوتی ہیں۔


The limitations of regular languages are related to finiteness.

منظم زبانوں کی حدود محدودیت سے متعلق ہیں۔


Context-free grammars can count one thing at a time.

مفروضہ لسانیات ایک وقت میں ایک چیز کو گن سکتی ہیں۔


The stack is used for counting in context-free languages.

اسٹیک کا استعمال مفروضہ لسانیات میں گنتی کے لیے کیا جاتا ہے۔


The language {a^n b^n c^n | n ≥ 0} is not context-free.

زبان {a^n b^n c^n | n ≥ 0} مفروضہ لسانیات نہیں ہے۔


Palindromes can be represented by a context-free grammar.

پیلیڈرومز کو مفروضہ لسانیات کے ذریعے ظاہر کیا جا سکتا ہے۔


Context-free languages are closed under union.

مفروضہ لسانیات اتحاد کے تحت بند ہیں۔


Context-free languages are not closed under intersection.

مفروضہ لسانیات تقاطع کے تحت بند نہیں ہیں۔


Noam Chomsky proposed context-free grammars for natural languages.

نوم چومسکی نے قدرتی زبانوں کے لیے مفروضہ لسانیات تجویز کیں۔


Context-free grammars were adopted for Algol60.

مفروضہ لسانیات کو Algol60 کے لیے اپنایا گیا تھا۔


پاسکل کو LL(1) پارسنگ کے لیے ڈیزائن کیا گیا تھا۔


C was originally designed to fit LALR(1) parsing.

C کو اصل میں LALR(1) پارسنگ کے مطابق ڈیزائن کیا گیا تھا۔


Most parser generators are based on LALR(1) parsing.

زیادہ تر پارسر جنریٹر LALR(1) پارسنگ پر مبنی ہیں۔


The Dragon Book tells more about parsing methods.

ڈریگن بک پارسنگ کے طریقوں کے بارے میں مزید بتاتی ہے۔


Context-free languages are not closed under complement.

مفروضہ لسانیات تکمیل کے تحت بند نہیں ہیں۔


The method presented here uses only infix operators.

یہاں پیش کردہ طریقہ صرف ان فکس آپریٹرز کا استعمال کرتا ہے۔


If prefix or postfix operators have higher precedence, the method will work.

اگر سابقہ یا بعد کے آپریٹرز کی ترجیح زیادہ ہے، تو طریقہ کار کام کرے گا۔


A method for handling arbitrary precedences is presented in [1].

[1] میں من مانی ترجیحات کو سنبھالنے کا ایک طریقہ پیش کیا گیا ہے۔


The grammar A→ −A A→A−id A→id is ambiguous.

گرامر A→ −A A→A−id A→id مبہم ہے۔


User-defined operator precedences can be handled by restructuring the syntax tree.

صارف کے زیرِ تعریف آپریٹر کی ترجیحات کو نحو کے درخت کو دوبارہ ترتیب دے کر سنبھالا جا سکتا ہے۔


The compiler translates high-level code into machine code.

کمپائلر اعلیٰ سطحی کوڈ کو مشین کوڈ میں ترجمہ کرتا ہے۔


Type checking ensures that the program's data types are used correctly.

ٹائپ چیکنگ اس بات کو یقینی بناتی ہے کہ پروگرام کے ڈیٹا ٹائپس کو صحیح طریقے سے استعمال کیا جائے۔


Intermediate code simplifies the compilation process.

انٹرمیڈیٹ کوڈ تالیف کے عمل کو آسان بناتا ہے۔


The function takes two arguments and returns an integer.

فنکشن دو دلائل لیتا ہے اور ایک عدد لوٹاتا ہے۔


Overloading allows the same name to be used for different operations.

اوورلوڈنگ ایک ہی نام کو مختلف کارروائیوں کے لیے استعمال کرنے کی اجازت دیتا ہے۔


Polymorphism enables functions to work with various data types.

پولیمورفزم فنکشنز کو مختلف ڈیٹا ٹائپس کے ساتھ کام کرنے کے قابل بناتا ہے۔


The program reported a type error during compilation.

پروگرام نے تالیف کے دوران ایک ٹائپ کی غلطی کی اطلاع دی۔


The compiler uses symbol tables to store variable types.

کمپائلر متغیر اقسام کو ذخیرہ کرنے کے لیے علامت میزیں استعمال کرتا ہے۔


Implicit type conversion can occur in some programming languages.

کچھ پروگرامنگ زبانوں میں مضمر قسم کی تبدیلی ہو سکتی ہے۔


The abstract syntax tree is used for type checking.

تجریدی نحو کے درخت کو ٹائپ چیکنگ کے لیے استعمال کیا جاتا ہے۔


The news reported a significant economic downturn.

خبروں میں ایک اہم معاشی گراوٹ کی اطلاع دی گئی۔


The company announced a new product launch.

کمپنی نے ایک نئی مصنوعات کے آغاز کا اعلان کیا۔


The government is discussing new policies.

حکومت نئی پالیسیوں پر بات چیت کر رہی ہے۔


The weather forecast predicts rain for tomorrow.

موسم کی پیش گوئی کل بارش کی پیشین گوئی کرتی ہے۔


The athlete won the gold medal in the competition.

ایتھلیٹ نے مقابلے میں طلائی تمغہ جیتا۔


The stock market experienced a sudden drop.

اسٹاک مارکیٹ میں اچانک گراوٹ آئی۔


The peace talks between the two nations have failed.

دو قوموں کے درمیان امن مذاکرات ناکام ہو گئے ہیں۔


The scientists discovered a new species of plant.

سائنسدانوں نے پودے کی ایک نئی نسل دریافت کی۔


The economic reforms are expected to boost growth.

اقتصادی اصلاحات سے ترقی کو فروغ ملنے کی توقع ہے۔


The political situation remains highly volatile.

سیاسی صورتحال انتہائی غیر مستحکم ہے۔


The simplest way to execute a program is interpretation.

کسی پروگرام کو چلانے کا سب سے آسان طریقہ تشریح ہے۔


Interpretation is done by a program called an interpreter.

تشریح ایک ایسے پروگرام کے ذریعے کی جاتی ہے جسے مترجم کہا جاتا ہے۔


This is similar to how a human evaluates a mathematical expression.

یہ اس سے ملتا جلتا ہے کہ انسان ریاضیاتی اظہار کی تشخیص کیسے کرتا ہے۔


We insert the values of variables in the expression and evaluate it bit by bit.

ہم اظہار میں متغیرات کی قدریں داخل کرتے ہیں اور اسے ایک ایک کرکے تشخیص کرتے ہیں۔


An interpreter will keep the formula unchanged and use a symbol table.

ایک مترجم فارمولے کو تبدیل نہیں کرے گا اور علامت کی میز استعمال کرے گا۔


The interpreter is a function that takes an abstract syntax tree and a symbol table.

مترجم ایک ایسا فنکشن ہے جو ایک تجریدی نحو کا درخت اور ایک علامت کی میز لیتا ہے۔


The function can call itself recursively on parts of the abstract syntax tree.

فنکشن تجریدی نحو کے درخت کے حصوں پر خود کو بار بار کال کر سکتا ہے۔


This process can be extended to also handle statements and declarations.

اس عمل کو بیانات اور اعلانات کو سنبھالنے کے لیے بھی بڑھایا جا سکتا ہے۔


Some input and output may be done as side effects by the interpreter.

کچھ ان پٹ اور آؤٹ پٹ مترجم کے ذریعے ضمنی اثرات کے طور پر کیے جا سکتے ہیں۔


We will in this chapter assume that the symbol tables are persistent.

ہم اس باب میں فرض کریں گے کہ علامت کی میزیں مستقل ہیں۔


An intepreter will typically consist of one function per syntactic category.

ایک مترجم عام طور پر ہر نحوی زمرے کے لیے ایک فنکشن پر مشتمل ہوگا۔


Each function will take as arguments an abstract syntax tree.

ہر فنکشن دلائل کے طور پر ایک تجریدی نحو کا درخت لے گا۔


Each function will return one or more results.

ہر فنکشن ایک یا زیادہ نتائج واپس کرے گا۔


We will use a small language to show the principles of interpretation.

ہم تشریح کے اصولوں کو ظاہر کرنے کے لیے ایک چھوٹی زبان استعمال کریں گے۔


نحو گرامر 5.1 میں دی گئی ہے۔


In the example language, a program is a list of function declarations.

مثال کی زبان میں، ایک پروگرام فنکشن کے اعلانات کی ایک فہرست ہے۔


Functions and variables have separate name spaces.

فنکشنز اور متغیرات کے الگ الگ نام کی جگہیں ہیں۔


The body of a function is an expression.

ایک فنکشن کا جسم ایک اظہار ہے۔


A program must contain a function called main.

ایک پروگرام میں ایک فنکشن ہونا چاہیے جسے مین کہا جاتا ہے۔


Running a program is done by calling the main function.

ایک پروگرام چلانے کا کام مین فنکشن کو کال کرکے کیا جاتا ہے۔


If translation is done directly, the number of compilers is equal to the product of the number of languages and the number of machines.

اگر ترجمہ براہ راست کیا جائے تو، مرتب کرنے والوں کی تعداد زبانوں کی تعداد اور مشینوں کی تعداد کے ضرب کے برابر ہوگی۔


If a common intermediate language is used, one front-end is needed for every language and one back-end is needed for each machine.

اگر ایک مشترکہ انٹرمیڈیٹ زبان استعمال کی جائے تو، ہر زبان کے لیے ایک فرنٹ اینڈ اور ہر مشین کے لیے ایک بیک اینڈ کی ضرورت ہوتی ہے۔


This way, there is no need to write a separate back-end for each machine.

اس طرح، ہر مشین کے لیے ایک الگ بیک اینڈ لکھنے کی ضرورت نہیں ہے۔


The advantages of this approach are: No actual back-end needs to be written for each new machine.

اس نقطہ نظر کے فوائد یہ ہیں: ہر نئی مشین کے لیے کوئی اصل بیک اینڈ لکھنے کی ضرورت نہیں ہے۔


A compiled program can be distributed in a single intermediate form for all machines.

ایک مرتب شدہ پروگرام کو تمام مشینوں کے لیے ایک واحد انٹرمیڈیٹ شکل میں تقسیم کیا جا سکتا ہے۔


The intermediate form may be more compact than machine code.

انٹرمیڈیٹ شکل مشین کوڈ سے زیادہ کمپیکٹ ہو سکتی ہے۔


Interpreting the intermediate form will in most cases be a lot slower than executing translated code directly.

انٹرمیڈیٹ شکل کی تشریح زیادہ تر معاملات میں براہ راست ترجمہ شدہ کوڈ پر عمل کرنے سے بہت سست ہوگی۔


Nevertheless, the approach has seen some success, e.g., with Java.

تاہم، اس نقطہ نظر نے کچھ کامیابی دیکھی ہے، مثال کے طور پر، جاوا کے ساتھ۔


Some of the speed penalty can be eliminated by translating the intermediate code to machine code immediately before or during execution of the program.

کچھ رفتار جرمانے کو پروگرام کے عملدرآمد سے فوراً پہلے یا اس کے دوران انٹرمیڈیٹ کوڈ کو مشین کوڈ میں ترجمہ کرکے ختم کیا جا سکتا ہے۔


This hybrid form is called just-in-time compilation and is often used for executing the intermediate code for Java.

اس ہائبرڈ شکل کو جسٹ ان ٹائم کمپائلیشن کہا جاتا ہے اور اسے اکثر جاوا کے لیے انٹرمیڈیٹ کوڈ پر عمل کرنے کے لیے استعمال کیا جاتا ہے۔


We will in this book, however, focus mainly on using the intermediate code for traditional compilation.

تاہم، ہم اس کتاب میں، بنیادی طور پر روایتی تالیف کے لیے انٹرمیڈیٹ کوڈ کے استعمال پر توجہ مرکوز کریں گے۔


An intermediate language should, ideally, have the following properties: It should be easy to translate from a high-level language to the intermediate language.

ایک انٹرمیڈیٹ زبان میں، مثالی طور پر، درج ذیل خصوصیات ہونی چاہئیں: اسے اعلیٰ سطحی زبان سے انٹرمیڈیٹ زبان میں ترجمہ کرنا آسان ہونا چاہیے۔


It should be easy to translate from the intermediate language to machine code.

انٹرمیڈیٹ زبان سے مشین کوڈ میں ترجمہ کرنا آسان ہونا چاہیے۔


The intermediate format should be suitable for optimisations.

انٹرمیڈیٹ فارمیٹ کو اصلاحات کے لیے موزوں ہونا چاہیے۔


A solution that may reduce the translation burden, though it does not address the other problems, is to have two intermediate levels.

ایک حل جو ترجمے کے بوجھ کو کم کر سکتا ہے، اگرچہ یہ دیگر مسائل کو حل نہیں کرتا، دو انٹرمیڈیٹ سطحیں رکھنا ہے۔


When the intermediate format is shared between many compilers, it makes sense to do as many optimisations as possible on the intermediate format.

جب انٹرمیڈیٹ فارمیٹ کو بہت سے مرتب کرنے والوں کے درمیان شیئر کیا جاتا ہے، تو انٹرمیڈیٹ فارمیٹ پر زیادہ سے زیادہ اصلاحات کرنا سمجھ میں آتا ہے۔


Another thing to consider when choosing an intermediate language is the “granularity”.

انٹرمیڈیٹ زبان کا انتخاب کرتے وقت غور کرنے کی ایک اور بات “گرینولیرٹی” ہے۔


Should an operation in the intermediate language correspond to a large amount of work or to a small amount of work?

کیا انٹرمیڈیٹ زبان میں ایک آپریشن کو زیادہ کام یا کم کام کے مساوی ہونا چاہیے؟


The first of these approaches is often used when the intermediate language is interpreted.

ان میں سے پہلا طریقہ اکثر استعمال کیا جاتا ہے جب انٹرمیڈیٹ زبان کی تشریح کی جاتی ہے۔


ہم اس پر باب 8 میں واپس آئیں گے۔


The compiler generates intermediate code from the source code.

کمپائلر ماخذ کوڈ سے انٹرمیڈیٹ کوڈ تیار کرتا ہے۔


Intermediate code is platform-independent.

انٹرمیڈیٹ کوڈ پلیٹ فارم سے آزاد ہے۔


Relational operators are assumed to be included in the set of binary arithmetic operators.

رشتہ دار آپریٹرز کو بائنری ریاضیاتی آپریٹرز کے سیٹ میں شامل سمجھا جاتا ہے۔


We will use the same names for sequential logical operators as C.

ہم تسلسل منطقی آپریٹرز کے لیے وہی نام استعمال کریں گے جو C میں استعمال ہوتے ہیں۔


The extended language is shown in figure 7.7.

توسیع شدہ زبان شکل 7.7 میں دکھائی گئی ہے۔


یہ گرامر انتہائی مبہم ہے۔


As expressions, true and false are the numbers 1 and 0.

اظہار کے طور پر، سچ اور جھوٹ نمبر 1 اور 0 ہیں۔


A condition Cond is translated into code that chooses between two labels.

ایک شرط Cond کو ایسے کوڈ میں ترجمہ کیا جاتا ہے جو دو لیبلز کے درمیان انتخاب کرتا ہے۔


Logical negation generates no code by itself.

منطقی نفی خود سے کوئی کوڈ تیار نہیں کرتی ہے۔


Sequential logical and is translated as follows.

تسلسل منطقی اور کا ترجمہ اس طرح کیا جاتا ہے۔


Some languages have more advanced control features.

کچھ زبانوں میں زیادہ جدید کنٹرول خصوصیات ہوتی ہیں۔


لیبلز کو ایک علامت ٹیبل میں محفوظ کیا جاتا ہے۔


A jump to a label will generate a GOTO statement.

ایک لیبل پر چھلانگ GOTO بیان تیار کرے گی۔


Some languages allow exiting loops from the middle of the loop-body.

کچھ زبانیں لوپ کے وسط سے لوپ باڈی سے باہر نکلنے کی اجازت دیتی ہیں۔


C’s continue statement, which jumps to the start of the current loop, can be handled similarly.

C کا جاری بیان، جو موجودہ لوپ کے آغاز پر چھلانگ لگاتا ہے، اسی طرح سنبھالا جا سکتا ہے۔


A case-statement evaluates an expression and selects one of several branches.

ایک کیس بیان ایک اظہار کا اندازہ لگاتا ہے اور کئی شاخوں میں سے ایک کا انتخاب کرتا ہے۔


We will briefly discuss how such can be implemented.

ہم مختصراً اس بات پر تبادلہ خیال کریں گے کہ اس طرح کے عمل کو کیسے نافذ کیا جا سکتا ہے۔


Most programming languages provide floating-point numbers and structured values.

زیادہ تر پروگرامنگ زبانیں فلوٹنگ پوائنٹ نمبر اور منظم اقدار فراہم کرتی ہیں۔


We extend our example language with one-dimensional arrays.

ہم اپنی مثال کی زبان کو ایک جہتی صفوں کے ساتھ بڑھاتے ہیں۔


Arrays can be allocated statically or dynamically.

صفوں کو جامد یا متحرک طور پر مختص کیا جا سکتا ہے۔


The compiler ensures symbol tables contain necessary information for translation.

کمپائلر اس بات کو یقینی بناتا ہے کہ ترجمے کے لیے ضروری معلومات علامت کی میزوں میں موجود ہوں۔


Scalar variables store their values in intermediate-language variables.

اسکیلر متغیر اپنے اقدار کو انٹرمیڈیٹ-لینگویج متغیرات میں محفوظ کرتے ہیں۔


Array variables include base addresses and dimensions in their information.

ایرے متغیرات اپنی معلومات میں بیس ایڈریس اور جہتیں شامل کرتے ہیں۔


The symbol table provides a type description for variables of that type.

علامت کی میز اس قسم کے متغیرات کے لیے ایک قسم کی تفصیل فراہم کرتی ہے۔


Translation functions for uses of names are written before their declarations.

ناموں کے استعمال کے لیے ترجمہ کے افعال ان کے اعلانات سے پہلے لکھے جاتے ہیں۔


We can declare integer variables and one-dimensional integer arrays.

ہم انٹیجر متغیرات اور ایک جہتی انٹیجر ارے کا اعلان کر سکتے ہیں۔


An integer variable should be bound to a location in the symbol table.

ایک انٹیجر متغیر کو علامت کی میز میں ایک مقام سے منسلک کیا جانا چاہیے۔


Arrays are assumed to be heap allocated.

یہ فرض کیا جاتا ہے کہ ارے ہیپ مختص ہیں۔


The intermediate-code variable HP points to the first free element of the heap.

انٹرمیڈیٹ-کوڈ متغیر HP ہیپ کے پہلے مفت عنصر کی طرف اشارہ کرتا ہے۔


No check for heap overflow is done when allocating arrays.

ایرے مختص کرتے وقت ہیپ اوور فلو کی کوئی جانچ نہیں کی جاتی ہے۔


Functional and logic languages often use high-level intermediate languages.

فنکشنل اور منطقی زبانیں اکثر اعلیٰ سطحی انٹرمیڈیٹ زبانیں استعمال کرتی ہیں۔


JVM has single instructions for complex operations like calling virtual methods.

JVM میں پیچیدہ آپریشنز جیسے ورچوئل طریقوں کو کال کرنے کے لیے واحد ہدایات ہیں۔


JVM was originally intended for interpretation.

JVM اصل میں تشریح کے لیے تیار کیا گیا تھا۔


A program in JVM is validated before interpretation or further translation.

JVM میں ایک پروگرام کی تشریح یا مزید ترجمے سے پہلے توثیق کی جاتی ہے۔


Use the translation functions to generate code for the expression.

ایکسپریشن کے لیے کوڈ تیار کرنے کے لیے ترجمہ کے افعال کا استعمال کریں۔


Generate code for the statement using the translation functions.

ترجمہ کے افعال کا استعمال کرتے ہوئے بیان کے لیے کوڈ تیار کریں۔


Show that these generate identical code when compiled.

دکھائیں کہ یہ مرتب ہونے پر یکساں کوڈ تیار کرتے ہیں۔


Extend the statement language with break-statement for exiting loops.

لوپس سے باہر نکلنے کے لیے بریک-اسٹیٹمنٹ کے ساتھ بیان کی زبان میں توسیع کریں۔


Extend the language to handle labels for defining and jumping.

زبان کو لیبلز کو ہینڈل کرنے کے لیے بڑھائیں تاکہ تعریف کی جا سکے اور چھلانگ لگائی جا سکے۔


Show translation functions for multi-dimensional arrays in column-major format.

کالم-میجر فارمیٹ میں کثیر جہتی ارے کے لیے ترجمہ کے افعال دکھائیں۔


آج موسم خوشگوار ہے۔


کیا آپ مجھے نمک دے سکتے ہیں؟


I am going to the market to buy some groceries.

میں بازار جا رہا ہوں کچھ گروسری خریدنے کے لیے۔


The company announced its quarterly earnings.

کمپنی نے اپنی سہ ماہی کی آمدنی کا اعلان کیا۔


The algorithm efficiently sorts the data.

الگورتھم ڈیٹا کو مؤثر طریقے سے ترتیب دیتا ہے۔


Despite the challenges, they persevered.

چیلنجوں کے باوجود، انہوں نے ہمت نہیں ہاری۔


The government is implementing new policies.

حکومت نئی پالیسیاں نافذ کر رہی ہے۔


The research paper explores the impact of climate change.

تحقیقی مقالہ موسمیاتی تبدیلی کے اثرات کو تلاش کرتا ہے۔


The intricate design of the building is remarkable.

عمارت کا پیچیدہ ڈیزائن قابل ذکر ہے۔


The economic forecast predicts a recession.

معاشی پیش گوئی کساد بازاری کی پیشین گوئی کرتی ہے۔


The software update includes several bug fixes.

سافٹ ویئر اپ ڈیٹ میں کئی بگ فکس شامل ہیں۔


وہ اپنے شعبے میں ایک مشہور عالم ہیں۔


مذاکرات تعطل کا شکار ہو گئے۔


The company's innovative approach revolutionized the industry.

کمپنی کے جدید نقطہ نظر نے صنعت میں انقلاب برپا کر دیا۔


The complex interplay of factors led to the crisis.

عوامل کے پیچیدہ باہمی تعامل نے بحران کو جنم دیا۔


The artist's masterpiece is displayed in the museum.

فنکار کا شاہکار عجائب گھر میں نمائش کے لیے رکھا گیا ہے۔


The scientific community is debating the findings.

سائنسی برادری نتائج پر بحث کر رہی ہے۔


The political landscape is constantly shifting.

سیاسی منظرنامہ مسلسل بدل رہا ہے۔


The economic reforms aim to boost growth.

معاشی اصلاحات کا مقصد ترقی کو فروغ دینا ہے۔


The philosophical implications of the theory are profound.

اس نظریہ کے فلسفیانہ مضمرات گہرے ہیں۔


The company announced record profits this quarter.

کمپنی نے اس سہ ماہی میں ریکارڈ منافع کا اعلان کیا۔


کیا آپ براہ کرم مجھے نمک دے سکتے ہیں؟


The weather forecast predicts rain for tomorrow.

موسم کی پیش گوئی کل بارش کی ہے۔


وہ ڈاکٹر بننے کے لیے پڑھائی کر رہی ہے۔


بلی چٹائی پر بیٹھی۔


The new technology has revolutionized the industry.

نئی ٹیکنالوجی نے صنعت میں انقلاب برپا کر دیا ہے۔


Despite the challenges, they persevered and succeeded.

چیلنجوں کے باوجود، انہوں نے ہمت نہیں ہاری اور کامیابی حاصل کی۔


The government is implementing new policies to boost the economy.

حکومت معیشت کو فروغ دینے کے لیے نئی پالیسیاں نافذ کر رہی ہے۔


The research team is conducting experiments in the laboratory.

تحقیقی ٹیم لیبارٹری میں تجربات کر رہی ہے۔


He is a highly respected figure in the community.

وہ کمیونٹی میں ایک انتہائی معزز شخصیت ہیں۔


The intricate details of the artwork were mesmerizing.

فن پارے کی پیچیدہ تفصیلات دلکش تھیں۔


The philosophical implications of the discovery are profound.

اس دریافت کے فلسفیانہ مضمرات گہرے ہیں۔


The complex algorithm efficiently processed the large dataset.

پیچیدہ الگورتھم نے بڑے ڈیٹا سیٹ کو مؤثر طریقے سے پروسیس کیا۔


The negotiations reached an impasse due to irreconcilable differences.

ناقابل مصالحت اختلافات کی وجہ سے مذاکرات تعطل کا شکار ہو گئے۔


The socio-economic factors contributed to the widespread unrest.

سماجی و اقتصادی عوامل نے وسیع پیمانے پر بے چینی میں حصہ ڈالا۔


The company's innovative approach disrupted the market.

کمپنی کے جدید انداز نے مارکیٹ کو درہم برہم کر دیا۔


The subtle nuances of the language were difficult to grasp.

زبان کے لطیف باریکیوں کو سمجھنا مشکل تھا۔


The implications of climate change are far-reaching and severe.

آب و ہوا کی تبدیلی کے مضمرات دور رس اور شدید ہیں۔


The project's success hinged on meticulous planning and execution.

منصوبے کی کامیابی محتاط منصوبہ بندی اور عمل درآمد پر منحصر تھی۔


The artist's unique perspective transformed the ordinary into the extraordinary.

فنکار کے منفرد نقطہ نظر نے عام کو غیر معمولی میں بدل دیا۔


The company announced a new product launch.

کمپنی نے ایک نئی مصنوعات کے آغاز کا اعلان کیا۔


Could you please provide me with the details?

کیا آپ براہ کرم مجھے تفصیلات فراہم کر سکتے ہیں؟


The weather forecast predicts rain for tomorrow.

موسم کی پیش گوئی کل بارش کی ہے۔


وہ ایک بہت باصلاحیت موسیقار ہے۔


Please submit your application by Friday.

براہ کرم جمعہ تک اپنی درخواست جمع کروائیں۔


The meeting will be held in the conference room.

میٹنگ کانفرنس روم میں منعقد کی جائے گی۔


She enjoys reading novels in her free time.

وہ اپنے فارغ وقت میں ناول پڑھنا پسند کرتی ہے۔


The government is working on new policies.

حکومت نئی پالیسیوں پر کام کر رہی ہے۔


The research team is analyzing the data.

تحقیقی ٹیم ڈیٹا کا تجزیہ کر رہی ہے۔


The economic situation is improving gradually.

معاشی صورتحال بتدریج بہتر ہو رہی ہے۔


The software update includes several new features.

سافٹ ویئر اپ ڈیٹ میں کئی نئی خصوصیات شامل ہیں۔


The company's profits increased significantly this quarter.

اس سہ ماہی میں کمپنی کے منافع میں نمایاں اضافہ ہوا۔


The complex algorithm requires extensive computational resources.

پیچیدہ الگورتھم کو وسیع کمپیوٹیشنل وسائل کی ضرورت ہے۔


Despite the challenges, they persevered and succeeded.

چیلنجوں کے باوجود، انہوں نے ہمت نہیں ہاری اور کامیابی حاصل کی۔


The implications of the new regulations are far-reaching.

نئے ضوابط کے مضمرات دور رس ہیں۔


The philosophical debate centered on the nature of consciousness.

فلسفیانہ بحث شعور کی نوعیت پر مرکوز تھی۔


The scientific community is still debating the findings.

سائنسی برادری اب بھی ان نتائج پر بحث کر رہی ہے۔


The intricate details of the project were meticulously planned.

منصوبے کی پیچیدہ تفصیلات کو باریک بینی سے منصوبہ بندی کی گئی تھی۔


The economic downturn had a significant impact on the global market.

معاشی بدحالی کا عالمی منڈی پر نمایاں اثر پڑا۔


The artist's innovative techniques revolutionized the art world.

فنکار کی جدید تکنیکوں نے آرٹ کی دنیا میں انقلاب برپا کر دیا۔


First, all registers that can be used to hold variables are stored in the frame.

سب سے پہلے، وہ تمام رجسٹر جو متغیرات کو رکھنے کے لیے استعمال کیے جا سکتے ہیں، فریم میں محفوظ کیے جاتے ہیں۔


In figure 10.3, R0-Rk are assumed to hold variables.

شکل 10.3 میں، یہ فرض کیا جاتا ہے کہ R0-Rk متغیرات کو رکھتے ہیں۔


These are stored in the activation record just above the calling function’s own incoming parameters.

یہ کالنگ فنکشن کے اپنے آنے والے پیرامیٹرز کے بالکل اوپر ایکٹیویشن ریکارڈ میں محفوظ کیے جاتے ہیں۔


Then, the frame-pointer is advanced to point to the new frame and the parameters and the return address are stored in the prescribed locations in the new frame.

پھر، فریم پوائنٹر کو نئے فریم کی طرف اشارہ کرنے کے لیے آگے بڑھایا جاتا ہے اور پیرامیٹرز اور واپسی کا پتہ نئے فریم میں مقررہ مقامات پر محفوظ کیا جاتا ہے۔


Finally, a jump to the function is made.

آخر میں، فنکشن پر ایک چھلانگ لگائی جاتی ہے۔


When the function call returns, the result is read from the frame into the variable x.

جب فنکشن کال واپس آتی ہے، تو نتیجہ فریم سے متغیر x میں پڑھا جاتا ہے۔


FP is restored to its former value and the saved registers are read back from the old frame.

FP کو اس کی سابقہ قدر پر بحال کیا جاتا ہے اور محفوظ شدہ رجسٹروں کو پرانے فریم سے واپس پڑھا جاتا ہے۔


Keeping all the parameters in register-allocated variables until just before the call, and only then storing them in the frame can require a lot of registers to hold the parameters.

کال سے ٹھیک پہلے تک رجسٹر سے مختص متغیرات میں تمام پیرامیٹرز کو رکھنا، اور صرف اس کے بعد انہیں فریم میں محفوظ کرنا پیرامیٹرز کو رکھنے کے لیے بہت سے رجسٹروں کی ضرورت ہو سکتی ہے۔


An alternative is to store each parameter in the frame as soon as it is evaluated.

ایک متبادل یہ ہے کہ ہر پیرامیٹر کو فریم میں محفوظ کیا جائے جیسے ہی اس کا اندازہ لگایا جاتا ہے۔


This way, only one of the variables a1,...,an will be live at any one time.

اس طرح، متغیرات a1,...,an میں سے صرف ایک ہی کسی بھی وقت زندہ رہے گا۔


However, this can go wrong if a later parameter-expression contains a function call, as the parameters to this call will overwrite the parameters of the outer call.

تاہم، یہ غلط ہو سکتا ہے اگر بعد میں پیرامیٹر-ایکسپریشن میں فنکشن کال شامل ہو، کیونکہ اس کال کے پیرامیٹرز بیرونی کال کے پیرامیٹرز کو اوور رائٹ کر دیں گے۔


Hence, this optimisation must only be used if no parameter-expressions contain function calls or if nested calls use stack-locations different from those used by the outer call.

لہذا، یہ اصلاح صرف اس صورت میں استعمال کی جانی چاہیے جب کوئی پیرامیٹر-ایکسپریشن فنکشن کالز پر مشتمل نہ ہو یا اگر نیسٹڈ کالز اسٹیک لوکیشنز استعمال کریں جو بیرونی کال کے ذریعے استعمال ہونے والوں سے مختلف ہوں۔


In this simple call-sequence, we save on the stack all registers that can poten- tially hold variables, so these are preserved across the function call.

اس سادہ کال-سیکوئنس میں، ہم اسٹیک پر وہ تمام رجسٹر محفوظ کرتے ہیں جو ممکنہ طور پر متغیرات کو رکھ سکتے ہیں، اس لیے یہ فنکشن کال میں محفوظ رہتے ہیں۔


This may save more registers than needed, as not all registers will hold values that are required after the call.

یہ ضرورت سے زیادہ رجسٹر محفوظ کر سکتا ہے، کیونکہ کال کے بعد تمام رجسٹر ان اقدار کو نہیں رکھیں گے جو درکار ہیں۔


We will return to this issue in section 10.6.

ہم اس مسئلے پر سیکشن 10.6 میں واپس آئیں گے۔


The convention used by the activation record layout in figure 10.1 is that, before a function is called, the caller saves all registers that must be preserved.

شکل 10.1 میں ایکٹیویشن ریکارڈ لے آؤٹ کے ذریعے استعمال کیا جانے والا کنونشن یہ ہے کہ، کسی فنکشن کو کال کرنے سے پہلے، کالر ان تمام رجسٹروں کو محفوظ کرتا ہے جنہیں محفوظ کیا جانا چاہیے۔


Hence, this strategy is called caller-saves.

لہذا، اس حکمت عملی کو کالر سیوز کہا جاتا ہے۔


An alternative strategy is that the called function saves the contents of the registers that need to be preserved and restores these immediately before the function returns.

ایک متبادل حکمت عملی یہ ہے کہ کال شدہ فنکشن ان رجسٹروں کے مواد کو محفوظ کرتا ہے جنہیں محفوظ کرنے کی ضرورت ہے اور فنکشن واپس آنے سے فوراً پہلے انہیں بحال کرتا ہے۔


اس حکمت عملی کو کالے سیوز کہا جاتا ہے۔


Stack-layout, prologue/epilogue and call sequence for the callee-saves strategy are shown in figures 10.4, 10.5 and 10.6.

کالے سیوز حکمت عملی کے لیے اسٹیک لے آؤٹ، پرولوگ/ایپیلوگ اور کال سیکوئنس شکل 10.4، 10.5 اور 10.6 میں دکھائے گئے ہیں۔


The information is crucial for the project's success.

یہ معلومات منصوبے کی کامیابی کے لیے بہت ضروری ہے۔


Please submit your application before the deadline.

براہ کرم اپنی درخواست آخری تاریخ سے پہلے جمع کروائیں۔


The company announced a new product launch.

کمپنی نے ایک نئی مصنوعات کے آغاز کا اعلان کیا۔


He is a highly respected professor at the university.

وہ یونیورسٹی میں ایک انتہائی معزز پروفیسر ہیں۔


The weather forecast predicts heavy rainfall tomorrow.

موسم کی پیش گوئی کل شدید بارش کی ہے۔


کیا آپ براہ کرم اس بیان کو دہرا سکتے ہیں؟


The algorithm efficiently sorts the data.

الگورتھم ڈیٹا کو مؤثر طریقے سے ترتیب دیتا ہے۔


She is fluent in several foreign languages.

وہ کئی غیر ملکی زبانوں میں روانی سے بات کرتی ہے۔


The economic situation is improving gradually.

معاشی صورتحال بتدریج بہتر ہو رہی ہے۔


We need to analyze the root cause of the problem.

ہمیں مسئلے کی بنیادی وجہ کا تجزیہ کرنے کی ضرورت ہے۔


کانفرنس اگلے مہینے منعقد کی جائے گی۔


He showed great resilience in the face of adversity.

اس نے مشکلات کے باوجود بہت زیادہ لچک کا مظاہرہ کیا۔


The software requires frequent updates to function properly.

سافٹ ویئر کو مناسب طریقے سے کام کرنے کے لیے بار بار اپ ڈیٹس کی ضرورت ہوتی ہے۔


The government implemented new policies to boost the economy.

حکومت نے معیشت کو فروغ دینے کے لیے نئی پالیسیاں نافذ کیں۔


The artist's work is known for its innovative style.

فنکار کا کام اپنے جدید انداز کے لیے جانا جاتا ہے۔


The data indicates a significant increase in sales.

ڈیٹا سے فروخت میں نمایاں اضافہ ظاہر ہوتا ہے۔


The team worked collaboratively to achieve the goal.

ٹیم نے ہدف کو حاصل کرنے کے لیے مل کر کام کیا۔


The project faced several challenges during its development.

منصوبے کو اس کی ترقی کے دوران کئی چیلنجز کا سامنا کرنا پڑا۔


The museum houses a vast collection of artifacts.

اس میوزیم میں نوادرات کا ایک وسیع ذخیرہ موجود ہے۔


The company is committed to sustainable practices.

کمپنی پائیدار طریقوں کے لیے پرعزم ہے۔


The code needs to be optimized for better performance.

بہتر کارکردگی کے لیے کوڈ کو بہتر بنانے کی ضرورت ہے۔


The function call sequence and epilogue need to be examined.

فنکشن کال کی ترتیب اور ایپیلگ کا جائزہ لینے کی ضرورت ہے۔


We can eliminate the saving and restoring of registers.

ہم رجسٹروں کو محفوظ کرنے اور بحال کرنے کو ختم کر سکتے ہیں۔


The compiler optimizes the code to improve efficiency.

کمپائلر کارکردگی کو بہتر بنانے کے لیے کوڈ کو بہتر بناتا ہے۔


Tail-call optimization is a crucial technique.

ٹیل کال آپٹیمائزیشن ایک اہم تکنیک ہے۔


The program uses a stack-based caller-saves strategy.

پروگرام اسٹیک پر مبنی کالر سیو حکمت عملی استعمال کرتا ہے۔


Modern programs rely on library functions.

جدید پروگرام لائبریری فنکشنز پر انحصار کرتے ہیں۔


Specialization can dramatically improve speed.

خصوصی کاری ڈرامائی طور پر رفتار کو بہتر بنا سکتی ہے۔


فنکشن پاور(x, 5) ایک مثال ہے۔


لوپ کی شرط صرف n پر منحصر ہے۔


The code is being analyzed for optimization.

کوڈ کو اصلاح کے لیے تجزیہ کیا جا رہا ہے۔


Memory management is a critical aspect of programming.

میموری مینجمنٹ پروگرامنگ کا ایک اہم پہلو ہے۔


Arrays can be allocated statically, on the stack, or in the heap.

ایریز کو جامد طور پر، اسٹیک پر، یا ہیپ میں مختص کیا جا سکتا ہے۔


Static allocation means data has a known size at compile time.

جامد تخصیص کا مطلب ہے کہ ڈیٹا کا سائز مرتب کرنے کے وقت معلوم ہوتا ہے۔


Global variables are statically allocated in C.

C میں عالمی متغیرات جامد طور پر مختص کیے جاتے ہیں۔


Stack allocation allows for easy memory reuse.

اسٹیک تخصیص میموری کے آسانی سے دوبارہ استعمال کی اجازت دیتا ہے۔


Heap allocation is also called dynamic memory allocation.

ہیپ تخصیص کو متحرک میموری تخصیص بھی کہا جاتا ہے۔


Manual memory management uses malloc() and free().

دستی میموری مینجمنٹ malloc() اور free() استعمال کرتا ہے۔


The free list is a linked list of free blocks.

فری لسٹ مفت بلاکس کی ایک منسلک فہرست ہے۔


Fragmentation can be a problem in memory management.

میموری مینجمنٹ میں ٹکڑے ٹکڑے ہونا ایک مسئلہ ہو سکتا ہے۔


When freeing a block, we subtract one from the size.

جب ہم ایک بلاک کو خالی کرتے ہیں، تو ہم اس کے سائز میں سے ایک گھٹاتے ہیں۔


If the relevant free list is empty, we take the first block in the next free list and split this into two equal-size blocks.

اگر متعلقہ مفت فہرست خالی ہے، تو ہم اگلی مفت فہرست میں پہلا بلاک لیتے ہیں اور اسے دو مساوی سائز کے بلاکس میں تقسیم کرتے ہیں۔


To reduce fragmentation and allow fast joining of freed blocks, some memory managers restrict blocks to be aligned to block size.

فرگمنٹیشن کو کم کرنے اور آزاد بلاکس کو تیزی سے جوڑنے کی اجازت دینے کے لیے، کچھ میموری مینیجر بلاکس کو بلاک سائز کے مطابق کرنے پر پابندی لگاتے ہیں۔


Two blocks that can be joined are called “buddies”.

دو بلاکس جنہیں جوڑا جا سکتا ہے انہیں “بڈیز” کہا جاتا ہے۔


With the buddy system, we get both malloc() and free() down to logarithmic time.

بڈی سسٹم کے ساتھ، ہمیں malloc() اور free() دونوں لاگرتھمک وقت میں ملتے ہیں۔


This waste is sometimes called internal fragmentation.

اس ضائع کو بعض اوقات اندرونی ٹکڑے ٹکڑے ہونا کہا جاتا ہے۔


Manual memory management means that both allocation and deallocation of heap-allocated objects is explicit in the code.

دستی میموری مینجمنٹ کا مطلب ہے کہ ڈھیر سے مختص اشیاء کی تخصیص اور منسوخی دونوں کوڈ میں واضح ہیں۔


If memory is used after it is erroneously freed, the results can be unpredictable.

اگر غلطی سے آزاد ہونے کے بعد میموری استعمال کی جاتی ہے، تو نتائج غیر متوقع ہو سکتے ہیں۔


The available memory can over time be split into a large number of small blocks.

دستیاب میموری وقت کے ساتھ ساتھ بڑی تعداد میں چھوٹے بلاکس میں تقسیم ہو سکتی ہے۔


Many modern languages support automatic memory management, also called garbage collection.

بہت سی جدید زبانیں خودکار میموری مینجمنٹ کی حمایت کرتی ہیں، جسے کوڑا کرکٹ جمع کرنا بھی کہا جاتا ہے۔


The programmer does not need to call free() or object destructors.

پروگرامر کو free() یا آبجیکٹ ڈسٹرکٹرز کو کال کرنے کی ضرورت نہیں ہے۔


If no pointer to a block exists, the program can no longer access the block.

اگر کسی بلاک کی طرف کوئی اشارہ موجود نہیں ہے، تو پروگرام اب بلاک تک رسائی حاصل نہیں کر سکتا۔


To reduce space leaks caused by keeping pointers to blocks that will never be accessed, it is often advised that programmers overwrite (with null) pointers.

ان جگہوں کو کم کرنے کے لیے جو ان بلاکس کی طرف اشارہ رکھنے کی وجہ سے ہوتے ہیں جن تک کبھی رسائی حاصل نہیں کی جائے گی، اکثر پروگرامرز کو مشورہ دیا جاتا ہے کہ وہ (نل کے ساتھ) پوائنٹرز کو اوور رائٹ کریں۔


Reference counting uses the property that if no pointer to a block of memory exists, then the block can not be accessed by the program.

حوالہ جات کی گنتی اس پراپرٹی کا استعمال کرتی ہے کہ اگر میموری کے کسی بلاک کی طرف کوئی اشارہ موجود نہیں ہے، تو پروگرام اس بلاک تک رسائی حاصل نہیں کر سکتا۔


The counter is an extra field in the block in addition to the size field.

کاؤنٹر سائز فیلڈ کے علاوہ بلاک میں ایک اضافی فیلڈ ہے۔


If, after decrementing a counter, the counter becomes 0, the block is freed by calling free().

اگر، ایک کاؤنٹر کو گھٹانے کے بعد، کاؤنٹر 0 ہو جاتا ہے، تو بلاک کو free() کو کال کرکے آزاد کر دیا جاتا ہے۔


A further complication happens if a block can contain pointers to other blocks.

ایک اور پیچیدگی اس وقت ہوتی ہے جب ایک بلاک میں دوسرے بلاکس کی طرف اشارے ہو سکتے ہیں۔


In a strongly typed language, the type will typically have information about which fields are pointers.

ایک مضبوطی سے ٹائپ شدہ زبان میں، قسم میں عام طور پر اس بارے میں معلومات ہوں گی کہ کون سے فیلڈ پوائنٹرز ہیں۔


Tracing garbage collectors determine which blocks are reachable from variables in the program.

ٹریسنک کوڑا کرکٹ جمع کرنے والے یہ تعین کرتے ہیں کہ پروگرام میں متغیرات سے کون سے بلاکس قابل رسائی ہیں۔


The collection of all these variables is called the root set of the heap.

ان تمام متغیرات کے مجموعے کو ڈھیر کا روٹ سیٹ کہا جاتا ہے۔


The garbage collector frees up memory automatically.

کچرا جمع کرنے والا خود بخود میموری خالی کرتا ہے۔


This is a complex process, but it's essential for efficient memory management.

یہ ایک پیچیدہ عمل ہے، لیکن یہ موثر میموری مینجمنٹ کے لیے ضروری ہے۔


The program's performance can be significantly improved by optimizing memory usage.

میموری کے استعمال کو بہتر بنا کر پروگرام کی کارکردگی کو نمایاں طور پر بہتر بنایا جا سکتا ہے۔


Garbage collection pauses can sometimes be noticeable in interactive applications.

کچرا جمع کرنے کے توقف بعض اوقات انٹرایکٹو ایپلی کیشنز میں قابلِ ذکر ہو سکتے ہیں۔


Modern garbage collectors use sophisticated algorithms to minimize these pauses.

جدید کچرا جمع کرنے والے ان توقف کو کم سے کم کرنے کے لیے نفیس الگورتھم استعمال کرتے ہیں۔


The compiler translates the source code into machine code.

کمپائلر سورس کوڈ کو مشین کوڈ میں ترجمہ کرتا ہے۔


Bootstrapping is a technique used to build compilers.

بوٹسٹریپنگ ایک تکنیک ہے جو کمپائلرز بنانے کے لیے استعمال ہوتی ہے۔


The process involves compiling the compiler itself.

اس عمل میں خود کمپائلر کو کمپائل کرنا شامل ہے۔


This allows the compiler to be self-hosted.

یہ کمپائلر کو خود میزبانی کرنے کی اجازت دیتا ہے۔


Bootstrapping is a crucial step in creating new programming languages.

نئی پروگرامنگ زبانیں بنانے میں بوٹسٹریپنگ ایک اہم قدم ہے۔


The T-diagram is a notation used to represent compilers.

ٹی-ڈایاگرام کمپائلرز کی نمائندگی کے لیے استعمال ہونے والا ایک نشان ہے۔


It visually depicts the compilation process.

یہ بصری طور پر کمپائلیشن کے عمل کو ظاہر کرتا ہے۔


The diagram shows the input, the compiler, and the output.

ڈایاگرام ان پٹ، کمپائلر اور آؤٹ پٹ کو ظاہر کرتا ہے۔


Understanding T-diagrams is essential for understanding bootstrapping.

بوٹسٹریپنگ کو سمجھنے کے لیے ٹی-ڈایاگرام کو سمجھنا ضروری ہے۔


The notation helps visualize the different stages of compilation.

یہ نشان کمپائلیشن کے مختلف مراحل کو تصور کرنے میں مدد کرتا ہے۔


نیا سافٹ ویئر آسانی سے چل رہا ہے۔


مجھے تازہ ترین اپ ڈیٹس انسٹال کرنے کی ضرورت ہے۔


سسٹم غیر متوقع طور پر کریش ہو گیا۔


براہ کرم باقاعدگی سے اپنے ڈیٹا کا بیک اپ لیں۔


The program is not responding; I will have to restart it.

پروگرام جواب نہیں دے رہا؛ مجھے اسے دوبارہ شروع کرنا پڑے گا۔


تبصرے اندرونی ہیں۔


Common subexpression elimination is a compiler optimization technique.

عام ذیلی اظہار کو ختم کرنا ایک کمپائلر اصلاحی تکنیک ہے۔


Compilation involves transforming source code into machine code.

ترتیب دینے میں ماخذ کوڈ کو مشین کوڈ میں تبدیل کرنا شامل ہے۔


Compile-time refers to the period when the code is being compiled.

کمپائل ٹائم سے مراد وہ وقت ہے جب کوڈ مرتب کیا جا رہا ہے۔


Compiling compilers are essential for software development.

کمپائل کرنے والے کمپائلرز سافٹ ویئر کی ترقی کے لیے ضروری ہیں۔


پارسننگ میں تنازعہ پیدا ہو سکتا ہے۔


Consistent results are important in programming.

پروگرامنگ میں مستقل نتائج اہم ہیں۔


Constant propagation is an optimization technique.

مستقل پھیلاؤ ایک اصلاحی تکنیک ہے۔


Context-free grammars are used in compiler design.

کمپائلر ڈیزائن میں سیاق و سباق سے پاک گرامر استعمال ہوتی ہے۔


The dangling-else problem is a classic parsing ambiguity.

لٹکا ہوا-ایلس مسئلہ ایک کلاسک پارسننگ ابہام ہے۔


ڈیٹا فلو تجزیہ کوڈ کو بہتر بنانے میں مدد کرتا ہے۔


Dead code elimination removes unnecessary code.

ڈیڈ کوڈ کو ختم کرنا غیر ضروری کوڈ کو ہٹا دیتا ہے۔


اعلان ایک متغیر متعارف کرواتا ہے۔


اشتقاق پارسننگ کا ایک عمل ہے۔


DFA stands for Deterministic Finite Automaton.

DFA کا مطلب ہے قطعی محدود آٹومیٹن۔


Converting an NFA to a DFA is a key step.

NFA کو DFA میں تبدیل کرنا ایک اہم قدم ہے۔


The equivalence of DFAs is an important concept.

DFAs کی مساوات ایک اہم تصور ہے۔


Minimization of DFAs improves efficiency.

DFAs کو کم سے کم کرنا کارکردگی کو بہتر بناتا ہے۔


Domain-specific languages are designed for specific tasks.

مخصوص ڈومین زبانیں مخصوص کاموں کے لیے ڈیزائن کی گئی ہیں۔


Dynamic programming is a useful technique.

متحرک پروگرامنگ ایک مفید تکنیک ہے۔


The compiler allows programs in the new language to be executed.

کمپائلر نئے لسانی پروگراموں کو چلانے کی اجازت دیتا ہے۔


Additionally, the “real” compiler is written in the new language.

اس کے علاوہ، “حقیقی” کمپائلر نئی زبان میں لکھا گیا ہے۔


We, initially, write a compiler from M+ to ML in ML.

ہم، ابتدائی طور پر، M+ سے ML میں ML میں ایک کمپائلر لکھتے ہیں۔


The first step is to compile this, so it can run on some machine.

پہلا مرحلہ یہ ہے کہ اسے مرتب کیا جائے، تاکہ یہ کسی مشین پر چل سکے۔


The QAD compiler can now be used to compile the “real” compiler.

اب QAD کمپائلر کو “حقیقی” کمپائلر کو مرتب کرنے کے لیے استعمال کیا جا سکتا ہے۔


The result is an ML program, which we need to compile.

نتیجہ ایک ML پروگرام ہے، جسے ہمیں مرتب کرنے کی ضرورت ہے۔


The result of this is a compiler with the desired functionality.

اس کا نتیجہ مطلوبہ فعالیت کے ساتھ ایک کمپائلر ہے۔


یہ شاید سست رفتاری سے چلے گا۔


A better result can be obtained by letting the generated compiler compile itself.

ایک بہتر نتیجہ حاصل کیا جا سکتا ہے اگر تیار کردہ کمپائلر کو خود کو مرتب کرنے دیا جائے۔


This yields a compiler with the same functionality as the above.

اس سے اوپر والے کی طرح ہی فعالیت والا کمپائلر حاصل ہوتا ہے۔


یہ وہی کوڈ تیار کرے گا۔


یہ تیز چلے گا۔


Bootstrapping might not be complete even if a compiler with the right functionality has been obtained.

بوٹسٹریپنگ مکمل نہیں ہو سکتی ہے یہاں تک کہ اگر صحیح فعالیت والا کمپائلر حاصل کر لیا گیا ہو۔


ہم ایک QAD مترجم لکھ سکتے ہیں۔


ہم ML میں ایک M+ مترجم لکھ سکتے ہیں۔


ہمیں پہلے اسے مرتب کرنے کی ضرورت ہوگی۔


We can then use this to run the M+ compiler directly.

پھر ہم اسے M+ کمپائلر کو براہ راست چلانے کے لیے استعمال کر سکتے ہیں۔


Nothing will be gained by using the generated compiler to compile itself.

تیار کردہ کمپائلر کو خود کو مرتب کرنے کے لیے استعمال کرنے سے کچھ حاصل نہیں ہوگا۔


This step can still be used as a test and for extensions.

یہ قدم اب بھی ایک ٹیسٹ اور توسیع کے لیے استعمال کیا جا سکتا ہے۔


For some languages, a QAD compiler will be easier to write than an interpreter.

کچھ زبانوں کے لیے، ایک QAD کمپائلر ایک مترجم لکھنے سے زیادہ آسان ہوگا۔