{"id":2823,"date":"2025-06-07T15:02:55","date_gmt":"2025-06-07T15:02:55","guid":{"rendered":"https:\/\/diznr.com\/?p=2823"},"modified":"2025-06-07T15:02:55","modified_gmt":"2025-06-07T15:02:55","slug":"six-phases-of-compiler-lexical-syntax-semantic-intermediate-code-generation-optimization-code","status":"publish","type":"post","link":"https:\/\/www.reilsolar.com\/pdf\/six-phases-of-compiler-lexical-syntax-semantic-intermediate-code-generation-optimization-code\/","title":{"rendered":"Six Phases of compiler &#8211; Lexical \/Syntax \/Semantic \/Intermediate code generation\/code optimization"},"content":{"rendered":"<p>Six Phases of compiler &#8211; Lexical \/Syntax \/Semantic \/Intermediate code generation\/code optimization<\/p>\n<p>[fvplayer id=&#8221;131&#8243;]<\/p>\n<h3 data-start=\"0\" data-end=\"33\"><strong data-start=\"2\" data-end=\"31\">\u00a0Six Phases of Compiler<\/strong><\/h3>\n<p class=\"\" data-start=\"35\" data-end=\"133\">A <strong data-start=\"37\" data-end=\"49\">compiler<\/strong> translates <strong data-start=\"61\" data-end=\"80\">high-level code<\/strong> into <strong data-start=\"86\" data-end=\"102\">machine code<\/strong> through <strong data-start=\"111\" data-end=\"130\">six main phases<\/strong>:<\/p>\n<p class=\"\" data-start=\"135\" data-end=\"308\"><strong data-start=\"139\" data-end=\"159\">Lexical Analysis<\/strong><br data-start=\"159\" data-end=\"162\" \/><strong data-start=\"166\" data-end=\"185\">Syntax Analysis<\/strong><br data-start=\"185\" data-end=\"188\" \/><strong data-start=\"192\" data-end=\"213\">Semantic Analysis<\/strong><br data-start=\"213\" data-end=\"216\" \/><strong data-start=\"220\" data-end=\"252\">Intermediate Code Generation<\/strong><br data-start=\"252\" data-end=\"255\" \/><strong data-start=\"259\" data-end=\"280\">Code Optimization<\/strong><br data-start=\"280\" data-end=\"283\" \/><strong data-start=\"287\" data-end=\"306\">Code Generation<\/strong><\/p>\n<h3 data-start=\"315\" data-end=\"353\"><strong data-start=\"318\" data-end=\"353\">\u00a0Lexical Analysis (Scanning)<\/strong><\/h3>\n<p class=\"\" data-start=\"354\" data-end=\"675\"><strong data-start=\"357\" data-end=\"366\">Input<\/strong>: Source Code (High-level language)<br data-start=\"401\" data-end=\"404\" \/><strong data-start=\"407\" data-end=\"417\">Output<\/strong>: Tokens<br data-start=\"425\" data-end=\"428\" \/><strong data-start=\"431\" data-end=\"442\">Purpose<\/strong>: Converts the <strong data-start=\"457\" data-end=\"484\">source code into tokens<\/strong> (smallest units of the program).<br data-start=\"517\" data-end=\"520\" \/><strong data-start=\"523\" data-end=\"535\">Performs<\/strong>:<br data-start=\"536\" data-end=\"539\" \/>\u00a0Removes <strong data-start=\"549\" data-end=\"574\">whitespaces, comments<\/strong><br data-start=\"574\" data-end=\"577\" \/>\u00a0Identifies <strong data-start=\"590\" data-end=\"635\">keywords, identifiers, operators, symbols<\/strong><br data-start=\"635\" data-end=\"638\" \/>\u00a0Stores tokens in <strong data-start=\"657\" data-end=\"673\">Symbol Table<\/strong><\/p>\n<p class=\"\" data-start=\"677\" data-end=\"740\"><strong data-start=\"679\" data-end=\"691\">Example:<\/strong><br data-start=\"691\" data-end=\"694\" \/><strong data-start=\"697\" data-end=\"707\">Input:<\/strong> <code data-start=\"708\" data-end=\"721\">int x = 10;<\/code><br data-start=\"721\" data-end=\"724\" \/><strong data-start=\"727\" data-end=\"738\">Output:<\/strong><\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre\"><span class=\"hljs-built_in\">TOKEN<\/span>( int ), <span class=\"hljs-built_in\">TOKEN<\/span>( x ), <span class=\"hljs-built_in\">TOKEN<\/span>( = ), <span class=\"hljs-built_in\">TOKEN<\/span>( <span class=\"hljs-number\">10<\/span> ), <span class=\"hljs-built_in\">TOKEN<\/span>( ; )<br \/>\n<\/code><\/div>\n<\/div>\n<h3 data-start=\"817\" data-end=\"853\"><strong data-start=\"820\" data-end=\"853\">\u00a0Syntax Analysis (Parsing)<\/strong><\/h3>\n<p class=\"\" data-start=\"854\" data-end=\"1128\"><strong data-start=\"857\" data-end=\"866\">Input<\/strong>: Tokens from Lexical Analysis<br data-start=\"896\" data-end=\"899\" \/><strong data-start=\"902\" data-end=\"912\">Output<\/strong>: Parse Tree (Syntax Tree)<br data-start=\"938\" data-end=\"941\" \/><strong data-start=\"944\" data-end=\"955\">Purpose<\/strong>: Checks if the code follows the <strong data-start=\"988\" data-end=\"1005\">grammar rules<\/strong> (using parsing techniques like LL(1), LR(1)).<br data-start=\"1051\" data-end=\"1054\" \/><strong data-start=\"1057\" data-end=\"1069\">Performs<\/strong>:<br data-start=\"1070\" data-end=\"1073\" \/>\u00a0Builds <strong data-start=\"1082\" data-end=\"1096\">Parse Tree<\/strong><br data-start=\"1096\" data-end=\"1099\" \/>\u00a0Detects <strong data-start=\"1109\" data-end=\"1126\">Syntax Errors<\/strong><\/p>\n<p class=\"\" data-start=\"1130\" data-end=\"1206\"><strong data-start=\"1132\" data-end=\"1144\">Example:<\/strong><br data-start=\"1144\" data-end=\"1147\" \/><strong data-start=\"1150\" data-end=\"1160\">Input:<\/strong> <code data-start=\"1161\" data-end=\"1174\">int x = 10;<\/code><br data-start=\"1174\" data-end=\"1177\" \/><strong data-start=\"1180\" data-end=\"1191\">Output:<\/strong> <strong data-start=\"1192\" data-end=\"1206\">Parse Tree<\/strong><\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre\">    Assignment<br \/>\n\/    |    \\<br \/>\n<span class=\"hljs-type\">int<\/span>    x     <span class=\"hljs-number\">10<\/span><br \/>\n<\/code><\/div>\n<\/div>\n<p class=\"\" data-start=\"1262\" data-end=\"1333\">\u00a0If we write <code data-start=\"1276\" data-end=\"1289\">int = x 10;<\/code>, the compiler will show a <strong data-start=\"1316\" data-end=\"1332\">syntax error<\/strong>.<\/p>\n<h3 data-start=\"1340\" data-end=\"1370\"><strong data-start=\"1343\" data-end=\"1368\">\u00a0Semantic Analysis<\/strong><\/h3>\n<p class=\"\" data-start=\"1371\" data-end=\"1653\"><strong data-start=\"1374\" data-end=\"1383\">Input<\/strong>: Parse Tree<br data-start=\"1395\" data-end=\"1398\" \/><strong data-start=\"1401\" data-end=\"1411\">Output<\/strong>: Annotated Parse Tree<br data-start=\"1433\" data-end=\"1436\" \/><strong data-start=\"1439\" data-end=\"1450\">Purpose<\/strong>: Checks <strong data-start=\"1459\" data-end=\"1470\">meaning<\/strong> and <strong data-start=\"1475\" data-end=\"1490\">correctness<\/strong> of the program.<br data-start=\"1506\" data-end=\"1509\" \/><strong data-start=\"1512\" data-end=\"1524\">Performs<\/strong>:<br data-start=\"1525\" data-end=\"1528\" \/>\u00a0Type Checking (<strong data-start=\"1545\" data-end=\"1576\">int x = &#8220;hello&#8221;; is invalid<\/strong>)<br data-start=\"1577\" data-end=\"1580\" \/>\u00a0Variable <strong data-start=\"1591\" data-end=\"1615\">declaration checking<\/strong><br data-start=\"1615\" data-end=\"1618\" \/>\u00a0Function <strong data-start=\"1629\" data-end=\"1651\">parameter matching<\/strong><\/p>\n<p class=\"\" data-start=\"1655\" data-end=\"1686\"><strong data-start=\"1657\" data-end=\"1669\">Example:<\/strong><br data-start=\"1669\" data-end=\"1672\" \/><strong data-start=\"1675\" data-end=\"1684\">Code:<\/strong><\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre language-c\"><span class=\"hljs-type\">int<\/span> x = <span class=\"hljs-string\">\"hello\"<\/span>;  <span class=\"hljs-comment\">\/\/ Error: String assigned to integer<\/span><br \/>\n<\/code><\/div>\n<\/div>\n<p class=\"\" data-start=\"1751\" data-end=\"1784\"><strong data-start=\"1754\" data-end=\"1764\">Error:<\/strong> <strong data-start=\"1765\" data-end=\"1782\">Type Mismatch<\/strong><\/p>\n<h3 data-start=\"1791\" data-end=\"1832\"><strong data-start=\"1794\" data-end=\"1830\">\u00a0Intermediate Code Generation<\/strong><\/h3>\n<p class=\"\" data-start=\"1833\" data-end=\"2126\"><strong data-start=\"1836\" data-end=\"1845\">Input<\/strong>: Annotated Parse Tree<br data-start=\"1867\" data-end=\"1870\" \/><strong data-start=\"1873\" data-end=\"1883\">Output<\/strong>: Intermediate Code (3-address code, AST)<br data-start=\"1924\" data-end=\"1927\" \/><strong data-start=\"1930\" data-end=\"1941\">Purpose<\/strong>: Generates a <strong data-start=\"1955\" data-end=\"1993\">machine-independent representation<\/strong> of the program.<br data-start=\"2009\" data-end=\"2012\" \/><strong data-start=\"2015\" data-end=\"2027\">Performs<\/strong>:<br data-start=\"2028\" data-end=\"2031\" \/>\u00a0Converts code to <strong data-start=\"2050\" data-end=\"2086\">Intermediate Representation (IR)<\/strong><br data-start=\"2086\" data-end=\"2089\" \/>\u00a0Uses <strong data-start=\"2096\" data-end=\"2124\">Three-Address Code (TAC)<\/strong><\/p>\n<p class=\"\" data-start=\"2128\" data-end=\"2159\"><strong data-start=\"2130\" data-end=\"2142\">Example:<\/strong><br data-start=\"2142\" data-end=\"2145\" \/><strong data-start=\"2148\" data-end=\"2157\">Code:<\/strong><\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre language-c\">a = b + c * d;<br \/>\n<\/code><\/div>\n<\/div>\n<p class=\"\" data-start=\"2184\" data-end=\"2204\"><strong data-start=\"2187\" data-end=\"2202\">TAC Output:<\/strong><\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre\"><span class=\"hljs-attr\">t1<\/span> = c * d<br \/>\n<span class=\"hljs-attr\">t2<\/span> = b + t1<br \/>\n<span class=\"hljs-attr\">a<\/span> = t2<br \/>\n<\/code><\/div>\n<\/div>\n<h3 data-start=\"2249\" data-end=\"2279\"><strong data-start=\"2252\" data-end=\"2277\">\u00a0Code Optimization<\/strong><\/h3>\n<p class=\"\" data-start=\"2280\" data-end=\"2618\"><strong data-start=\"2283\" data-end=\"2292\">Input<\/strong>: Intermediate Code<br data-start=\"2311\" data-end=\"2314\" \/><strong data-start=\"2317\" data-end=\"2327\">Output<\/strong>: Optimized Intermediate Code<br data-start=\"2356\" data-end=\"2359\" \/><strong data-start=\"2362\" data-end=\"2373\">Purpose<\/strong>: Makes the code <strong data-start=\"2390\" data-end=\"2421\">faster and memory-efficient<\/strong>.<br data-start=\"2422\" data-end=\"2425\" \/><strong data-start=\"2428\" data-end=\"2440\">Performs<\/strong>:<br data-start=\"2441\" data-end=\"2444\" \/><strong data-start=\"2446\" data-end=\"2466\">Constant Folding<\/strong> \u2192 <code data-start=\"2469\" data-end=\"2476\">5 + 3<\/code> \u2192 <code data-start=\"2479\" data-end=\"2482\">8<\/code><br data-start=\"2482\" data-end=\"2485\" \/><strong data-start=\"2487\" data-end=\"2512\">Dead Code Elimination<\/strong> \u2192 Removes <strong data-start=\"2523\" data-end=\"2543\">unreachable code<\/strong><br data-start=\"2543\" data-end=\"2546\" \/><strong data-start=\"2548\" data-end=\"2569\">Loop Optimization<\/strong> \u2192 Moves <strong data-start=\"2578\" data-end=\"2616\">invariant expressions out of loops<\/strong><\/p>\n<p class=\"\" data-start=\"2620\" data-end=\"2666\"><strong data-start=\"2622\" data-end=\"2634\">Example:<\/strong><br data-start=\"2634\" data-end=\"2637\" \/><strong data-start=\"2640\" data-end=\"2664\">Before Optimization:<\/strong><\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre language-c\"><span class=\"hljs-type\">int<\/span> x = <span class=\"hljs-number\">2<\/span> * <span class=\"hljs-number\">10<\/span>;  <span class=\"hljs-comment\">\/\/ Multiplication every time<\/span><br \/>\n<\/code><\/div>\n<\/div>\n<p class=\"\" data-start=\"2722\" data-end=\"2750\"><strong data-start=\"2725\" data-end=\"2748\">After Optimization:<\/strong><\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre language-c\"><span class=\"hljs-type\">int<\/span> x = <span class=\"hljs-number\">20<\/span>;  <span class=\"hljs-comment\">\/\/ Precomputed at compile-time<\/span><br \/>\n<\/code><\/div>\n<\/div>\n<h3 data-start=\"2810\" data-end=\"2838\"><strong data-start=\"2813\" data-end=\"2836\">\u00a0Code Generation<\/strong><\/h3>\n<p class=\"\" data-start=\"2839\" data-end=\"3127\"><strong data-start=\"2842\" data-end=\"2851\">Input<\/strong>: Optimized Intermediate Code<br data-start=\"2880\" data-end=\"2883\" \/><strong data-start=\"2886\" data-end=\"2896\">Output<\/strong>: Target Machine Code (Assembly\/Binary)<br data-start=\"2935\" data-end=\"2938\" \/><strong data-start=\"2941\" data-end=\"2952\">Purpose<\/strong>: Converts IR to <strong data-start=\"2969\" data-end=\"2992\">actual machine code<\/strong> for execution.<br data-start=\"3007\" data-end=\"3010\" \/><strong data-start=\"3013\" data-end=\"3025\">Performs<\/strong>:<br data-start=\"3026\" data-end=\"3029\" \/><strong data-start=\"3031\" data-end=\"3054\">Register Allocation<\/strong><br data-start=\"3054\" data-end=\"3057\" \/><strong data-start=\"3059\" data-end=\"3084\">Instruction Selection<\/strong><br data-start=\"3084\" data-end=\"3087\" \/><strong data-start=\"3089\" data-end=\"3125\">Machine-specific code generation<\/strong><\/p>\n<p class=\"\" data-start=\"3129\" data-end=\"3158\"><strong data-start=\"3131\" data-end=\"3143\">Example:<\/strong><br data-start=\"3143\" data-end=\"3146\" \/><strong data-start=\"3149\" data-end=\"3156\">IR:<\/strong><\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre\"><span class=\"hljs-attr\">t1<\/span> = c * d<br \/>\n<span class=\"hljs-attr\">t2<\/span> = b + t1<br \/>\n<span class=\"hljs-attr\">a<\/span> = t2<br \/>\n<\/code><\/div>\n<\/div>\n<p class=\"\" data-start=\"3197\" data-end=\"3226\"><strong data-start=\"3200\" data-end=\"3224\">Assembly Code (x86):<\/strong><\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre language-assembly\">MOV R1, c<br \/>\nMUL R1, d<br \/>\nADD R1, b<br \/>\nMOV a, R1<br \/>\n<\/code><\/div>\n<\/div>\n<h3 data-start=\"3289\" data-end=\"3324\"><strong data-start=\"3291\" data-end=\"3324\">\u00a0Summary of Compiler Phases<\/strong><\/h3>\n<div class=\"overflow-x-auto contain-inline-size\">\n<table data-start=\"3325\" data-end=\"4031\">\n<thead data-start=\"3325\" data-end=\"3409\">\n<tr data-start=\"3325\" data-end=\"3409\">\n<th data-start=\"3325\" data-end=\"3350\"><strong data-start=\"3327\" data-end=\"3336\">Phase<\/strong><\/th>\n<th data-start=\"3350\" data-end=\"3373\"><strong data-start=\"3352\" data-end=\"3361\">Input<\/strong><\/th>\n<th data-start=\"3373\" data-end=\"3394\"><strong data-start=\"3375\" data-end=\"3385\">Output<\/strong><\/th>\n<th data-start=\"3394\" data-end=\"3409\"><strong data-start=\"3396\" data-end=\"3407\">Purpose<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"3494\" data-end=\"4031\">\n<tr data-start=\"3494\" data-end=\"3577\">\n<td><strong data-start=\"3496\" data-end=\"3516\">Lexical Analysis<\/strong><\/td>\n<td>Source Code<\/td>\n<td>Tokens<\/td>\n<td>Tokenization<\/td>\n<\/tr>\n<tr data-start=\"3578\" data-end=\"3665\">\n<td><strong data-start=\"3580\" data-end=\"3599\">Syntax Analysis<\/strong><\/td>\n<td>Tokens<\/td>\n<td>Parse Tree<\/td>\n<td>Grammar Checking<\/td>\n<\/tr>\n<tr data-start=\"3666\" data-end=\"3753\">\n<td><strong data-start=\"3668\" data-end=\"3689\">Semantic Analysis<\/strong><\/td>\n<td>Parse Tree<\/td>\n<td>Annotated Parse Tree<\/td>\n<td>Type Checking<\/td>\n<\/tr>\n<tr data-start=\"3754\" data-end=\"3856\">\n<td><strong data-start=\"3756\" data-end=\"3788\">Intermediate Code Generation<\/strong><\/td>\n<td>Annotated Parse Tree<\/td>\n<td>Intermediate Code<\/td>\n<td>Machine Independence<\/td>\n<\/tr>\n<tr data-start=\"3857\" data-end=\"3944\">\n<td><strong data-start=\"3859\" data-end=\"3880\">Code Optimization<\/strong><\/td>\n<td>Intermediate Code<\/td>\n<td>Optimized Code<\/td>\n<td>Faster Execution<\/td>\n<\/tr>\n<tr data-start=\"3945\" data-end=\"4031\">\n<td><strong data-start=\"3947\" data-end=\"3966\">Code Generation<\/strong><\/td>\n<td>Optimized Code<\/td>\n<td>Machine Code<\/td>\n<td>Final Execution<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3 class=\"\" data-start=\"4038\" data-end=\"4060\"><strong data-start=\"4042\" data-end=\"4060\">\u00a0Final Notes<\/strong><\/h3>\n<p class=\"\" data-start=\"4061\" data-end=\"4256\"><strong data-start=\"4063\" data-end=\"4105\">Lexical, Syntax, and Semantic Analysis<\/strong> \u2192 <strong data-start=\"4108\" data-end=\"4126\">Detect errors.<\/strong><br data-start=\"4126\" data-end=\"4129\" \/><strong data-start=\"4131\" data-end=\"4167\">Intermediate Code &amp; Optimization<\/strong> \u2192 <strong data-start=\"4170\" data-end=\"4193\">Improve efficiency.<\/strong><br data-start=\"4193\" data-end=\"4196\" \/><strong data-start=\"4198\" data-end=\"4217\">Code Generation<\/strong> \u2192 <strong data-start=\"4220\" data-end=\"4254\">Final machine-executable code.<\/strong><\/p>\n<p class=\"\" data-start=\"4258\" data-end=\"4324\">\u00a0<strong data-start=\"4261\" data-end=\"4324\" data-is-last-node=\"\">Would you like a detailed example on any specific phase?<\/strong><\/p>\n<h3 data-start=\"4258\" data-end=\"4324\"><a href=\"https:\/\/www.vssut.ac.in\/lecture_notes\/lecture1422914957.pdf\" target=\"_blank\" rel=\"noopener\">Six Phases of compiler &#8211; Lexical \/Syntax \/Semantic \/Intermediate code generation\/code optimization<\/a><\/h3>\n<div>\n<div class=\"yuRUbf\">\n<div class=\"b8lM7\">\n<h3 class=\"LC20lb MBeuO DKV0Md\">Module 1 Compiler Phases of a Compiler ( Structure of &#8230;<\/h3>\n<h3 class=\"LC20lb MBeuO DKV0Md\"><a href=\"https:\/\/gn.dronacharya.info\/itDept\/Downloads\/Questionpapers\/6th_sem\/CompilerDesign\/Phases_Compiler.pdf\" target=\"_blank\" rel=\"noopener\">Phases of Compiler<\/a><\/h3>\n<div class=\"notranslate HGLrXd ojE3Fb\">\n<div class=\"q0vns\">\n<p data-start=\"0\" data-end=\"146\">Here\u2019s a comprehensive overview of the <strong data-start=\"39\" data-end=\"67\">six phases of a compiler<\/strong>, crucial for understanding how source code is translated into executable code:<\/p>\n<hr data-start=\"148\" data-end=\"151\" \/>\n<h2 data-start=\"153\" data-end=\"188\">\ud83d\udee0\ufe0f <strong data-start=\"160\" data-end=\"188\">Six Phases of a Compiler<\/strong><\/h2>\n<p data-start=\"190\" data-end=\"296\">Each phase takes the output of the previous phase and refines it toward machine code. The main phases are:<\/p>\n<hr data-start=\"298\" data-end=\"301\" \/>\n<h3 data-start=\"303\" data-end=\"343\">1. \ud83d\udd24 <strong data-start=\"313\" data-end=\"343\">Lexical Analysis (Scanner)<\/strong><\/h3>\n<ul data-start=\"345\" data-end=\"593\">\n<li data-start=\"345\" data-end=\"440\">\n<p data-start=\"347\" data-end=\"440\"><strong data-start=\"347\" data-end=\"358\">Purpose<\/strong>: Converts the sequence of characters (source code) into a sequence of <strong data-start=\"429\" data-end=\"439\">tokens<\/strong>.<\/p>\n<\/li>\n<li data-start=\"441\" data-end=\"495\">\n<p data-start=\"443\" data-end=\"495\"><strong data-start=\"443\" data-end=\"453\">Output<\/strong>: Tokens (identifiers, keywords, symbols).<\/p>\n<\/li>\n<li data-start=\"496\" data-end=\"516\">\n<p data-start=\"498\" data-end=\"516\"><strong data-start=\"498\" data-end=\"511\">Tool Used<\/strong>: Lex<\/p>\n<\/li>\n<li data-start=\"517\" data-end=\"593\">\n<p data-start=\"519\" data-end=\"531\"><strong data-start=\"519\" data-end=\"530\">Example<\/strong>:<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">c<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"Copy\">Copy<\/button><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">Edit<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-c\"><span class=\"hljs-type\">int<\/span> a = <span class=\"hljs-number\">5<\/span>;<br \/>\n<\/code><\/div>\n<\/div>\n<p data-start=\"560\" data-end=\"593\">Tokens: <code data-start=\"568\" data-end=\"573\">int<\/code>, <code data-start=\"575\" data-end=\"578\">a<\/code>, <code data-start=\"580\" data-end=\"583\">=<\/code>, <code data-start=\"585\" data-end=\"588\">5<\/code>, <code data-start=\"590\" data-end=\"593\">;<\/code><\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"595\" data-end=\"598\" \/>\n<h3 data-start=\"600\" data-end=\"638\">2. \ud83d\udcd0 <strong data-start=\"610\" data-end=\"638\">Syntax Analysis (Parser)<\/strong><\/h3>\n<ul data-start=\"640\" data-end=\"981\">\n<li data-start=\"640\" data-end=\"750\">\n<p data-start=\"642\" data-end=\"750\"><strong data-start=\"642\" data-end=\"653\">Purpose<\/strong>: Analyzes the token sequence to check if it follows the <strong data-start=\"710\" data-end=\"721\">grammar<\/strong> of the programming language.<\/p>\n<\/li>\n<li data-start=\"751\" data-end=\"802\">\n<p data-start=\"753\" data-end=\"802\"><strong data-start=\"753\" data-end=\"763\">Output<\/strong>: Parse tree (also called syntax tree).<\/p>\n<\/li>\n<li data-start=\"803\" data-end=\"831\">\n<p data-start=\"805\" data-end=\"831\"><strong data-start=\"805\" data-end=\"818\">Tool Used<\/strong>: Yacc, Bison<\/p>\n<\/li>\n<li data-start=\"832\" data-end=\"902\">\n<p data-start=\"834\" data-end=\"902\"><strong data-start=\"834\" data-end=\"852\">Error Detected<\/strong>: Syntax errors like missing semicolons or braces.<\/p>\n<\/li>\n<li data-start=\"903\" data-end=\"981\">\n<p data-start=\"905\" data-end=\"981\"><strong data-start=\"905\" data-end=\"916\">Example<\/strong>: Ensures that expressions like <code data-start=\"948\" data-end=\"959\">a + b * c<\/code> are parsed correctly.<\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"983\" data-end=\"986\" \/>\n<h3 data-start=\"988\" data-end=\"1019\">3. \ud83e\udde0 <strong data-start=\"998\" data-end=\"1019\">Semantic Analysis<\/strong><\/h3>\n<ul data-start=\"1021\" data-end=\"1325\">\n<li data-start=\"1021\" data-end=\"1121\">\n<p data-start=\"1023\" data-end=\"1121\"><strong data-start=\"1023\" data-end=\"1034\">Purpose<\/strong>: Ensures the <strong data-start=\"1048\" data-end=\"1059\">meaning<\/strong> of the program is correct (i.e., checks for semantic errors).<\/p>\n<\/li>\n<li data-start=\"1122\" data-end=\"1199\">\n<p data-start=\"1124\" data-end=\"1134\"><strong data-start=\"1124\" data-end=\"1133\">Tasks<\/strong>:<\/p>\n<ul data-start=\"1137\" data-end=\"1199\">\n<li data-start=\"1137\" data-end=\"1152\">\n<p data-start=\"1139\" data-end=\"1152\">Type checking<\/p>\n<\/li>\n<li data-start=\"1155\" data-end=\"1173\">\n<p data-start=\"1157\" data-end=\"1173\">Scope resolution<\/p>\n<\/li>\n<li data-start=\"1176\" data-end=\"1199\">\n<p data-start=\"1178\" data-end=\"1199\">Variable declarations<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li data-start=\"1200\" data-end=\"1265\">\n<p data-start=\"1202\" data-end=\"1265\"><strong data-start=\"1202\" data-end=\"1212\">Output<\/strong>: Annotated syntax tree or abstract syntax tree (AST)<\/p>\n<\/li>\n<li data-start=\"1266\" data-end=\"1325\">\n<p data-start=\"1268\" data-end=\"1325\"><strong data-start=\"1268\" data-end=\"1279\">Example<\/strong>: Checks if variables are declared before use.<\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"1327\" data-end=\"1330\" \/>\n<h3 data-start=\"1332\" data-end=\"1374\">4. \ud83d\udd01 <strong data-start=\"1342\" data-end=\"1374\">Intermediate Code Generation<\/strong><\/h3>\n<ul data-start=\"1376\" data-end=\"1653\">\n<li data-start=\"1376\" data-end=\"1468\">\n<p data-start=\"1378\" data-end=\"1468\"><strong data-start=\"1378\" data-end=\"1389\">Purpose<\/strong>: Converts the syntax tree or AST into an <strong data-start=\"1431\" data-end=\"1467\">intermediate representation (IR)<\/strong>.<\/p>\n<\/li>\n<li data-start=\"1469\" data-end=\"1546\">\n<p data-start=\"1471\" data-end=\"1546\"><strong data-start=\"1471\" data-end=\"1477\">IR<\/strong>: Easier to optimize and closer to machine language than source code.<\/p>\n<\/li>\n<li data-start=\"1547\" data-end=\"1599\">\n<p data-start=\"1549\" data-end=\"1599\"><strong data-start=\"1549\" data-end=\"1560\">Formats<\/strong>: Three-address code, postfix notation.<\/p>\n<\/li>\n<li data-start=\"1600\" data-end=\"1653\">\n<p data-start=\"1602\" data-end=\"1614\"><strong data-start=\"1602\" data-end=\"1613\">Example<\/strong>:<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">ini<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"Copy\">Copy<\/button><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">Edit<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre!\"><span class=\"hljs-attr\">t1<\/span> = a * b<br \/>\n<span class=\"hljs-attr\">t2<\/span> = t1 + c<br \/>\n<\/code><\/div>\n<\/div>\n<\/li>\n<\/ul>\n<hr data-start=\"1655\" data-end=\"1658\" \/>\n<h3 data-start=\"1660\" data-end=\"1691\">5. \u2699\ufe0f <strong data-start=\"1670\" data-end=\"1691\">Code Optimization<\/strong><\/h3>\n<ul data-start=\"1693\" data-end=\"2003\">\n<li data-start=\"1693\" data-end=\"1772\">\n<p data-start=\"1695\" data-end=\"1772\"><strong data-start=\"1695\" data-end=\"1706\">Purpose<\/strong>: Improves the intermediate code to make it <strong data-start=\"1750\" data-end=\"1771\">faster or smaller<\/strong>.<\/p>\n<\/li>\n<li data-start=\"1773\" data-end=\"1892\">\n<p data-start=\"1775\" data-end=\"1785\"><strong data-start=\"1775\" data-end=\"1784\">Types<\/strong>:<\/p>\n<ul data-start=\"1788\" data-end=\"1892\">\n<li data-start=\"1788\" data-end=\"1835\">\n<p data-start=\"1790\" data-end=\"1835\"><strong data-start=\"1790\" data-end=\"1815\">Peephole optimization<\/strong>: Local improvements<\/p>\n<\/li>\n<li data-start=\"1838\" data-end=\"1892\">\n<p data-start=\"1840\" data-end=\"1892\"><strong data-start=\"1840\" data-end=\"1861\">Loop optimization<\/strong>: Reduce redundant computations<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li data-start=\"1893\" data-end=\"1934\">\n<p data-start=\"1895\" data-end=\"1934\"><strong data-start=\"1895\" data-end=\"1905\">Output<\/strong>: Optimized intermediate code<\/p>\n<\/li>\n<li data-start=\"1935\" data-end=\"2003\">\n<p data-start=\"1937\" data-end=\"2003\"><strong data-start=\"1937\" data-end=\"1948\">Example<\/strong>: Replace <code data-start=\"1958\" data-end=\"1969\">x = x * 2<\/code> with <code data-start=\"1975\" data-end=\"1987\">x = x &lt;&lt; 1<\/code> (bitwise shift)<\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"2005\" data-end=\"2008\" \/>\n<h3 data-start=\"2010\" data-end=\"2039\">6. \ud83e\uddfe <strong data-start=\"2020\" data-end=\"2039\">Code Generation<\/strong><\/h3>\n<ul data-start=\"2041\" data-end=\"2324\">\n<li data-start=\"2041\" data-end=\"2126\">\n<p data-start=\"2043\" data-end=\"2126\"><strong data-start=\"2043\" data-end=\"2054\">Purpose<\/strong>: Converts intermediate code into <strong data-start=\"2088\" data-end=\"2125\">target (machine or assembly) code<\/strong>.<\/p>\n<\/li>\n<li data-start=\"2127\" data-end=\"2174\">\n<p data-start=\"2129\" data-end=\"2174\"><strong data-start=\"2129\" data-end=\"2139\">Output<\/strong>: Executable code or assembly code.<\/p>\n<\/li>\n<li data-start=\"2175\" data-end=\"2261\">\n<p data-start=\"2177\" data-end=\"2187\"><strong data-start=\"2177\" data-end=\"2186\">Tasks<\/strong>:<\/p>\n<ul data-start=\"2190\" data-end=\"2261\">\n<li data-start=\"2190\" data-end=\"2211\">\n<p data-start=\"2192\" data-end=\"2211\">Register allocation<\/p>\n<\/li>\n<li data-start=\"2214\" data-end=\"2237\">\n<p data-start=\"2216\" data-end=\"2237\">Instruction selection<\/p>\n<\/li>\n<li data-start=\"2240\" data-end=\"2261\">\n<p data-start=\"2242\" data-end=\"2261\">Address translation<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li data-start=\"2262\" data-end=\"2324\">\n<p data-start=\"2264\" data-end=\"2276\"><strong data-start=\"2264\" data-end=\"2275\">Example<\/strong>:<\/p>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]\">css<\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute end-0 bottom-0 flex h-9 items-center pe-2\">\n<div class=\"bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center rounded-sm px-2 font-sans text-xs\"><button class=\"flex gap-1 items-center select-none px-4 py-1\" aria-label=\"Copy\">Copy<\/button><span class=\"\" data-state=\"closed\"><button class=\"flex items-center gap-1 px-4 py-1 select-none\">Edit<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre!\">MOV R1, <span class=\"hljs-selector-tag\">a<\/span><br \/>\nMUL R1, <span class=\"hljs-selector-tag\">b<\/span><br \/>\nADD R1, c<br \/>\n<\/code><\/div>\n<\/div>\n<\/li>\n<\/ul>\n<hr data-start=\"2326\" data-end=\"2329\" \/>\n<h3 data-start=\"2331\" data-end=\"2351\">\ud83d\udccc Summary Table<\/h3>\n<div class=\"_tableContainer_16hzy_1\">\n<div class=\"_tableWrapper_16hzy_14 group flex w-fit flex-col-reverse\">\n<table class=\"w-fit min-w-(--thread-content-width)\" data-start=\"2353\" data-end=\"3194\">\n<thead data-start=\"2353\" data-end=\"2459\">\n<tr data-start=\"2353\" data-end=\"2459\">\n<th data-start=\"2353\" data-end=\"2377\" data-col-size=\"sm\">Phase<\/th>\n<th data-start=\"2377\" data-end=\"2402\" data-col-size=\"sm\">Input<\/th>\n<th data-start=\"2402\" data-end=\"2425\" data-col-size=\"sm\">Output<\/th>\n<th data-start=\"2425\" data-end=\"2459\" data-col-size=\"sm\">Focus<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"2565\" data-end=\"3194\">\n<tr data-start=\"2565\" data-end=\"2669\">\n<td data-start=\"2565\" data-end=\"2588\" data-col-size=\"sm\">Lexical Analysis<\/td>\n<td data-start=\"2588\" data-end=\"2613\" data-col-size=\"sm\">Source code<\/td>\n<td data-start=\"2613\" data-end=\"2636\" data-col-size=\"sm\">Tokens<\/td>\n<td data-start=\"2636\" data-end=\"2669\" data-col-size=\"sm\">Pattern matching<\/td>\n<\/tr>\n<tr data-start=\"2670\" data-end=\"2774\">\n<td data-start=\"2670\" data-end=\"2693\" data-col-size=\"sm\">Syntax Analysis<\/td>\n<td data-start=\"2693\" data-end=\"2718\" data-col-size=\"sm\">Tokens<\/td>\n<td data-start=\"2718\" data-end=\"2741\" data-col-size=\"sm\">Parse tree<\/td>\n<td data-start=\"2741\" data-end=\"2774\" data-col-size=\"sm\">Grammar<\/td>\n<\/tr>\n<tr data-start=\"2775\" data-end=\"2879\">\n<td data-start=\"2775\" data-end=\"2798\" data-col-size=\"sm\">Semantic Analysis<\/td>\n<td data-start=\"2798\" data-end=\"2823\" data-col-size=\"sm\">Parse tree<\/td>\n<td data-start=\"2823\" data-end=\"2846\" data-col-size=\"sm\">AST<\/td>\n<td data-start=\"2846\" data-end=\"2879\" data-col-size=\"sm\">Meaning, type checking<\/td>\n<\/tr>\n<tr data-start=\"2880\" data-end=\"2984\">\n<td data-start=\"2880\" data-end=\"2903\" data-col-size=\"sm\">Intermediate Code Gen<\/td>\n<td data-start=\"2903\" data-end=\"2928\" data-col-size=\"sm\">AST<\/td>\n<td data-start=\"2928\" data-end=\"2951\" data-col-size=\"sm\">Intermediate code<\/td>\n<td data-col-size=\"sm\" data-start=\"2951\" data-end=\"2984\">Simplified representation<\/td>\n<\/tr>\n<tr data-start=\"2985\" data-end=\"3089\">\n<td data-start=\"2985\" data-end=\"3008\" data-col-size=\"sm\">Code Optimization<\/td>\n<td data-start=\"3008\" data-end=\"3033\" data-col-size=\"sm\">Intermediate code<\/td>\n<td data-start=\"3033\" data-end=\"3056\" data-col-size=\"sm\">Optimized code<\/td>\n<td data-start=\"3056\" data-end=\"3089\" data-col-size=\"sm\">Performance improvement<\/td>\n<\/tr>\n<tr data-start=\"3090\" data-end=\"3194\">\n<td data-start=\"3090\" data-end=\"3113\" data-col-size=\"sm\">Code Generation<\/td>\n<td data-start=\"3113\" data-end=\"3138\" data-col-size=\"sm\">Optimized code<\/td>\n<td data-start=\"3138\" data-end=\"3161\" data-col-size=\"sm\">Machine\/Assembly code<\/td>\n<td data-start=\"3161\" data-end=\"3194\" data-col-size=\"sm\">Hardware-specific translation<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"sticky end-(--thread-content-margin) h-0 self-end select-none\">\n<div class=\"absolute end-0 flex items-end\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<hr data-start=\"3196\" data-end=\"3199\" \/>\n<p data-start=\"3201\" data-end=\"3276\" data-is-last-node=\"\" data-is-only-node=\"\">Let me know if you want diagrams or examples in C or Python for each phase!<\/p>\n<h3 data-start=\"3201\" data-end=\"3276\"><a href=\"https:\/\/www.uoanbar.edu.iq\/eStoreImages\/Bank\/311.pdf\" target=\"_blank\" rel=\"noopener\">Six Phases of compiler &#8211; Lexical \/Syntax \/Semantic \/Intermediate code generation\/code optimization<\/a><\/h3>\n<h3 class=\"LC20lb MBeuO DKV0Md\"><a href=\"https:\/\/gwcet.ac.in\/uploaded_files\/Compiler_Design_(Unit-_I)_6th_Sem.pdf\" target=\"_blank\" rel=\"noopener\">UNIT- I Introduction to Compiling<\/a><\/h3>\n<h3 class=\"LC20lb MBeuO DKV0Md\"><a href=\"https:\/\/cet.edu.in\/noticefiles\/277_CD%20Complete.pdf\" target=\"_blank\" rel=\"noopener\">COMPILER DESIGN<\/a><\/h3>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Six Phases of compiler &#8211; Lexical \/Syntax \/Semantic \/Intermediate code generation\/code optimization [fvplayer id=&#8221;131&#8243;] \u00a0Six Phases of Compiler A compiler translates high-level code into machine code through six main phases: Lexical AnalysisSyntax AnalysisSemantic AnalysisIntermediate Code GenerationCode OptimizationCode Generation \u00a0Lexical Analysis (Scanning) Input: Source Code (High-level language)Output: TokensPurpose: Converts the source code into tokens (smallest units [&hellip;]<\/p>\n","protected":false},"author":71,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[86],"tags":[],"class_list":["post-2823","post","type-post","status-publish","format-standard","hentry","category-compiler-design"],"_links":{"self":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/posts\/2823","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/comments?post=2823"}],"version-history":[{"count":0,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/posts\/2823\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/media?parent=2823"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/categories?post=2823"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/tags?post=2823"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}