संकलक (compiler) म्हणजे काय?


संकलकाचे टप्पे महत्त्वाचे आहेत.


संकलकांबद्दल (compilers) शिकणे का आवश्यक आहे?


हे पुस्तक संकलक डिझाइनबद्दल आहे.


Regular expressions are used in lexical analysis.

लेक्सिकल विश्लेषणात नियमित अभिव्यक्तींचा वापर केला जातो.


Converting a regular expression to an NFA is a key step.

नियमित अभिव्यक्तीचे NFA मध्ये रूपांतर करणे हे एक महत्त्वाचे पाऊल आहे.


Deterministic finite automata are important.

निश्चित有限 ऑटोमेटा महत्त्वाचे आहेत.


Minimization of DFAs improves performance.

DFA चे न्यूनतमकरण कार्यक्षमतेत सुधारणा करते.


लेक्सर जनरेटर (lexer generators) प्रक्रिया सुलभ करतात.


Context-free grammars are fundamental to syntax analysis.

संदर्भ-मुक्त व्याकरण वाक्यरचना विश्लेषणासाठी मूलभूत आहे.


व्युत्पत्ती (derivation) पार्सिंगमधील एक महत्त्वाची संकल्पना आहे.


ऑपरेटर प्राधान्य अस्पष्टता दूर करते.


अनुमानित पार्सिंग (predictive parsing) एक तंत्र आहे.


LL(1) पार्सिंग हे पार्सिंगचा एक प्रकार आहे.


SLR पार्सिंग ही आणखी एक पार्सिंग पद्धत आहे.


Symbol tables are used for scope management.

प्रतीक सारणी (symbol tables) कार्यक्षेत्र व्यवस्थापनासाठी वापरल्या जातात.


Type checking ensures program correctness.

प्रकार तपासणी (type checking) प्रोग्रामची अचूकता सुनिश्चित करते.


Intermediate-code generation is a crucial step.

मध्यवर्ती-कोड निर्मिती (intermediate-code generation) एक महत्त्वपूर्ण टप्पा आहे.


Machine-code generation is the final stage.

मशीन-कोड निर्मिती (machine-code generation) अंतिम टप्पा आहे.


Register allocation optimizes code execution.

नोंदणी वाटप (register allocation) कोड अंमलबजावणीस अनुकूल करते.


कार्यक्रम कोड संकलित करेल.


Please enter your username and password.

कृपया तुमचा वापरकर्तानाव आणि संकेतशब्द प्रविष्ट करा.


बातमीमध्ये मोठ्या भूकंपाची नोंद आहे.


ती ग्रंथालयात पुस्तक वाचत आहे.


The company announced its quarterly results.

कंपनीने तिचे तिमाही निकाल जाहीर केले.


The algorithm efficiently sorts the data.

अल्गोरिदम डेटाची कार्यक्षमतेने क्रमवारी लावतो.


The government is discussing new policies.

सरकार नवीन धोरणांवर चर्चा करत आहे.


तो एक अतिशय प्रतिभावान संगीतकार आहे.


The research paper explores various aspects of climate change.

संशोधन निबंध हवामान बदलाच्या विविध पैलूंचा शोध घेतो.


The complex system requires careful analysis.

गुंतागुंतीच्या प्रणालीसाठी काळजीपूर्वक विश्लेषणाची आवश्यकता आहे.


The economic forecast predicts a recession.

आर्थिक अंदाजानुसार मंदी येण्याची शक्यता आहे.


The artist's work is displayed in the museum.

कलाकाराचे काम वस्तुसंग्रहालयात प्रदर्शित केले आहे.


The software update includes several bug fixes.

सॉफ्टवेअर अपडेटमध्ये अनेक बग निश्चिती समाविष्ट आहेत.


The negotiations are ongoing between the two countries.

दोन देशांमध्ये वाटाघाटी सुरू आहेत.


The philosophical concept is difficult to grasp.

तत्त्वज्ञानाचा हा विचार समजणे कठीण आहे.


The historical context is crucial for understanding the event.

या घटनेचा अर्थ लावण्यासाठी ऐतिहासिक संदर्भ महत्त्वाचा आहे.


संघ एका नवीन प्रकल्पावर काम करत आहे.


The weather forecast predicts heavy rain tomorrow.

हवामान खात्यानुसार उद्या जोरदार पाऊस येण्याची शक्यता आहे.


The data analysis revealed interesting patterns.

डेटा विश्लेषणातून मनोरंजक नमुने समोर आले.


The judge delivered a verdict in the case.

न्यायाधीशांनी या प्रकरणावर निर्णय दिला.


The compiler translates the program into machine code.

संकलक (compiler) प्रोग्रामचे मशीन कोडमध्ये भाषांतर करतो.


Lexical analysis is the first phase of compilation.

लेक्सिकल विश्लेषण हे संकलनाचे पहिले चरण आहे.


Regular expressions are used to define tokens.

नियमित अभिव्यक्तींचा वापर टोकन परिभाषित करण्यासाठी केला जातो.


The syntax tree is processed to evaluate expressions.

व्यक्तीकरणे (expressions) मूल्यांकनासाठी वाक्यरचना वृक्ष (syntax tree) प्रक्रिया केली जाते.


Interpreters execute statements directly.

इंटरप्रिटर थेट विधानं (statements) कार्यान्वित करतात.


Compilers optimize code for better efficiency.

संकलक अधिक चांगल्या कार्यक्षमतेसाठी कोडचे अनुकूलन करतात.


Domain-specific languages are gaining popularity.

विशिष्ट-डोमेन भाषा (Domain-specific languages) लोकप्रिय होत आहेत.


The book discusses lexical analysis and syntax analysis.

हे पुस्तक लेक्सिकल विश्लेषण आणि वाक्यरचना विश्लेषणावर चर्चा करते.


A lexer divides the input string into tokens.

एक लेक्सर इनपुट स्ट्रिंगला टोकनमध्ये विभागतो.


The main purpose of lexical analysis is to make life easier for the subsequent syntax analysis phase.

लेक्सिकल विश्लेषणाचा मुख्य उद्देश पुढील वाक्यरचना विश्लेषण टप्प्यासाठी गोष्टी सुलभ करणे आहे.


Efficiency is a key factor in compiler design.

संकलक डिझाइनमध्ये कार्यक्षमतेचा घटक महत्त्वाचा आहे.


Modularity helps in organizing the syntactical description.

मॉड्युलॅरिटी वाक्यरचनात्मक वर्णनाचे आयोजन करण्यास मदत करते.


Interpreters are often slower than compiled programs.

इंटरप्रिटर अनेकदा संकलित प्रोग्रामपेक्षा कमी वेगाने चालतात.


Understanding compilers helps programmers.

संकलकांचे (compilers) ज्ञान प्रोग्रामर्सना मदत करते.


Error messages can be more precise in interpreters.

इंटरप्रिटरमध्ये त्रुटी संदेश अधिक अचूक असू शकतात.


The techniques used for reading program text are useful for other purposes as well.

प्रोग्राम मजकूर वाचण्यासाठी वापरल्या जाणाऱ्या तंत्रांचा उपयोग इतर कामांसाठीही होतो.


A DSL is a language designed for a narrow class of problems.

डीएसएल (DSL) ही एक विशिष्ट प्रकारच्या समस्यांसाठी डिझाइन केलेली भाषा आहे.


The book is written for an introductory compiler course.

हे पुस्तक प्रारंभिक संकलक अभ्यासक्रमासाठी लिहिले आहे.


Lexical analysis is also known as scanning.

लेक्सिकल विश्लेषणाला स्कॅनिंग म्हणूनही ओळखले जाते.


The compiler course was previously taught right after the introductory programming course.

संकलक वर्ग यापूर्वी, प्रारंभिक प्रोग्रामिंग कोर्सनंतर लगेच शिकवला जात होता.


The compiler translates high-level code into machine language.

संकलक उच्च-स्तरीय कोडचे मशीन भाषेत भाषांतर करतो.


A compiler bridges the gap between human-readable code and machine instructions.

संकलक मानवाद्वारे वाचनीय कोड आणि मशीन सूचनांमधील अंतर कमी करतो.


High-level languages make programming easier and faster.

उच्च-स्तरीय भाषांमुळे प्रोग्रामिंग सोपे आणि जलद होते.


The compiler identifies and reports programmer errors.

संकलक प्रोग्रामरच्या चुका ओळखतो आणि त्याबद्दल माहिती देतो.


Programs written in high-level languages can run on different machines.

उच्च-स्तरीय भाषेत लिहिलेले प्रोग्राम विविध मशीनवर चालवता येतात.


Machine language is a tedious and error-prone process.

मशीन भाषा एक कंटाळवाणा आणि त्रुटी-प्रवण प्रक्रिया आहे.


The lexical analysis phase divides the text into tokens.

लेक्सिकल विश्लेषण टप्पा मजकुराला टोकनमध्ये विभागतो.


Syntax analysis arranges tokens into a tree structure.

वाक्यरचना विश्लेषण टोकनची मांडणी ट्री स्ट्रक्चरमध्ये करते.


Type checking ensures the program's consistency.

प्रकार तपासणी प्रोग्रामची सुसंगतता सुनिश्चित करते.


The compiler attempts to spot obvious programmer mistakes.

संकलक प्रोग्रामरच्या स्पष्ट चुका शोधण्याचा प्रयत्न करतो.


A good compiler can get close to the speed of hand-written machine code.

एक चांगला संकलक, हस्तलिखित मशीन कोडच्या गतीजवळ पोहोचू शकतो.


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

प्रोग्रामिंग भाषांद्वारे वापरलेली लिपी मानवांच्या विचार करण्याच्या पद्धतीच्या जवळ आहे.


The same program can be compiled to many different machine languages.

एकाच प्रोग्रामचे अनेक वेगवेगळ्या मशीन भाषांमध्ये संकलन केले जाऊ शकते.


Lexical analysis is the initial part of reading and analyzing the program text.

लेक्सिकल विश्लेषण प्रोग्राम मजकूर वाचून त्याचे विश्लेषण करण्याची प्रारंभिक प्रक्रिया आहे.


Syntax analysis is often called parsing.

वाक्यरचना विश्लेषणाला अनेकदा पार्सिंग म्हणतात.


The compiler will also attempt to spot and report obvious programmer mistakes.

संकलक प्रोग्रामरच्या स्पष्ट चुका शोधून त्याबद्दल माहिती देण्याचा प्रयत्न करेल.


During this process, the compiler will also attempt to spot and report obvious programmer mistakes.

या प्रक्रियेदरम्यान, संकलक प्रोग्रामरच्या स्पष्ट चुका शोधण्याचा आणि त्याबद्दल माहिती देण्याचा प्रयत्न करेल.


Using a high-level language for programming has a large impact on how fast programs can be developed.

प्रोग्रामिंगसाठी उच्च-स्तरीय भाषेचा वापर केल्याने प्रोग्राम किती जलद विकसित करता येतात यावर मोठा परिणाम होतो.


A compiler translates a program written in a high-level programming language into the low-level machine language.

संकलक उच्च-स्तरीय प्रोग्रामिंग भाषेत लिहिलेल्या प्रोग्रामचे निम्न-स्तरीय मशीन भाषेत भाषांतर करतो.


The main reasons for this are: Compared to machine language, the notation used by programming languages is closer to the way humans think about problems.

याची मुख्य कारणे खालीलप्रमाणे आहेत: मशीन भाषेच्या तुलनेत, प्रोग्रामिंग भाषांद्वारे वापरलेली लिपी मानवांना समस्यांबद्दल विचार करण्याच्या पद्धतीच्या जवळ आहे.


The DFA is a lot faster to use than NFAs or regular expressions.

DFA वापरण्यासाठी NFA किंवा रेग्युलर एक्स्प्रेशन्सपेक्षा खूप जलद आहे.


Even though the DFA in figure 2.9 has only four states, it is not minimal.

आकृती 2.9 मधील DFA मध्ये केवळ चार राज्ये असली तरी, ते किमान नाही.


We can hence collapse these states into a single state and get a three-state DFA.

म्हणूनच, आम्ही ही राज्ये एकाच स्थितीत एकत्र करू शकतो आणि तीन-राज्यांचा DFA मिळवू शकतो.


An accepting state is not equivalent to a non-accepting state.

स्वीकृत स्थिती, अस्वीकृत स्थितीच्या समान नाही.


If two states s1 and s2 have transitions on the same symbol c to states t1 and t2 that we have already proven to be different, then s1 and s2 are different.

जर दोन राज्ये s1 आणि s2 मध्ये समान चिन्हावर (c) संक्रमण t1 आणि t2 राज्यांमध्ये होत असेल, जे आधीच वेगळे असल्याचे सिद्ध झाले आहे, तर s1 आणि s2 वेगळे आहेत.


We start with two groups: the set of accepting states F and the set of non-accepting states S\F.

आम्ही दोन गटांपासून सुरुवात करतो: स्वीकृत राज्यांचा संच F आणि अस्वीकृत राज्यांचा संच S\F.


If there are no unmarked groups left, we are done and the remaining groups are the states of the minimal DFA.

जर कोणताही गट शिल्लक नसेल, तर आपले काम झाले आहे आणि उर्वरित गट हे किमान DFA ची राज्ये आहेत.


The starting state of the minimal DFA is the group that contains the original starting state.

किमान DFA ची प्रारंभिक स्थिती, मूळ प्रारंभिक स्थिती असलेल्या गटात आहे.


The time needed for minimisation using algorithm 2.4 depends on the strategy used for picking groups in step 2.

अल्गोरिदम 2.4 वापरून कमी करण्यासाठी लागणारा वेळ, पायरी 2 मध्ये गट निवडण्यासाठी वापरलेल्या धोरणावर अवलंबून असतो.


A dead state is a state from which no accepting state can be reached.

डेड स्टेट (dead state) म्हणजे असे राज्य आहे जिथे कोणतेही स्वीकृत राज्य पोहोचू शकत नाही.


Such do not occur in DFAs constructed from NFAs without dead states.

असे डेड स्टेट्स (dead states) NFAs पासून बनवलेल्या DFAs मध्ये आढळत नाहीत, ज्यात डेड स्टेट्स नाहीत.


However, if we get a DFA of unknown origin, we risk that it may contain both dead states and undefined transitions.

परंतु, जर आपल्याला अज्ञात उत्पत्तीचा DFA मिळाला, तर त्यात डेड स्टेट्स (dead states) आणि अपरिभाषित संक्रमण (undefined transitions) दोन्ही असू शकतात, याचा धोका असतो.


States 1 and 2 are, in fact, equivalent.

वास्तविक पाहता, राज्ये 1 आणि 2 समतुल्य आहेत.


A minimal equivalent DFA has only one accepting state with a transition to itself on a.

किमान समतुल्य DFA मध्ये फक्त एक स्वीकृत राज्य आहे, ज्यामध्ये 'a' वर स्वतःकडे संक्रमण आहे.


Make sure there are no undefined transitions.

अपरिभाषित संक्रमण (undefined transitions) नाहीत, याची खात्री करा.


A lexer has to distinguish between several different types of tokens.

लेक्सरला विविध प्रकारच्या टोकन्समध्ये फरक करावा लागतो.


A lexer does not check if its entire input is included in the languages defined by the regular expressions.

लेक्सर हे तपासत नाही की त्याचा संपूर्ण इनपुट रेग्युलर एक्स्प्रेशन्सद्वारे परिभाषित केलेल्या भाषांमध्ये समाविष्ट आहे की नाही.


If there are several ways to split the input into legal tokens, the lexer has to decide which of these it should use.

इनपुट कायदेशीर टोकन्समध्ये विभाजित करण्याचे अनेक मार्ग असल्यास, लेक्सरला त्यापैकी कोणता वापरायचा हे ठरवावे लागते.


A program that takes a set of token definitions and generates a lexer is called a lexer generator.

टोकन व्याख्यांचा संच घेणारा आणि लेक्सर तयार करणार्‍या प्रोग्रामला लेक्सर जनरेटर म्हणतात.


हे करणे कठीण नाही.


The program uses functions to analyze the input.

हा प्रोग्राम इनपुटचे विश्लेषण करण्यासाठी फंक्शन्स वापरतो.


Each function examines the next input symbol.

प्रत्येक फंक्शन पुढील इनपुट चिन्हाची तपासणी करते.


If they match, we move to the next input symbol.

जर ते जुळले, तर आपण पुढील इनपुट चिन्हावर जातो.


अन्यथा, एक त्रुटी दर्शविली जाते.


A nonterminal is handled by calling the corresponding function.

नॉनटर्मिनल संबंधित फंक्शनला कॉल करून हाताळले जाते.


When there are no more symbols, the function returns.

जेव्हा यापुढे कोणतीही चिन्हे नसतात, तेव्हा फंक्शन परत येते.


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

आकृती 3.16 मध्ये पुनरावृत्ती वंशज पार्सरसाठी स्यूडो-कोड दर्शविला आहे.


We have added a check on the next input symbol.

आम्ही पुढील इनपुट चिन्हावर एक तपासणी जोडली आहे.


हे parseT’ फंक्शनमध्ये दर्शविले आहे.


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

parseT फंक्शनसाठी, आम्ही T साठी उत्पादने पाहतो.


Since R is also Nullable, we must choose this production.

R देखील Nullable असल्यामुळे, आम्हाला हे उत्पादन निवडणे आवश्यक आहे.


On all other symbols we report an error.

इतर सर्व चिन्हांवर आम्ही त्रुटी नोंदवतो.


The function match takes a symbol as an argument.

match फंक्शन एक चिन्ह युक्तिवाद म्हणून घेते.


If they are equal, the following symbol is read.

जर ते समान असतील, तर पुढील चिन्ह वाचले जाते.


The program in figure 3.16 only checks if the input is valid.

आकृती 3.16 मधील प्रोग्राम फक्त इनपुट वैध आहे की नाही हे तपासतो.


It can easily be extended to construct a syntax tree.

हे वाक्यरचना वृक्ष तयार करण्यासाठी सहजपणे विस्तारित केले जाऊ शकते.


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

टेबल-चालित LL(1) पार्सिंगमध्ये, आम्ही उत्पादनांची निवड एन्कोड करतो.


A simple non-recursive program uses this table.

एक साधे नॉन-रिकर्सिव्ह प्रोग्राम हे टेबल वापरतो.


The table is cross-indexed by nonterminal and terminal.

टेबल नॉनटर्मिनल आणि टर्मिनलद्वारे क्रॉस-इंडेक्स केलेले आहे.


This decision is made just as for recursive descent parsing.

हा निर्णय पुनरावृत्ती वंशज पार्सिंगप्रमाणेच घेतला जातो.


The parser constructs a syntax tree from the string of tokens.

पार्सर टोकनच्या स्ट्रिंगमधून वाक्यरचना वृक्ष तयार करतो.


Precedence rules help resolve ambiguity in expression syntax.

प्राधान्य नियम अभिव्यक्तीच्या वाक्यरचनेत संदिग्धता सोडवण्यास मदत करतात.


The 'dangling-else' problem is a classic example of ambiguity.

'डँगलिंग-एल्स' समस्या संदिग्धतेचे एक उत्कृष्ट उदाहरण आहे.


The grammar can be rewritten to resolve ambiguity.

संदिग्धता दूर करण्यासाठी व्याकरण पुन्हा लिहिले जाऊ शकते.


Syntax analysis is a crucial phase of a compiler.

संकलक (compiler) च्या दृष्टीने वाक्यरचना विश्लेषण (syntax analysis) एक महत्त्वपूर्ण टप्पा आहे.


Predictive parsing methods build the syntax tree from the root down.

अनुमानात्मक पार्सिंग पद्धती वाक्यरचना वृक्ष मुळापासून तयार करतात.


Bottom-up parsing methods work in the opposite direction.

तळापासून वरपर्यंतच्या पार्सिंग पद्धती विरुद्ध दिशेने कार्य करतात.


The parser chooses the production by which the leftmost nonterminal should be rewritten.

पार्सर त्या उत्पादनाची निवड करतो ज्याद्वारे सर्वात डावीकडील नॉनटर्मिनल पुन्हा लिहिले जावे.


The FIRST set helps in making deterministic choices.

FIRST संच (set) निश्चित निवड करण्यात मदत करतो.


A production is nullable if it can derive the empty string.

जर एखादे उत्पादन (production) रिक्त स्ट्रिंग (string) तयार करू शकत असेल, तर ते शून्यक्षम (nullable) आहे.


The FOLLOW set helps determine when to select nullable productions.

FOLLOW संच (set) शून्यक्षम उत्पादने (nullable productions) कधी निवडायची हे ठरविण्यात मदत करते.


LL(1) parsing uses a one-symbol lookahead.

LL(1) पार्सिंग एक-चिन्ह (one-symbol) लुकअहेड वापरते.


Recursive descent is a method for implementing LL(1) parsers.

रिकर्सिव्ह डिसेंट (recursive descent) हे LL(1) पार्सर लागू करण्याची एक पद्धत आहे.


संकलक कोडचे विश्लेषण करतो.


This grammar describes even-length strings.

हे व्याकरण सम-लांबीच्या स्ट्रिंगचे वर्णन करते.


The syntax tree represents the structure of the code.

वाक्यरचना वृक्ष कोडची रचना दर्शवतो.


पार्सर टोकन ओळखतो.


संदिग्धता दूर करणे आवश्यक आहे.


आम्ही अनुमानात्मक पार्सिंग पाहू.


इनपुट स्ट्रिंगचे विश्लेषण केले जाते.


सामान्यतः, लेक्सर त्रुटी दर्शवेल.


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.

उदाहरणार्थ, इनपुटमधील गुणाकाराचे चिन्ह जुळवण्यासाठी * चा वापर पुनरावृत्ती दर्शवण्यासाठी वापरल्या जाणार्‍या * पेक्षा वेगळा आहे.


Additionally, some lexer generators extend regular expressions in various ways.

याव्यतिरिक्त, काही लेक्सर जनरेटर विविध मार्गांनी नियमित अभिव्यक्तींचा विस्तार करतात.


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 चांगला मोठा असू शकतो.


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).

जिथे φ हे रिक्त भाषेसाठीचे नियमित अभिव्यक्ती आहे (उदा. २.१० पहा).


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 नियमांमधील दर्शविल्याप्रमाणे अभिव्यक्ती वापरून non-empty ची व्याख्या पूर्ण करा.


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

ब) या व्याख्येचा वापर करून non-empty(a * b * ) शोधा.


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

उदाहरण २.१६ जर L ही नियमित भाषा असेल, तर L मधील स्ट्रिंगच्या सर्व उपसर्गोंचा संच देखील नियमित आहे (विभाग २.१०.३ पहा).


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.

अ) वरील नियमांमधील “...” च्या जागी ε, a आणि s|t नियमांमधील दर्शविल्याप्रमाणे अभिव्यक्ती वापरून prefixes ची व्याख्या पूर्ण करा.


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.

धडा ३ वाक्यरचना विश्लेषण ३.१ प्रस्तावना जेथे शब्दार्थ विश्लेषण इनपुटला टोकनमध्ये विभाजित करते, तेथे वाक्यरचना विश्लेषणाचा (पार्सिंग म्हणूनही ओळखले जाते) उद्देश या टोकनचे पुनर्संयोजन करणे आहे.


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.

म्हणून, वाक्यरचना वृक्षात काय महत्त्वाचे आहे ते म्हणजे या पानांचे वृक्षाची रचना तयार करण्यासाठी कसे एकत्रिकरण केले जाते आणि वृक्षाच्या आतील नोड्सना कसे लेबल केले जाते.


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 transitions 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 तयार करतात.


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

आता, विभाग 2.5 मध्ये दर्शविल्याप्रमाणे सबसेट बांधकाम वापरून, या NFA चे DFA मध्ये रूपांतर करणे आवश्यक आहे.


Instead of showing the resulting DFA graphically, we construct a table where transitions on terminals are shown as shift actions and transitions on nonterminals as go actions.

परिणामी DFA आलेखाद्वारे दर्शविण्याऐवजी, आम्ही एक सारणी तयार करतो, जिथे टर्मिनल्समधील संक्रमण शिफ्ट क्रिया म्हणून आणि नॉनटर्मिनल्समधील संक्रमण गो क्रिया म्हणून दर्शविले जातात.


This will make the table look similar to figure 3.22, except that no reduce or accept actions are present yet.

यामुळे सारणी आकृती 3.22 सारखी दिसेल, फक्त त्यात कोणतीही कमी किंवा स्वीकृती क्रिया अद्याप उपस्थित नाही.


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

आकृती 3.28 मध्ये, आकृती 3.27 मधील एप्सिलॉन-संक्रमण आकृती 3.26 मध्ये जोडून तयार केलेला NFA वापरून तयार केलेला DFA दर्शविला आहे.


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

प्रत्येक DFA स्थिती तयार करणारे NFA राज्यांचे संच आकृती 3.28 मधील सारणीच्या दुसऱ्या स्तंभात दर्शविले आहेत.


We will need these below for adding reduce and accept actions, but once this is done, we will not need them anymore, so we can remove them from the final table.

कमी आणि स्वीकृती क्रिया जोडण्यासाठी, खाली आम्हाला ह्यांची आवश्यकता असेल, परंतु हे झाल्यावर, आम्हाला यापुढे त्यांची आवश्यकता नाही, म्हणून आम्ही त्यांना अंतिम सारणीतून काढू शकतो.


To add reduce and accept actions, we first need to compute the FOLLOW sets for each nonterminal, as described in section 3.10.

कमी आणि स्वीकृती क्रिया जोडण्यासाठी, प्रथम, विभाग 3.10 मध्ये वर्णन केल्याप्रमाणे, प्रत्येक नॉनटर्मिनलसाठी फॉलो संच (FOLLOW sets) मोजणे आवश्यक आहे.


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

फॉलो (FOLLOW) ची गणना करण्यासाठी, आम्ही आणखी एक अतिरिक्त प्रारंभ उत्पादन जोडतो: T ′′ → T ′ $ , विभाग 3.10 मध्ये वर्णन केल्याप्रमाणे, मजकुराच्या समाप्तीची स्थिती हाताळण्यासाठी.


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

यामुळे खालील परिणाम मिळतो: फॉलो(T ′ ) = {$}, फॉलो(T) = {c, $}, फॉलो(R) = {c, $}


We then add reduce actions by the following rule: If a DFA state contains the accepting NFA state for a production p: N → α, we add reduce p as action to all symbols in FOLLOW(N).

त्यानंतर, आम्ही खालील नियमानुसार कमी क्रिया (reduce actions) जोडतो: जर DFA स्थितीत उत्पादन p: N → α साठी स्वीकारणारे NFA राज्य असेल, तर आम्ही फॉलो(N) मधील सर्व चिन्हांवर कमी p क्रिया जोडतो.


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

उत्पादन 0 (NFA तयार करण्यापूर्वी जोडलेले अतिरिक्त प्रारंभ उत्पादन) वरील घट (Reduction) स्वीकार म्हणून लिहिले जाते.


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 symbols c and $ (as these are in FOLLOW(R)).

म्हणून, आम्ही r3 क्रिया c आणि $ चिन्हांवर जोडतो (कारण हे फॉलो(R) मध्ये आहेत).


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

राज्य 1 मध्ये NFA राज्य B आहे, जे उत्पादन 0 स्वीकारते.


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

आम्ही हे $ (फॉलो(T ′ )) चिन्हावर जोडतो.


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

वर नमूद केल्याप्रमाणे, हे स्वीकार म्हणून लिहिले जाते (संक्षिप्त “a”).


In the same way, we add reduce actions to state 3, 4, 6 and 7. The result is shown in figure 3.22.

त्याचप्रमाणे, आम्ही राज्य 3, 4, 6 आणि 7 मध्ये कमी क्रिया (reduce actions) जोडतो. परिणाम आकृती 3.22 मध्ये दर्शविला आहे.


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.

अर्थ लावण्याचे सिद्धांत दर्शविण्यासाठी आम्ही एक लहान भाषा वापरू.


The language is a first-order functional language with recursive definitions.

भाषा पुनरावृत्ती व्याख्यांसह प्रथम-क्रम कार्यात्मक भाषा आहे.


वाक्यरचना व्याकरण ५.१ मध्ये दिली आहे.


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.

एका फंक्शनचे शरीर एक अभिव्यक्ती आहे.


Execution of the program is by calling this function with the input.

प्रोग्रामची अंमलबजावणी इनपुटसह हे फंक्शन कॉल करून केली जाते.


The compiler translates high-level code into machine code.

संकलक उच्च-स्तरीय कोडचे मशीन कोडमध्ये भाषांतर करतो.


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

प्रकार तपासणी (टाईप चेकिंग) सुनिश्चित करते की प्रोग्राममधील डेटा प्रकारांचा योग्य वापर केला जातो.


In this chapter, we will focus on type checking.

या अध्यायात, आपण प्रकार तपासणीवर लक्ष केंद्रित करू.


हे कार्य (फंक्शन) एक प्रकारची त्रुटी दर्शवते.


एका संख्येचा प्रकार 'int' आहे.


The type of a variable is found by looking its name up in the symbol table.

एखाद्या व्हेरिएबलचा प्रकार त्याच्या नावाला सिम्बॉल टेबलमध्ये शोधून काढला जातो.


Comparison requires that the arguments have the same type.

तुलना करण्यासाठी आवश्यक आहे की दोन्ही युक्तिवादांचा (arguments) प्रकार समान असावा.


In a conditional expression, the condition must be of type bool.

शर्त (conditional) अभिव्यक्तीमध्ये, अट 'bool' प्रकारची असणे आवश्यक आहे.


The result of a condition is the value of one of the branches.

एका स्थितीचा परिणाम म्हणजे फांद्यांपैकी एकाचे मूल्य.


At a function call, the function name is looked up in the function environment.

फंक्शन कॉलवर, फंक्शनचे नाव फंक्शन एन्व्हायरमेंटमध्ये शोधले जाते.


A let-expression declares a new variable.

'लेट-एक्सप्रेशन' एक नवीन व्हेरिएबल घोषित करते.


The symbol table for variables is extended using the function bind.

व्हेरिएबल्ससाठीचे सिम्बॉल टेबल 'bind' फंक्शन वापरून वाढवले जाते.


The type check function for functions has as inherited attribute the symbol table for functions.

फंक्शनसाठीच्या प्रकार तपासणी कार्यामध्ये, फंक्शनसाठीचे सिम्बॉल टेबल एक वारसा हक्काचे वैशिष्ट्य म्हणून असते.


A program is a list of functions and is deemed type correct if all the functions are type correct.

प्रोग्राम हे फंक्शन्सची एक सूची आहे आणि ते प्रकारानुसार योग्य मानले जाते जर सर्व फंक्शन्स प्रकारानुसार योग्य असतील.


Overloading means that the same name is used for several different operations.

ओव्हरलोडिंगचा अर्थ असा आहे की, समान नाव अनेक वेगवेगळ्या ऑपरेशन्ससाठी वापरले जाते.


Some languages allow implicit conversion of integers to floats.

काही भाषा पूर्णांकांचे फ्लोटमध्ये (float) रूपांतरण (conversion) करण्यास अनुमती देतात.


A function can be polymorphic or generic.

एक फंक्शन बहुरूपी (polymorphic) किंवा सामान्य (generic) असू शकते.


Type inference algorithm is used to infer the types of variables.

व्हेरिएबल्सचे प्रकार अनुमानित (infer) करण्यासाठी प्रकार अनुमान (type inference) अल्गोरिदम वापरला जातो.


The compiler's final goal is to run programs on a computer.

संकलकाचे (compiler) अंतिम ध्येय संगणकावर प्रोग्राम चालवणे आहे.


Intermediate code is a stepping-stone between high-level and machine code.

मध्यवर्ती कोड (intermediate code) उच्च-स्तरीय आणि मशीन कोडच्या दरम्यानचा एक टप्पा आहे.


Context-free languages are capable of such counting, essentially using the stack for this purpose.

संदर्भ-मुक्त भाषा अशा मोजणीस सक्षम आहेत, आणि त्या मुख्यतः यासाठी स्टॅकचा वापर करतात.


Even so, there are limitations: A context-free language can only keep count of one thing at a time.

तरीही, मर्यादा आहेत: संदर्भ-मुक्त भाषा एका वेळी फक्त एकाच गोष्टीची गणना करू शकते.


Context-free languages are, as regular languages, closed under union.

नियमित भाषांप्रमाणे, संदर्भ-मुक्त भाषा देखील संयोगाखाली बंद असतात.


Context-free languages are also closed under prefix, suffix, subsequence and reversal.

संदर्भ-मुक्त भाषा उपसर्ग, प्रत्यय, उप-अनुक्रम आणि उलट्या क्रमाने देखील बंद असतात.


However, context-free languages are not closed under intersection or complement.

परंतु, संदर्भ-मुक्त भाषा छेदन किंवा पूरकतेखाली बंद नाहीत.


Context-free grammars were first proposed as a notation for describing natural languages.

संदर्भ-मुक्त व्याकरणे नैसर्गिक भाषांचे वर्णन करण्यासाठी प्रथम एक नोटेशन म्हणून प्रस्तावित केली गेली.


The qualifier “context-free” distinguishes this notation from the other two grammar notations.

"संदर्भ-मुक्त" हे विशेषण या नोटेशनला इतर दोन व्याकरण नोटेशनपासून वेगळे करते.


In context-free grammars, derivation of a nonterminal is independent of the context.

संदर्भ-मुक्त व्याकरणामध्ये, नॉनटर्मिनलची व्युत्पत्ती संदर्भावर अवलंबून नसते.


Context-free grammars are actually too weak to describe natural languages.

संदर्भ-मुक्त व्याकरणे नैसर्गिक भाषांचे वर्णन करण्यासाठी खरोखरच खूपच कमकुवत आहेत.


Since then, variants of this notation has been used for defining or describing almost all programming languages.

त्यानंतर, या नोटेशनचे प्रकार जवळजवळ सर्व प्रोग्रामिंग भाषा परिभाषित करण्यासाठी किंवा त्यांचे वर्णन करण्यासाठी वापरले गेले आहेत.


Most parser generators are based on LALR(1) parsing, but a few use LL(1) parsing.

बहुतेक पार्सर जनरेटर LALR(1) पार्सिंगवर आधारित आहेत, परंतु काही LL(1) पार्सिंग वापरतात.


The Dragon Book tells more about parsing methods than the present book.

"द ड्रॅगन बुक" या पुस्तकात सध्याच्या पुस्तकापेक्षा पार्सिंग पद्धतींबद्दल अधिक माहिती दिली आहे.


Several textbooks describe properties of context-free languages.

अनेक पाठ्यपुस्तके संदर्भ-मुक्त भाषांच्या गुणधर्मांचे वर्णन करतात.


If prefix or postfix operators have higher precedence than all infix operators, the method presented here will work.

जर उपसर्ग किंवा पोस्टफिक्स ऑपरेटरची प्राथमिकता सर्व इनफिक्स ऑपरेटरपेक्षा जास्त असेल, तर येथे सादर केलेली पद्धत कार्य करेल.


A method for handling arbitrary precedences of infix, prefix and postfix operators is presented in [1].

इनफिक्स, उपसर्ग आणि पोस्टफिक्स ऑपरेटरच्या मनमानी प्राधान्यांचे व्यवस्थापन करण्यासाठीची एक पद्धत [1] मध्ये सादर केली आहे.


Draw a third, different syntax tree for aabbbcc using the same grammar.

एकाच व्याकरणचा वापर करून aabbbcc साठी तिसरे, वेगळे सिंटॅक्स ट्री काढा.


Write an unambiguous grammar for the language of balanced parentheses.

संतुलित कंस (parentheses) च्या भाषेसाठी एक अस्पष्ट व्याकरण लिहा.


An important concept in programming languages is the ability to name objects.

प्रोग्रामिंग भाषांमधील एक महत्त्वपूर्ण संकल्पना म्हणजे वस्तूंची नावे देण्याची क्षमता.


Each such named object will have a declaration, where the name is defined as a synonym for the object.

अशा प्रत्येक नावाच्या वस्तूची घोषणा असेल, जिथे नाव वस्तूसाठी समानार्थी शब्द म्हणून परिभाषित केले जाते.


A compiler will need to keep track of names and the objects these are bound to.

संकलक (compiler) नावे आणि त्या कशाशी जोडलेल्या आहेत, याचा मागोवा घेईल.


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.

या संकरित स्वरूपाला जस्ट-इन-टाइम कंपायलेशन म्हणतात आणि ते अनेकदा जावासाठी मध्यवर्ती कोड कार्यान्वित करण्यासाठी वापरले जाते.


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.

यापैकी पहिला दृष्टिकोन अनेकदा वापरला जातो जेव्हा मध्यवर्ती भाषेचा अर्थ लावला जातो.


When coarse-grained intermediate code is used, there is typically a fairly large number of different intermediate-code operations.

जेव्हा मोठे-कणस्वरुपाचे मध्यवर्ती कोड वापरले जाते, तेव्हा सामान्यतः विविध मध्यवर्ती-कोड ऑपरेशन्सची संख्या बरीच मोठी असते.


The opposite approach is to let each intermediate-code operation be as small as possible.

याउलट दृष्टिकोन म्हणजे प्रत्येक मध्यवर्ती-कोड ऑपरेशन शक्य तितके लहान होऊ देणे.


We then extend the translation function for conditions as follows:

त्यानंतर, आम्ही खालीलप्रमाणे अटींसाठी भाषांतर कार्य वाढवतो:


The rule for relational operators is now actually superfluous.

आता संबंधात्मक ऑपरेटरचा नियम खरोखरच अनावश्यक आहे.


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

आम्ही C प्रमाणेच क्रमवार तार्किक ऑपरेटरसाठी समान नावे वापरू.


Note that we allow an expression to be a condition as well as a condition to be an expression.

लक्षात घ्या की आम्ही अभिव्यक्तीला अट तसेच अट अभिव्यक्ती बनवण्याची परवानगी देतो.


हे व्याकरण अत्यंत संदिग्ध आहे.


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:

क्रमवार तार्किक आणि खालीलप्रमाणे अनुवादित केले आहे:


If the first operand is true, we jump directly to the label for true conditions.

जर पहिला ऑपरंड सत्य असेल, तर आम्ही थेट सत्य स्थितीसाठी लेबलवर उडी मारतो.


We have, in the above, used two different nonterminals for conditions and expressions.

वर नमूद केल्याप्रमाणे, आम्ही अटी आणि अभिव्यक्तींसाठी दोन भिन्न नॉनटर्मिनल्स वापरले आहेत.


We have so far, shown translation of simple conditional statements and loops.

आम्ही आतापर्यंत, साध्या सशर्त विधानांचे आणि लूपचे भाषांतर दर्शविले आहे.


Labels are stored in a symbol table that binds each to a corresponding label in the intermediate language.

लेबल एका चिन्ह सारणीमध्ये संग्रहित केले जातात जे प्रत्येकला मध्यवर्ती भाषेतील संबंधित लेबलशी बांधतात.


A jump to a label will generate a GOTO statement.

एका लेबलवर जंप केल्याने GOTO विधान तयार होईल.


Some languages allow exiting loops from the middle of the loop-body by a break or exit statement.

काही भाषा ब्रेक किंवा एक्झिट स्टेटमेंटद्वारे लूप-बॉडीच्या मधून लूपमधून बाहेर पडण्याची परवानगी देतात.


This attribute is changed whenever a new loop is entered.

नवीन लूपमध्ये प्रवेश करताच हे attribute बदलले जाते.


Case-statements evaluate an expression and selects one of several branches.

केस-विधाने एक अभिव्यक्तीचे मूल्यांकन करतात आणि अनेक शाखांपैकी एकाची निवड करतात.


We will briefly discuss how such can be implemented.

अशा गोष्टी कशा लागू केल्या जाऊ शकतात यावर आपण थोडक्यात चर्चा करू.


We will now look at how these can be translated.

आता आपण पाहूया की हे कसे भाषांतरित केले जाऊ शकते.


Floating-point values are, in a computer, typically stored in a different set of registers than integers.

फ्लोटिंग-पॉइंट मूल्ये, संगणकात, सामान्यत: पूर्णांकांपेक्षा वेगळ्या रजिस्टरमध्ये संग्रहित केली जातात.


The compiler ensures symbol tables contain necessary information for translation.

भाषांतरणासाठी आवश्यक माहिती प्रतीक सारणीमध्ये (symbol tables) संकलक (compiler) सुनिश्चित करतो.


When a variable is declared, the compiler stores relevant information.

एखादे व्हेरिएबल घोषित (declare) केले जाते, तेव्हा संकलक संबंधित माहिती संग्रहित करतो.


For integer variables, the intermediate-language variable holding the value is stored.

पूर्णांक व्हेरिएबल्ससाठी, मूल्य धारण करणारे मध्य-भाषेतील व्हेरिएबल संग्रहित केले जाते.


Array variables require base address and dimensions in the symbol table.

अॅरे व्हेरिएबल्ससाठी, प्रतीक सारणीमध्ये (symbol table) बेस ऍड्रेस (base address) आणि परिमाणे आवश्यक असतात.


Records store offsets for each field and the total size.

रेकॉर्ड्स प्रत्येक फील्डसाठी ऑफसेट (offset) आणि एकूण आकारमान (size) संग्रहित करतात.


Type descriptions are crucial for variable information.

प्रकाराचे (type) वर्णन व्हेरिएबल माहितीसाठी महत्त्वपूर्ण आहे.


Translation functions depend on symbol table information.

भाषांतरण कार्ये (translation functions) प्रतीक सारणीतील माहितीवर अवलंबून असतात.


It's wise to write translation functions for uses of names first.

नावांच्या उपयोगांसाठी (uses) भाषांतरण कार्ये (translation functions) प्रथम लिहिणे शहाणपणाचे आहे.


Chapter 10 will cover function declaration translations.

प्रकरण 10 मध्ये फंक्शन (function) घोषणांचे भाषांतरण दिले जाईल.


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

आम्ही पूर्णांक व्हेरिएबल्स (integer variables) आणि एक-आयामी पूर्णांक अॅरे (one-dimensional integer arrays) घोषित करू शकतो.


An integer variable should bind to a symbol table location.

एका पूर्णांक व्हेरिएबलने (integer variable) प्रतीक सारणीतील (symbol table) स्थानाशी बांधले पाहिजे.


Arrays are bound to variables containing their base address.

अॅरे त्यांच्या बेस ऍड्रेस (base address) असलेल्या व्हेरिएबल्सशी (variables) बांधलेले असतात.


Code must be generated for allocating array space.

अॅरेसाठी जागा वाटप करण्यासाठी कोड तयार करणे आवश्यक आहे.


आम्ही असे मानतो की अॅरे (array) 'heap' मध्ये वाटप केलेले आहेत.


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

मध्य-कोड व्हेरिएबल HP, (heap) मधील पहिल्या मोकळ्या घटकाकडे निर्देश करतो.


No heap overflow check is done when allocating arrays.

अॅरे वाटप करताना 'heap' ओव्हरफ्लो (overflow) तपासला जात नाही.


A comprehensive discussion about intermediate languages can be found in [35].

मध्यवर्ती भाषांवर (intermediate languages) एक विस्तृत चर्चा [35] मध्ये आढळू शकते.


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

कार्यात्मक (functional) आणि लॉजिक भाषा (logic languages) अनेकदा उच्च-स्तरीय मध्यवर्ती भाषा वापरतात.


JVM has single instructions for complex operations.

JVM मध्ये जटिल कार्यांसाठी (complex operations) एकल सूचना (single instructions) आहेत.


The high-level nature of JVM was chosen for several reasons.

JVM ची उच्च-स्तरीय (high-level) रचना अनेक कारणांसाठी निवडली गेली.


The compiler optimizes code to improve performance.

संकलक कार्यक्षमतेत सुधारणा करण्यासाठी कोडचे अनुकूलन करतो.


Register allocation is crucial for efficient program execution.

कार्यक्षम प्रोग्राम अंमलबजावणीसाठी रजिस्टर वाटप आवश्यक आहे.


Liveness analysis helps determine which variables are in use.

लाइव्हनेस विश्लेषण हे निर्धारित करते की कोणती व्हेरिएबल्स वापरली जात आहेत.


The interference graph shows which variables cannot share a register.

व्यत्यय आलेख दर्शवितो की कोणती व्हेरिएबल्स रजिस्टर सामायिक करू शकत नाहीत.


Graph coloring is used to assign registers to variables.

व्हेरिएबल्सना रजिस्टर्स नियुक्त करण्यासाठी ग्राफ कलरिंगचा वापर केला जातो.


Optimization techniques enhance the speed of the program.

ऑप्टिमायझेशन तंत्रे प्रोग्रामची गती वाढवतात.


The intermediate code is simpler than the source code.

मध्यवर्ती कोड स्त्रोत कोडपेक्षा सोपा आहे.


Common subexpression elimination reduces redundant calculations.

कॉमन सबएक्सप्रेशन एलिमिनेशन अनावश्यक गणना कमी करते.


Code hoisting moves computations outside of loops.

कोड होस्टिंग लूपच्या बाहेर गणना हलवते.


Constant propagation replaces variables with constant values.

स्थिर प्रसार व्हेरिएबल्सना स्थिर मूल्यांसह बदलते.


Index-check elimination removes unnecessary array bound checks.

अनुक्रमणिका-तपासणी निर्मूलन अनावश्यक अॅरे बाउंड तपासणी काढून टाकते.


The register allocator manages the limited number of registers.

रजिस्टर एलोकेटर मर्यादित संख्येने रजिस्टर्सचे व्यवस्थापन करतो.


Spilling involves storing variables in memory.

स्पिलिंगमध्ये व्हेरिएबल्स मेमरीमध्ये संग्रहित करणे समाविष्ट आहे.


The compiler generates machine code from intermediate code.

संकलक मध्यवर्ती कोडमधून मशीन कोड तयार करतो.


Understanding liveness is key to register allocation.

रजिस्टर वाटपासाठी लाईव्हनेस समजून घेणे महत्त्वाचे आहे.


The program's performance is directly affected by optimization.

प्रोग्रामची कार्यक्षमता ऑप्टिमायझेशनद्वारे थेट प्रभावित होते.


Inefficient code can slow down the execution of a program.

अकार्यक्षम कोड प्रोग्रामची अंमलबजावणी कमी करू शकतो.


The goal is to generate efficient and optimized machine code.

कार्यक्षम आणि अनुकूलित मशीन कोड तयार करणे हे ध्येय आहे.


The compiler analyzes the code to find optimization opportunities.

ऑप्टिमायझेशन संधी शोधण्यासाठी संकलक कोडचे विश्लेषण करतो.


Register allocation is a critical step in the compilation process.

संकलन प्रक्रियेत रजिस्टर वाटप एक महत्त्वपूर्ण पाऊल आहे.


The algorithm's efficiency depends on the number of nodes and edges in the graph.

अल्गोरिदमची कार्यक्षमता आलेखातील नोड्स (nodes) आणि कडांच्या (edges) संख्येवर अवलंबून असते.


If a node has fewer than N edges, it can be placed on the stack.

जर एखाद्या नोडमध्ये N पेक्षा कमी कडा असतील, तर ते स्टॅकवर ठेवले जाऊ शकते.


The program needs to allocate registers efficiently to avoid spilling.

स्पिलिंग टाळण्यासाठी प्रोग्रामला कार्यक्षमतेने रजिस्टर्स (registers) वाटप करणे आवश्यक आहे.


Spilling involves storing variables in memory when registers are unavailable.

रजिस्टर्स उपलब्ध नसल्यास, स्पिलिंगमध्ये व्हेरिएबल्स (variables) मेमरीमध्ये संग्रहित करणे समाविष्ट असते.


The select phase chooses a color for a node from the stack.

निवड टप्पा स्टॅकमधील नोडसाठी रंग निवडतो.


Heuristics can improve the coloring process in register allocation.

रजिस्टर वाटपात, युक्तिवाद रंगकाम (coloring) प्रक्रिया सुधारू शकतात.


The interference graph helps visualize register allocation conflicts.

व्यत्यय आलेख (interference graph) रजिस्टर वाटपातील (register allocation) संघर्ष दर्शविण्यासाठी मदत करतो.


The compiler uses register allocation to optimize code execution.

कोड अंमलबजावणी (code execution) ऑप्टिमाइझ (optimize) करण्यासाठी कंपाइलर रजिस्टर वाटपाचा वापर करतो.


Spilling variables can increase the execution time of a program.

व्हेरिएबल्स (variables) स्पिलिंग केल्याने प्रोग्रामची अंमलबजावणी वेळ वाढू शकते.


The algorithm attempts to color the graph with a limited number of colors.

अल्गोरिदम मर्यादित रंगांचा वापर करून आलेखाला रंग देण्याचा प्रयत्न करतो.


The activation record stores information about a function call.

ॲक्टिव्हेशन रेकॉर्ड (activation record) फंक्शन कॉल (function call) बद्दल माहिती संग्रहित करते.


The prologue sets up the function's environment.

प्रोलॉग (prologue) फंक्शनचे (function) वातावरण तयार करते.


The epilogue restores the caller's state.

एपिलॉग (epilogue) कॉलरची (caller) स्थिती पुनर्संचयित करते.


Function calls use a call-sequence to manage the stack.

फंक्शन कॉल (function call) स्टॅकचे व्यवस्थापन करण्यासाठी कॉल-सिक्वेन्स (call-sequence) वापरतात.


Parameters are passed to functions through the activation record.

ॲक्टिव्हेशन रेकॉर्डद्वारे (activation record) फंक्शन्सना (functions) पॅरामीटर्स (parameters) पाठवले जातात.


The return address is stored in the activation record.

रिटर्न ॲड्रेस (return address) ॲक्टिव्हेशन रेकॉर्डमध्ये (activation record) संग्रहित केला जातो.


Local variables are often stored on the stack.

स्थानिक व्हेरिएबल्स (variables) अनेकदा स्टॅकवर (stack) संग्रहित केले जातात.


The compiler optimizes the code for better performance.

अधिक चांगल्या कार्यक्षमतेसाठी कंपाइलर कोडचे अनुकूलन (optimize) करते.


Register allocation is a crucial part of compiler design.

रजिस्टर वाटप (register allocation) हे कंपाइलर डिझाइनचा (compiler design) एक महत्त्वपूर्ण भाग आहे.


Understanding register allocation is essential for efficient programming.

कार्यक्षम प्रोग्रामिंगसाठी (programming) रजिस्टर वाटप समजून घेणे आवश्यक आहे.


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

सुरुवातीला, व्हेरिएबल्स ठेवण्यासाठी वापरले जाऊ शकणारे सर्व रजिस्टर्स फ्रेममध्ये साठवले जातात.


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.

त्यानंतर, फ्रेम-पॉइंटर नवीन फ्रेमकडे निर्देश करण्यासाठी पुढे सरकवला जातो.


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

जेव्हा फंक्शन कॉल परत येतो, तेव्हा निकाल फ्रेममधून व्हेरिएबल x मध्ये वाचला जातो.


Keeping all the parameters in register-allocated variables until just before the call can require a lot of registers.

कॉलच्या अगदी आधीपर्यंत रजिस्टर-अलोकेटेड व्हेरिएबल्समध्ये सर्व पॅरामीटर्स ठेवल्यास बरीच रजिस्टर्सची आवश्यकता भासू शकते.


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

याचा एक पर्याय म्हणजे प्रत्येक पॅरामीटरचे मूल्यांकन होताच ते फ्रेममध्ये साठवणे.


However, this can go wrong if a later parameter-expression contains a function call.

परंतु, जर नंतरच्या पॅरामीटर-एक्सप्रेशनमध्ये फंक्शन कॉल असेल तर हे चुकीचे होऊ शकते.


In this simple call-sequence, we save on the stack all registers that can potentially hold variables.

या साध्या कॉल-सिक्वेन्समध्ये, आम्ही स्टॅकवर असे सर्व रजिस्टर्स सेव्ह करतो जे संभाव्य व्हेरिएबल्स ठेवू शकतात.


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

यामुळे आवश्यकतेपेक्षा जास्त रजिस्टर्स सेव्ह होऊ शकतात, कारण कॉलनंतर सर्व रजिस्टर्समध्ये आवश्यक मूल्ये नसतील.


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

ऍक्टिव्हेशन रेकॉर्ड लेआउटद्वारे वापरला जाणारा नियम असा आहे की, फंक्शनला कॉल करण्यापूर्वी, कॉलरने जतन करणे आवश्यक असलेले सर्व रजिस्टर्स सेव्ह करावे.


An alternative strategy is that the called function saves the contents of the registers that need to be preserved.

एक पर्यायी रणनीती म्हणजे कॉल केलेले फंक्शन, जतन करणे आवश्यक असलेल्या रजिस्टर्सची सामग्री सेव्ह करते.


Caller-saves need only save the registers that hold live variables.

कॉल-सेव्ह्सला फक्त ते रजिस्टर्स सेव्ह करणे आवश्यक आहे ज्यात लाईव्ह व्हेरिएबल्स आहेत.


We can not avoid these unnecessary saves, as each function is compiled independently.

आम्ही हे अनावश्यक सेव्ह टाळू शकत नाही, कारण प्रत्येक फंक्शन स्वतंत्रपणे संकलित केले जाते.


We can, however, try to reduce unnecessary saving of registers by using a mixed caller-saves and callee-saves strategy.

परंतु, आम्ही मिक्स कॉलर-सेव्ह्स आणि कॅली-सेव्ह्स धोरण वापरून रजिस्टर्सची अनावश्यक बचत कमी करण्याचा प्रयत्न करू शकतो.


Calling conventions typically specify which registers are caller-saves and which are callee-saves.

कॉलिंग कन्व्हेन्शन्स सामान्यतः निर्दिष्ट करतात की कोणते रजिस्टर्स कॉलर-सेव्ह्स आहेत आणि कोणते कॅली-सेव्ह्स आहेत.


In both call sequences shown, parameters are stored in the frame.

दोन्ही कॉल सिक्वेन्समध्ये, पॅरामीटर्स फ्रेममध्ये साठवले जातात.


It will save a good deal of memory traffic if we pass the parameters in registers instead of memory.

जर आपण मेमरीऐवजी रजिस्टर्समध्ये पॅरामीटर्स पास केले तर ते मेमरी ट्रॅफिक वाचवेल.


Since most functions have fairly short parameter lists, most parameters will normally be passed in registers.

बहुतेक फंक्शन्समध्ये लहान पॅरामीटर लिस्ट असल्यामुळे, बहुतेक पॅरामीटर्स सामान्यतः रजिस्टर्समध्ये पास केले जातील.


Note that the return address is also passed in a register.

लक्षात घ्या की रिटर्न ऍड्रेस देखील रजिस्टरमध्ये पास केला जातो.


The register allocator can tell which variables are live after the function call.

रजिस्टर एलोकेटर हे सांगू शकतो की फंक्शन कॉलनंतर कोणती व्हेरिएबल्स लाईव्ह आहेत.


आज हवामान सुखद आहे.


कृपया, मला मीठ द्याल का?


I am going to the market to buy some vegetables.

मी बाजारात भाजीपाला खरेदीसाठी जात आहे.


The company announced its quarterly profits.

कंपनीने तिच्या तिमाही नफ्याची घोषणा केली.


The algorithm efficiently sorts the data.

अल्गोरिदम डेटाची कार्यक्षमतेने क्रमवारी लावतो.


तो एक अतिशय प्रतिभावान संगीतकार आहे.


The government implemented new policies.

सरकारने नवीन धोरणे लागू केली.


The research paper explores various aspects of climate change.

संशोधन निबंध हवामान बदलाच्या विविध पैलूंचा शोध घेतो.


ती अस्खलितपणे इंग्रजी आणि मराठी बोलते.


The project requires careful planning and execution.

या प्रकल्पाला काळजीपूर्वक योजना आणि अंमलबजावणीची आवश्यकता आहे.


The software update includes several bug fixes.

सॉफ्टवेअर अपडेटमध्ये अनेक बग फिक्सचा समावेश आहे.


The artist's work is displayed in a local gallery.

कलाकाराचे काम एका स्थानिक गॅलरीत प्रदर्शित केले आहे.


The economic forecast predicts a slow recovery.

आर्थिक अंदाजानुसार हळू हळू सुधारणा होईल.


The complex equation was difficult to solve.

गुंतागुंतीचे समीकरण सोडवणे कठीण होते.


तो त्याच्या नाविन्यपूर्ण कल्पनांसाठी ओळखला जातो.


येत्या महिन्यात परिषद आयोजित केली जाईल.


The team is working on a new product launch.

संघ एका नवीन उत्पादन लॉन्चवर काम करत आहे.


The study examined the impact of social media.

अभ्यासात सोशल मीडियाचा प्रभाव तपासण्यात आला.


The data analysis revealed interesting patterns.

डेटा विश्लेषणातून मनोरंजक नमुने समोर आले.


The historical significance of the event is undeniable.

या घटनेचे ऐतिहासिक महत्त्व निर्विवाद आहे.


कार्यक्रम सुरू आहे.


Please provide the necessary information.

कृपया आवश्यक माहिती द्या.


आज हवामान खूप छान आहे.


तो बाजारात जात आहे.


मला काही किराणा सामान खरेदी करायचे आहे.


The company is facing financial difficulties.

कंपनीला आर्थिक अडचणींचा सामना करावा लागत आहे.


सरकारने नवीन धोरणे जाहीर केली.


The research team is conducting experiments.

संशोधन टीम प्रयोग करत आहे.


या प्रकल्पासाठी काळजीपूर्वक योजना आणि अंमलबजावणीची आवश्यकता आहे.


Despite the challenges, they persevered and succeeded.

आव्हाने असूनही, त्यांनी चिकाटीने काम केले आणि यश मिळवले.


The implications of the new technology are far-reaching.

नवीन तंत्रज्ञानाचे परिणाम दूरगामी आहेत.


The economic reforms have had a significant impact on the country.

आर्थिक सुधारणांचा देशावर महत्त्वपूर्ण परिणाम झाला आहे.


The complexities of international relations are often underestimated.

आंतरराष्ट्रीय संबंधांची गुंतागुंत अनेकदा कमी लेखली जाते.


The judge's decision was met with mixed reactions from the public.

न्यायाधीशांच्या निर्णयावर जनतेच्या संमिश्र प्रतिक्रिया उमटल्या.


The compiler optimizes the code for better performance.

संकलक चांगल्या कार्यक्षमतेसाठी कोडचे अनुकूलन करतो.


The function returns a pointer to the allocated memory.

हे फंक्शन आवंटित केलेल्या मेमरीचा पॉइंटर परत करते.


The data structure efficiently stores and retrieves information.

डेटा स्ट्रक्चर माहिती कार्यक्षमतेने संग्रहित आणि पुनर्प्राप्त करते.


The company's strategic plan involves market expansion.

कंपनीच्या धोरणात्मक योजनेत बाजाराचा विस्तार समाविष्ट आहे.


The algorithm's time complexity is logarithmic.

अल्गोरिदमची वेळ जटिलता लॉगरिदमिक आहे.


The function call eliminates the need to save and restore variables.

फंक्शन कॉलमुळे व्हेरिएबल्स सेव्ह (save) आणि रिस्टोअर (restore) करण्याची गरज नाहीशी होते.


If we can eliminate the epilogue, we can make g return directly to f's caller.

जर आपण एपिलॉग (epilogue) हटवू शकलो, तर g ला थेट f च्या कॉलरकडे परत पाठवू शकतो.


We can reuse the frame for f as the frame for g.

आपण f साठी g च्या फ्रेमप्रमाणेच फ्रेमचा पुनर्वापर करू शकतो.


The combined call sequence of the call to g and the epilogue of f becomes complex.

g ला कॉल (call) आणि f चा एपिलॉग (epilogue) यांचा एकत्रित कॉल क्रम (sequence) अधिक क्लिष्ट बनतो.


Since there are no live variables after the call to g, we can eliminate saving and restoring.

g ला कॉल केल्यानंतर कोणतीही सक्रिय (live) व्हेरिएबल्स नसल्यामुळे, आपण सेव्ह (save) आणि रिस्टोअर (restore) करणे टाळू शकतो.


We now see that all that happens after we return is an adjustment of FP.

आता आपण पाहतो की परतल्यानंतर FP मध्ये बदल होतो.


What we now want is to reuse f's frame for g's frame.

आता आपल्याला f ची फ्रेम g च्या फ्रेमसाठी पुनर्वापर करायची आहे.


We do this by not adding and subtracting f's frame size from FP.

आम्ही FP मधून f च्या फ्रेमचा आकार कमी न करता हे करतो.


आम्हाला एक दुर्दैवी समस्या देखील दिसते.


We can make g return directly to f's caller.

आपण g ला थेट f च्या कॉलरकडे परत पाठवू शकतो.


This makes the instructions after the jump to g unreachable.

g वर जंप (jump) केल्यानंतरचे निर्देश (instructions) आता पोहोचू शकत नाहीत.


With this tail-call optimization, we have eliminated the potential ill effects.

या टेल-कॉल ऑप्टिमायझेशनमुळे, आम्ही संभाव्य दुष्परिणाम दूर केले आहेत.


Functional programming languages rely on this space saving.

फंक्शनल प्रोग्रामिंग भाषा या स्पेस सेव्हिंगवर अवलंबून असतात.


By doing tail-call optimization, an arbitrarily long sequence of recursive tail calls can share the same stack frame.

टेल-कॉल ऑप्टिमायझेशन करून, पुनरावृत्ती टेल कॉल्सची (recursive tail calls) एक यादृच्छिक लांब साखळी (sequence) त्याच स्टॅक फ्रेमचा वापर करू शकते.


If a callee-saves strategy or a mixed caller-saves/callee-saves strategy is used, there will still be no saving and restoring around the call.

जर कॅली-सेव्ह (callee-saves) धोरण किंवा मिश्रित कॉलर-सेव्ह/कॅली-सेव्ह धोरण वापरले गेले, तरीही कॉलच्या आसपास सेव्ह (save) आणि रिस्टोअर (restore) होणार नाही.


Modern programs consist mainly of calls to predefined library functions.

आधुनिक प्रोग्राम्स (programs) प्रामुख्याने पूर्वनिर्धारित लायब्ररी फंक्शन्सना (library functions) कॉल करतात.


Calls to such library functions often fix some of the parameters to constants.

अशा लायब्ररी फंक्शन्सना (library functions) कॉल केल्यावर अनेकदा काही पॅरामीटर्स (parameters) स्थिर मूल्यांवर निश्चित केले जातात.


The generality of the library function is wasted.

लायब्ररी फंक्शनची (library function) सर्वसाधारणता वाया जाते.


Executing power5(x) is, obviously, a lot faster than executing power(x,5).

power5(x) कार्यान्वित करणे, power(x,5) कार्यान्वित करण्यापेक्षा खूप जलद आहे.


Similar specialisation techniques are used in C++ compilers for compiling templates.

C++ कंपाइलर्समध्ये (compilers) टेम्पलेट्स (templates) संकलित करण्यासाठी याच प्रकारच्या विशेषीकरण तंत्रांचा वापर केला जातो.


A common method is to write a QAD compiler using an existing language.

एक सामान्य पद्धत म्हणजे, सध्या अस्तित्वात असलेल्या भाषेचा वापर करून एक QAD कंपाइलर (compiler) लिहायचा.


This compiler needs not generate code for the desired target machine.

या कंपाइलरला (compiler) आवश्यक असलेल्या मशीनसाठी कोड तयार करण्याची गरज नाही.


The important thing is that it allows programs in the new language to be executed.

महत्त्वाची गोष्ट म्हणजे, हे नवीन भाषेतील प्रोग्राम्स (programs) चालवण्याची परवानगी देते.


Additionally, the “real” compiler is written in the new language and will be bootstrapped using the QAD compiler.

याव्यतिरिक्त, “खरा” कंपाइलर (compiler) नवीन भाषेत लिहिला जातो आणि QAD कंपाइलर वापरून बूटस्ट्रॅप केला जाईल.


As an example, let us assume we design a new language “M+”.

उदाहरणार्थ, असे समजू या की आपण “M+” नावाची नवीन भाषा तयार केली आहे.


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

सुरुवातीला, आम्ही M+ पासून ML मध्ये ML मध्ये एक कंपाइलर (compiler) लिहितो.


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 कंपाइलरचा वापर “खऱ्या” कंपाइलरला (compiler) संकलित करण्यासाठी केला जाऊ शकतो.


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

याचा परिणाम ML प्रोग्राममध्ये (program) होतो, जो आपल्याला संकलित करणे आवश्यक आहे.


The result of this is a compiler with the desired functionality, but it will probably run slowly.

याचा परिणाम म्हणजे, इच्छित कार्यक्षमतेसह एक कंपाइलर (compiler) तयार होतो, परंतु ते कदाचित हळू चालेल.


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

व्युत्पन्न (generated) कंपाइलरला (compiler) स्वतःला संकलित (compile) करू दिल्यास चांगले परिणाम मिळू शकतात.


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

यामुळे वरीलप्रमाणेच कार्यक्षमतेचा कंपाइलर (compiler) मिळतो.


The need for this extra step might be a bit clearer if we had let the “real” compiler generate x86 code instead.

जर आपण “खऱ्या” कंपाइलरला (compiler) x86 कोड तयार करण्यास सांगितले असते, तर या अतिरिक्त (extra) टप्प्याची गरज अधिक स्पष्ट झाली असती.


Using an interpreter Instead of writing a QAD compiler, we can write a QAD interpreter.

QAD कंपाइलर (compiler) लिहिण्याऐवजी, आपण QAD इंटरप्रिटर (interpreter) वापरू शकतो.


In our example, we could write an M+ interpreter in ML.

उदाहरणार्थ, आम्ही ML मध्ये M+ इंटरप्रिटर (interpreter) लिहू शकतो.


सुरुवातीला, आपल्याला हे संकलित (compile) करणे आवश्यक आहे.


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

त्यानंतर, आम्ही M+ कंपाइलर (compiler) थेट चालवण्यासाठी याचा वापर करू शकतो.


Since the “real” compiler has been used to do the compilation, nothing will be gained by using the generated compiler to compile itself.

“खऱ्या” कंपाइलरचा (compiler) वापर संकलन (compilation) करण्यासाठी केला गेला असल्याने, व्युत्पन्न (generated) कंपाइलरचा वापर स्वतःला संकलित करण्यासाठी केल्यास काहीही फायदा होणार नाही.


Though using an interpreter requires fewer steps, this should not really be a consideration.

इंटरप्रिटर (interpreter) वापरल्यास कमी पायऱ्या लागतात, तरीही याचा विचार करण्याची गरज नाही.


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

काही भाषांसाठी, QAD कंपाइलर (compiler) लिहिणे इंटरप्रिटरपेक्षा सोपे जाईल, तर इतर भाषांसाठी इंटरप्रिटर (interpreter) वापरणे सोपे आहे.


it an odd number) when a block is allocated can indicate that it is in use.

ब्लॉक वाटल्यास (विषम संख्या) हे दर्शवू शकते की ते वापरात आहे.


When freeing a block, we subtract one from the size, look that many bytes ahead to see if the size field stored in this word is even.

ब्लॉक मोकळा करताना, आपण आकारातून एक वजा करतो, आणि या शब्दात साठवलेले आकार क्षेत्र सम आहे की नाही हे पाहण्यासाठी अनेक बाइट्स पुढे पाहतो.


If so, we add the sizes and store the sum in the size field of the released block, remove its neighbour from the free list and add the joined block to it.

जर असे असेल तर, आम्ही आकार जोडतो आणि बेरीज सोडलेल्या ब्लॉकच्या आकार क्षेत्रात साठवतो, त्याचा शेजारी विनामूल्य सूचीतून काढतो आणि त्यात सामील केलेला ब्लॉक जोडतो.


Note that the order of freeing blocks can determine if blocks are joined: Two neighbours are only joined if the one at the highest address is freed before its lower- address neighbour.

लक्षात घ्या की ब्लॉक्स सोडण्याचा क्रम ब्लॉक जोडले जातील की नाही हे ठरवू शकतो: दोन शेजारी केवळ तेव्हाच जोडले जातात जेव्हा सर्वात मोठ्या पत्त्यावरील ब्लॉक त्याच्या कमी-पत्ता शेजाऱ्यापूर्वी सोडला जातो.


With this modification,free()is again constant time, but we merge fewer blocks than otherwise.

या सुधारणेसह, free() पुन्हा स्थिर वेळ घेते, परंतु आपण अन्यथा कमी ब्लॉक्स विलीन करतो.


For example, freeing the 12-byte block in figure 12.1(b) will not make it join with the second block in the free list, as this neighbours the freed block on the wrong side.

उदाहरणार्थ, आकृती 12.1(b) मधील 12-बाइट ब्लॉक मोकळा केल्याने ते विनामूल्य सूचीतील दुसर्‍या ब्लॉकशी जोडले जाणार नाही, कारण हे सोडलेल्या ब्लॉकच्या चुकीच्या बाजूला आहे.


To reduce the time used for searching for a sufficiently large block when calling malloc(), we can keep free blocks sorted by size.

malloc()कॉल करताना पुरेसा मोठा ब्लॉक शोधण्यासाठी लागणारा वेळ कमी करण्यासाठी, आम्ही विनामूल्य ब्लॉक्स आकाराने क्रमवारी लावू शकतो.


A common strategy for this is limiting block sizes (including size fields) to powers of two and keeping a free list for each size.

यासाठी एक सामान्य रणनीती म्हणजे ब्लॉकचे आकार (आकार क्षेत्रांसह) दोनच्या घातांकांपर्यंत मर्यादित करणे आणि प्रत्येक आकारासाठी एक विनामूल्य सूची ठेवणे.


Whenmalloc(n)is called, we find the nearest power of two that is at least n+wordsize, remove the first block in the free list for that size and return this.

जेव्हा malloc(n)कॉल केला जातो, तेव्हा आम्ही दोनची सर्वात जवळची शक्ती शोधतो जी किमान n+wordsize आहे, त्या आकारासाठी विनामूल्य सूचीमधील पहिला ब्लॉक काढतो आणि हे परत करतो.


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, put one of these into the previous free list and return the other.

जर संबंधित विनामूल्य सूची रिकामी असेल, तर आम्ही पुढील विनामूल्य सूचीमधील पहिला ब्लॉक घेतो आणि त्याचे दोन समान आकाराचे ब्लॉक्समध्ये विभाजन करतो, त्यापैकी एक मागील विनामूल्य सूचीमध्ये ठेवतो आणि दुसरा परत करतो.


If all free lists are empty, we allocate a new chunk from the operating system.

जर सर्व विनामूल्य सूची रिकाम्या असतील, तर आम्ही ऑपरेटिंग सिस्टममधून एक नवीन तुकडा वाटप करतो.


The worst-case time for a single call tomalloc()is, hence, logarithmic in the size of the total heap memory.

म्हणूनच, malloc() च्या एका कॉलसाठी सर्वात वाईट-स्थितीतील वेळ, एकूण ढिगाऱ्याच्या मेमरीच्या आकारात लॉगरिदमिक आहे.


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

विखंडन कमी करण्यासाठी आणि सोडलेल्या ब्लॉक्सच्या जलद जोडणीस अनुमती देण्यासाठी, काही मेमरी व्यवस्थापक ब्लॉक्सना ब्लॉक आकारानुसार संरेखित करण्यास प्रतिबंधित करतात.


So a 16-word block would have an address that is 16-word aligned, a 32-word block would be 32-word aligned, and so on.

म्हणून 16-शब्दांच्या ब्लॉकचा पत्ता 16-शब्द संरेखित असेल, 32-शब्दांचा ब्लॉक 32-शब्द संरेखित असेल आणि असेच.


When joining blocks, we can only do so if the resulting joined block is aligned to its size, so some blocks can only be joined with the next (higher-address) block of the same size and some only with the previous (lower-address) block of the same size.

ब्लॉक जोडताना, आम्ही ते तेव्हाच करू शकतो जेव्हा परिणामी जोडलेला ब्लॉक त्याच्या आकाराशी संरेखित असेल, त्यामुळे काही ब्लॉक्स केवळ त्याच आकाराच्या पुढील (उच्च-पत्ता) ब्लॉकशी आणि काही मागील (कमी-पत्ता) ब्लॉकशी जोडले जाऊ शकतात.


Two blocks that can be joined are called “buddies”, and each block has an unique buddy.

जे दोन ब्लॉक्स जोडले जाऊ शकतात त्यांना “बडी” म्हणतात आणि प्रत्येक ब्लॉकचा एक अद्वितीय बडी असतो.


Like in section 12.5.2, we use a bit in the size field to indicate that a block is in use.

विभाग 12.5.2 प्रमाणे, आम्ही आकार क्षेत्रात एक बिट वापरतो हे दर्शविण्यासाठी की ब्लॉक वापरात आहे.


When we free a block, we clear this bit and look at the size field of the buddy.

जेव्हा आम्ही ब्लॉक मोकळा करतो, तेव्हा आम्ही हा बिट साफ करतो आणि बडीच्या आकार क्षेत्राकडे पाहतो.


If the buddy is not in use (indicated by having an even size field) and is the same size as the freed block, we merge the two blocks simply by doubling the size in the size field of the buddy with the lowest address.

जर बडी वापरात नसेल (सम आकार क्षेत्राने दर्शविले जाते) आणि सोडलेल्या ब्लॉकइतकाच आकार असेल, तर आम्ही दोन ब्लॉक्सना फक्त सर्वात कमी पत्त्याच्या बडीच्या आकार क्षेत्रात आकार दुप्पट करून विलीन करतो.


We remove the already-free buddy from its free list and add the joined block to the next free list.

आम्ही आधीच-मुक्त बडीला त्याच्या विनामूल्य सूचीतून काढतो आणि सामील केलेला ब्लॉक पुढील विनामूल्य सूचीमध्ये जोडतो.


टिप्पण्या एकमेकांमध्ये गुंफलेल्या आहेत.


Common subexpression elimination is a compiler optimization technique.

कॉमन सबएक्सप्रेशन एलिमिनेशन ही एक कंपाइलर ऑप्टिमायझेशन तंत्र आहे.


संकलनामध्ये अनेक टप्पे असतात.


Compile-time errors are caught during the compilation process.

संकलन प्रक्रियेदरम्यान कंपाइल-टाइम त्रुटी आढळतात.


संकलन करणारे कंपाइलर एक जटिल काम आहे.


पार्सिंगमध्ये संघर्ष निर्माण होऊ शकतो.


व्याकरण सुसंगत असणे आवश्यक आहे.


ऑपरेंडमध्ये स्थिर (constant) वापरले जाऊ शकतात.


Constant propagation is an optimization technique.

स्थिर प्रसार (constant propagation) एक ऑप्टिमायझेशन तंत्र आहे.


संदर्भ-मुक्त व्याकरण मोठ्या प्रमाणावर वापरले जाते.


The dangling-else problem is a classic issue.

डँगलिंग-एल्स समस्या एक उत्कृष्ट समस्या आहे.


Data-flow analysis helps in optimization.

डेटा-प्रवाह विश्लेषण ऑप्टिमायझेशनमध्ये मदत करते.


Dead code elimination removes unnecessary code.

डेड कोड एलिमिनेशन अनावश्यक कोड काढून टाकते.


A dead variable is one whose value is never used.

डेड व्हेरिएबल म्हणजे ज्याचे मूल्य कधीही वापरले जात नाही.


घोषणा व्हेरिएबल्स परिभाषित करतात.


Global declarations are accessible everywhere.

ग्लोबल घोषणा सर्वत्र प्रवेशयोग्य आहेत.


Local declarations are within a specific scope.

स्थानिक घोषणा एका विशिष्ट कार्यक्षेत्रात असतात.


व्युत्पत्ती (derivation) पार्सिंगमधील एक महत्त्वाची संकल्पना आहे.


डीएफए (DFA) चा उपयोग लेक्सिकल विश्लेषणात केला जातो.


Converting an NFA to a DFA is a standard process.

एनएफए (NFA) ला डीएफए (DFA) मध्ये रूपांतरित करणे ही एक प्रमाणित प्रक्रिया आहे.


The program allocates memory if necessary, but it does not update the pointer-fields of the copy to point to to-space, so the node is grey.

आवश्यक असल्यास, प्रोग्राम मेमरीचे वाटप करतो, परंतु कॉपीच्या पॉइंटर-फील्ड्सना टू-स्पेसकडे निर्देशित करण्यासाठी अपडेट करत नाही, ज्यामुळे नोड राखाडी राहतो.


The necessary updating is done by the function update, that takes a pointer to a grey node (located in to-space) and forwards all its pointer-fields, making the node black.

आवश्यक अपडेट ‘अपडेट’ फंक्शनद्वारे केले जाते, जे एका राखाडी नोडकडे (टू-स्पेसमध्ये स्थित) पॉइंटर घेते आणि त्याचे सर्व पॉइंटर-फील्ड्स फॉरवर्ड करते, ज्यामुळे नोड काळा होतो.


The entire garbage collection process can be written in pseudo code.

संपूर्ण गार्बेज कलेक्शन प्रक्रिया स्यूडो कोडमध्ये लिहिता येते.


By the invariant, nodes between the start of to-space and scan are black and nodes between scan and next are grey.

इनव्हेरिएंटनुसार, टू-स्पेसच्या सुरुवातीपासून स्कॅनपर्यंतचे नोड्स ब्लॅक (काळे) आहेत आणि स्कॅन आणि नेक्स्टमधील नोड्स राखाडी आहेत.


If this garbage collection does not free up sufficient space to allocate the requested block, the memory manager will ask the operating system for a chunk of memory.

जर या गार्बेज कलेक्शनमुळे विनंती केलेला ब्लॉक वाटप करण्यासाठी पुरेशी जागा मोकळी झाली नाही, तर मेमरी मॅनेजर ऑपरेटिंग सिस्टमला मेमरीचा एक तुकडा (chunk) मागेल.


Two-space collection changes the value of pointers while preserving only that a given pointer field or variable points to the new copy of the node that it pointed to before collection.

टू-स्पेस कलेक्शन पॉइंटर्सचे मूल्य बदलते, फक्त हे संरक्षित करते की दिलेले पॉइंटर फील्ड किंवा व्हेरिएबल नोडच्या नवीन कॉपीकडे निर्देशित करते, ज्याकडे ते कलेक्शनपूर्वी निर्देशित करत होते.


So the language must allow pointer values to change in this way.

म्हणून, भाषेने पॉइंटर मूल्यांना अशा प्रकारे बदलण्याची परवानगी दिली पाहिजे.


This means that it is not possible to cast a pointer to an integer and cast the integer back to a pointer, since the new pointer might not be valid.

याचा अर्थ असा आहे की पॉइंटरला इंटिजरमध्ये कास्ट करणे आणि इंटिजरला परत पॉइंटरमध्ये कास्ट करणे शक्य नाही, कारण नवीन पॉइंटर वैध नसू शकतो.


Also, since the order of blocks is changed by garbage collection, pointers to different heap blocks can not be compared to see which has a lower address, as this can change without warning.

तसेच, गार्बेज कलेक्शनमुळे ब्लॉक्सचा क्रम बदलला जातो, त्यामुळे वेगवेगळ्या हिप ब्लॉक्सच्या पॉइंटर्सची तुलना करणे शक्य नाही, हे पाहण्यासाठी की कोणाचे कमी ऍड्रेस आहे, कारण हे चेतावणीशिवाय बदलू शकते.


So you can only compare pointers for equality.

म्हणून, तुम्ही फक्त समानतेसाठी पॉइंटर्सची तुलना करू शकता.


Since collection time is proportional only to the live (reachable) nodes, it is opportune to do collection when there is little live data.

कलेक्शनचा वेळ फक्त लाइव्ह (पोहचण्यायोग्य) नोड्सच्या प्रमाणात असतो, त्यामुळे कमी लाइव्ह डेटा असताना कलेक्शन करणे योग्य आहे.


Often, a programmer can identify place in the program where this is true and force a collection to happen there.

अनेकदा, एक प्रोग्रामर प्रोग्राममधील अशी जागा ओळखू शकतो जिथे हे खरे आहे आणि तेथे कलेक्शन घडवून आणू शकतो.


Not all memory managers offer facilities to force collections, though, and when they do, it is rarely portable between different implementations.

जरी सर्व मेमरी मॅनेजर कलेक्शनला सक्ती करण्यासाठी सुविधा देत नाहीत, तरीही, जेव्हा ते करतात, तेव्हा ते वेगवेगळ्या अंमलबजावणीमध्ये क्वचितच पोर्टेबल असतात.


Tracing collectors can be refined in various ways.

ट्रेसिंग कलेक्टर्स विविध मार्गांनी परिष्कृत केले जाऊ शकतात.


We will look at generational collectors and concurrent collectors.

आम्ही जनरेशनल कलेक्टर्स आणि समवर्ती कलेक्टर्सकडे पाहू.


A problem with copying collectors is that long-lived blocks are repeatedly copied back and forth between the two spaces.

कॉपीइंग कलेक्टर्सची समस्या अशी आहे की दीर्घकाळ टिकणारे ब्लॉक्स दोन स्पेसेसमध्ये वारंवार कॉपी केले जातात.


To reduce this problem, we can use two observations.

ही समस्या कमी करण्यासाठी, आपण दोन निरीक्षणे वापरू शकतो.


Larger blocks tend to live longer than smaller blocks, and blocks that have already lived long are likely to continue living for a long time.

मोठे ब्लॉक्स लहान ब्लॉक्सपेक्षा जास्त काळ टिकतात, आणि जे ब्लॉक्स आधीच जास्त काळ टिकले आहेत, ते जास्त काळ टिकण्याची शक्यता असते.


So we aim to not copy such blocks as often as small, young blocks.

म्हणून, आम्ही अशा ब्लॉक्सची लहान, तरुण ब्लॉक्सइतकी वारंवार कॉपी न करण्याचा प्रयत्न करतो.


We do this by not having only two spaces, but n spaces, where each space is larger than the previous.

आम्ही हे फक्त दोन स्पेसेस न ठेवता, n स्पेसेस ठेवून करतो, जिथे प्रत्येक स्पेस मागीलपेक्षा मोठी असते.