{"id":2816,"date":"2025-06-07T14:45:59","date_gmt":"2025-06-07T14:45:59","guid":{"rendered":"https:\/\/diznr.com\/?p=2816"},"modified":"2025-06-07T14:45:59","modified_gmt":"2025-06-07T14:45:59","slug":"short-trick-method-to-find-first-of-any-grammar-design-compiler","status":"publish","type":"post","link":"https:\/\/www.reilsolar.com\/pdf\/short-trick-method-to-find-first-of-any-grammar-design-compiler\/","title":{"rendered":"Short trick method to find First of any grammar- Compiler Design"},"content":{"rendered":"<p>Short trick method to find First of any grammar- Compiler Design<\/p>\n<p>[fvplayer id=&#8221;127&#8243;]<\/p>\n<h3 class=\"\" data-start=\"0\" data-end=\"68\">\u2705 <strong data-start=\"6\" data-end=\"68\">Short Trick to Find FIRST of Any Grammar (Compiler Design)<\/strong><\/h3>\n<p class=\"\" data-start=\"70\" data-end=\"280\">In <strong data-start=\"73\" data-end=\"92\">Compiler Design<\/strong>, computing the <strong data-start=\"108\" data-end=\"117\">FIRST<\/strong> set is essential for parsing table construction in <strong data-start=\"169\" data-end=\"178\">LL(1)<\/strong> parsers. Here&#8217;s a <strong data-start=\"197\" data-end=\"219\">short trick method<\/strong> with rules to find the FIRST set <strong data-start=\"253\" data-end=\"279\">quickly and accurately<\/strong>.<\/p>\n<hr class=\"\" data-start=\"282\" data-end=\"285\" \/>\n<h2 class=\"\" data-start=\"287\" data-end=\"311\">\ud83e\udde0 <strong data-start=\"293\" data-end=\"311\">What is FIRST?<\/strong><\/h2>\n<blockquote data-start=\"313\" data-end=\"463\">\n<p class=\"\" data-start=\"315\" data-end=\"463\">The <strong data-start=\"319\" data-end=\"331\">FIRST(X)<\/strong> set is the set of <strong data-start=\"350\" data-end=\"363\">terminals<\/strong> that begin the strings derivable from symbol <strong data-start=\"409\" data-end=\"414\">X<\/strong> (where X can be a terminal, non-terminal, or \u03b5).<\/p>\n<\/blockquote>\n<hr class=\"\" data-start=\"465\" data-end=\"468\" \/>\n<h2 class=\"\" data-start=\"470\" data-end=\"511\">\ud83d\udd0d <strong data-start=\"476\" data-end=\"511\">Short Trick Rules to Find FIRST<\/strong><\/h2>\n<h3 class=\"\" data-start=\"513\" data-end=\"545\">\ud83d\udfe0 <strong data-start=\"520\" data-end=\"545\">Rule 1: For terminals<\/strong><\/h3>\n<p class=\"\" data-start=\"546\" data-end=\"575\">If <strong data-start=\"549\" data-end=\"568\">X is a terminal<\/strong>, then:<\/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]\">bash<\/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-bash\">FIRST(X) = { X }<br \/>\n<\/code><\/div>\n<\/div>\n<h3 class=\"\" data-start=\"606\" data-end=\"640\">\ud83d\udfe0 <strong data-start=\"613\" data-end=\"640\">Rule 2: For \u03b5 (epsilon)<\/strong><\/h3>\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]\">bash<\/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-bash\">FIRST(\u03b5) = { \u03b5 }<br \/>\n<\/code><\/div>\n<\/div>\n<h3 class=\"\" data-start=\"671\" data-end=\"725\">\ud83d\udfe0 <strong data-start=\"678\" data-end=\"725\">Rule 3: For non-terminals (A \u2192 \u03b11 \u03b12 \u03b13&#8230;)<\/strong><\/h3>\n<p class=\"\" data-start=\"726\" data-end=\"747\">To find <strong data-start=\"734\" data-end=\"746\">FIRST(A)<\/strong>:<\/p>\n<ul data-start=\"748\" data-end=\"1001\">\n<li class=\"\" data-start=\"748\" data-end=\"800\">\n<p class=\"\" data-start=\"750\" data-end=\"800\">Go left to right in production <strong data-start=\"781\" data-end=\"800\">A \u2192 \u03b11 \u03b12 \u03b13&#8230;<\/strong><\/p>\n<\/li>\n<li class=\"\" data-start=\"801\" data-end=\"828\">\n<p class=\"\" data-start=\"803\" data-end=\"828\">Add FIRST(\u03b11) to FIRST(A)<\/p>\n<\/li>\n<li class=\"\" data-start=\"829\" data-end=\"888\">\n<p class=\"\" data-start=\"831\" data-end=\"888\">If <strong data-start=\"834\" data-end=\"847\">FIRST(\u03b11)<\/strong> contains \u03b5, then check \u03b12, then \u03b13, etc.<\/p>\n<\/li>\n<li class=\"\" data-start=\"889\" data-end=\"952\">\n<p class=\"\" data-start=\"891\" data-end=\"952\">Continue until a symbol <strong data-start=\"915\" data-end=\"927\">does NOT<\/strong> have \u03b5 in its FIRST set.<\/p>\n<\/li>\n<li class=\"\" data-start=\"953\" data-end=\"1001\">\n<p class=\"\" data-start=\"955\" data-end=\"1001\">If all symbols derive \u03b5, then <strong data-start=\"985\" data-end=\"1001\">\u03b5 \u2208 FIRST(A)<\/strong><\/p>\n<\/li>\n<\/ul>\n<hr class=\"\" data-start=\"1003\" data-end=\"1006\" \/>\n<h3 class=\"\" data-start=\"1008\" data-end=\"1044\">\u2728 <strong data-start=\"1014\" data-end=\"1044\">Shortcut Flow (for A \u2192 \u03b1):<\/strong><\/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=\"1046\" data-end=\"1535\">\n<thead data-start=\"1046\" data-end=\"1122\">\n<tr data-start=\"1046\" data-end=\"1122\">\n<th data-start=\"1046\" data-end=\"1081\" data-col-size=\"sm\">\u03b1 is&#8230;<\/th>\n<th data-start=\"1081\" data-end=\"1122\" data-col-size=\"md\">FIRST(A) contains&#8230;<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"1200\" data-end=\"1535\">\n<tr data-start=\"1200\" data-end=\"1276\">\n<td data-start=\"1200\" data-end=\"1235\" data-col-size=\"sm\">Terminal <code data-start=\"1211\" data-end=\"1214\">a<\/code><\/td>\n<td data-col-size=\"md\" data-start=\"1235\" data-end=\"1276\"><code data-start=\"1237\" data-end=\"1240\">a<\/code><\/td>\n<\/tr>\n<tr data-start=\"1277\" data-end=\"1353\">\n<td data-start=\"1277\" data-end=\"1312\" data-col-size=\"sm\">\u03b5<\/td>\n<td data-col-size=\"md\" data-start=\"1312\" data-end=\"1353\"><code data-start=\"1314\" data-end=\"1317\">\u03b5<\/code><\/td>\n<\/tr>\n<tr data-start=\"1354\" data-end=\"1441\">\n<td data-start=\"1354\" data-end=\"1389\" data-col-size=\"sm\">Non-terminal <code data-start=\"1369\" data-end=\"1372\">B<\/code><\/td>\n<td data-col-size=\"md\" data-start=\"1389\" data-end=\"1441\">FIRST(B), and if \u03b5 \u2208 FIRST(B), check next symbol<\/td>\n<\/tr>\n<tr data-start=\"1442\" data-end=\"1535\">\n<td data-start=\"1442\" data-end=\"1477\" data-col-size=\"sm\">Sequence <code data-start=\"1453\" data-end=\"1463\">B C D...<\/code><\/td>\n<td data-col-size=\"md\" data-start=\"1477\" data-end=\"1535\">FIRST(B), and if \u03b5 \u2208 FIRST(B), add FIRST(C), and so on<\/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 class=\"\" data-start=\"1537\" data-end=\"1540\" \/>\n<h2 class=\"\" data-start=\"1542\" data-end=\"1562\">\ud83d\udd22 <strong data-start=\"1548\" data-end=\"1562\">Example 1:<\/strong><\/h2>\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]\">less<\/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-selector-tag\">S<\/span> \u2192 <span class=\"hljs-selector-tag\">A<\/span> <span class=\"hljs-selector-tag\">B<\/span><br \/>\n<span class=\"hljs-selector-tag\">A<\/span> \u2192 <span class=\"hljs-selector-tag\">a<\/span> | \u03b5<br \/>\n<span class=\"hljs-selector-tag\">B<\/span> \u2192 <span class=\"hljs-selector-tag\">b<\/span><br \/>\n<\/code><\/div>\n<\/div>\n<h3 class=\"\" data-start=\"1596\" data-end=\"1613\">Step-by-step:<\/h3>\n<ul data-start=\"1614\" data-end=\"1776\">\n<li class=\"\" data-start=\"1614\" data-end=\"1635\">\n<p class=\"\" data-start=\"1616\" data-end=\"1635\">FIRST(A) = { a, \u03b5 }<\/p>\n<\/li>\n<li class=\"\" data-start=\"1636\" data-end=\"1654\">\n<p class=\"\" data-start=\"1638\" data-end=\"1654\">FIRST(B) = { b }<\/p>\n<\/li>\n<li class=\"\" data-start=\"1655\" data-end=\"1776\">\n<p class=\"\" data-start=\"1657\" data-end=\"1666\">FIRST(S):<\/p>\n<ul data-start=\"1669\" data-end=\"1776\">\n<li class=\"\" data-start=\"1669\" data-end=\"1685\">\n<p class=\"\" data-start=\"1671\" data-end=\"1685\">From <code data-start=\"1676\" data-end=\"1685\">S \u2192 A B<\/code><\/p>\n<\/li>\n<li class=\"\" data-start=\"1688\" data-end=\"1724\">\n<p class=\"\" data-start=\"1690\" data-end=\"1724\">FIRST(A) = { a, \u03b5 }, so check next<\/p>\n<\/li>\n<li class=\"\" data-start=\"1727\" data-end=\"1745\">\n<p class=\"\" data-start=\"1729\" data-end=\"1745\">FIRST(B) = { b }<\/p>\n<\/li>\n<li class=\"\" data-start=\"1748\" data-end=\"1776\">\n<p class=\"\" data-start=\"1750\" data-end=\"1776\">So <strong data-start=\"1753\" data-end=\"1776\">FIRST(S) = { a, b }<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<hr class=\"\" data-start=\"1778\" data-end=\"1781\" \/>\n<h2 class=\"\" data-start=\"1783\" data-end=\"1803\">\ud83d\udd22 <strong data-start=\"1789\" data-end=\"1803\">Example 2:<\/strong><\/h2>\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!\">S \u2192 <span class=\"hljs-selector-tag\">A<\/span> <span class=\"hljs-selector-tag\">B<\/span><br \/>\n<span class=\"hljs-selector-tag\">A<\/span> \u2192 \u03b5<br \/>\n<span class=\"hljs-selector-tag\">B<\/span> \u2192 \u03b5<br \/>\n<\/code><\/div>\n<\/div>\n<p class=\"\" data-start=\"1832\" data-end=\"1837\">Then:<\/p>\n<ul data-start=\"1838\" data-end=\"1927\">\n<li class=\"\" data-start=\"1838\" data-end=\"1856\">\n<p class=\"\" data-start=\"1840\" data-end=\"1856\">FIRST(A) = { \u03b5 }<\/p>\n<\/li>\n<li class=\"\" data-start=\"1857\" data-end=\"1875\">\n<p class=\"\" data-start=\"1859\" data-end=\"1875\">FIRST(B) = { \u03b5 }<\/p>\n<\/li>\n<li class=\"\" data-start=\"1876\" data-end=\"1927\">\n<p class=\"\" data-start=\"1878\" data-end=\"1927\">FIRST(S) = { \u03b5 } \u2705 (since all parts can derive \u03b5)<\/p>\n<\/li>\n<\/ul>\n<hr class=\"\" data-start=\"1929\" data-end=\"1932\" \/>\n<h2 class=\"\" data-start=\"1934\" data-end=\"1954\">\ud83d\udd22 <strong data-start=\"1940\" data-end=\"1954\">Example 3:<\/strong><\/h2>\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]\">less<\/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-selector-tag\">S<\/span> \u2192 <span class=\"hljs-selector-tag\">A<\/span> <span class=\"hljs-selector-tag\">b<\/span><br \/>\n<span class=\"hljs-selector-tag\">A<\/span> \u2192 <span class=\"hljs-selector-tag\">c<\/span> | \u03b5<br \/>\n<\/code><\/div>\n<\/div>\n<ul data-start=\"1982\" data-end=\"2091\">\n<li class=\"\" data-start=\"1982\" data-end=\"2003\">\n<p class=\"\" data-start=\"1984\" data-end=\"2003\">FIRST(A) = { c, \u03b5 }<\/p>\n<\/li>\n<li class=\"\" data-start=\"2004\" data-end=\"2091\">\n<p class=\"\" data-start=\"2006\" data-end=\"2091\">FIRST(S) = { c, b }<br data-start=\"2025\" data-end=\"2028\" \/>(Because A can be \u03b5, so next terminal <code data-start=\"2068\" data-end=\"2071\">b<\/code> is also considered)<\/p>\n<\/li>\n<\/ul>\n<hr class=\"\" data-start=\"2093\" data-end=\"2096\" \/>\n<h2 class=\"\" data-start=\"2098\" data-end=\"2128\">\ud83d\udcdd <strong data-start=\"2104\" data-end=\"2128\">Tips &amp; Tricks Recap:<\/strong><\/h2>\n<p class=\"\" data-start=\"2130\" data-end=\"2374\">\u2705 Go <strong data-start=\"2135\" data-end=\"2152\">left to right<\/strong> in RHS<br data-start=\"2159\" data-end=\"2162\" \/>\u2705 If you see a <strong data-start=\"2177\" data-end=\"2189\">terminal<\/strong>, add it and <strong data-start=\"2202\" data-end=\"2210\">stop<\/strong><br data-start=\"2210\" data-end=\"2213\" \/>\u2705 If you see <strong data-start=\"2226\" data-end=\"2231\">\u03b5<\/strong>, skip and check next<br data-start=\"2252\" data-end=\"2255\" \/>\u2705 If all symbols can derive \u03b5, then add <strong data-start=\"2295\" data-end=\"2300\">\u03b5<\/strong> to FIRST<br data-start=\"2309\" data-end=\"2312\" \/>\u2705 Don&#8217;t forget to <strong data-start=\"2330\" data-end=\"2339\">union<\/strong> all FIRSTs if multiple rules exist<\/p>\n<hr class=\"\" data-start=\"2376\" data-end=\"2379\" \/>\n<p class=\"\" data-start=\"2381\" data-end=\"2474\">Want a short <strong data-start=\"2394\" data-end=\"2407\">PDF chart<\/strong>, <strong data-start=\"2409\" data-end=\"2423\">video link<\/strong>, or practice problems with solutions? Let me know!<\/p>\n<h3 data-start=\"2381\" data-end=\"2474\"><a href=\"https:\/\/uomustansiriyah.edu.iq\/media\/lectures\/9\/9_2019_04_12!12_55_27_PM.pdf\" target=\"_blank\" rel=\"noopener\">Short trick method to find First of any grammar- Compiler Design<\/a><\/h3>\n<h3 class=\"LC20lb MBeuO DKV0Md\"><a href=\"https:\/\/sircrrengg.ac.in\/images\/CSEMATERIALS\/3_1_COMPILER_DESIGN.pdf\" target=\"_blank\" rel=\"noopener\">LECTURE NOTES ON COMPILER DESIGN<\/a><\/h3>\n<h3 class=\"LC20lb MBeuO DKV0Md\"><a href=\"https:\/\/www.vssut.ac.in\/lecture_notes\/lecture1422914957.pdf\" target=\"_blank\" rel=\"noopener\">compiler design lecture notes<\/a><\/h3>\n","protected":false},"excerpt":{"rendered":"<p>Short trick method to find First of any grammar- Compiler Design [fvplayer id=&#8221;127&#8243;] \u2705 Short Trick to Find FIRST of Any Grammar (Compiler Design) In Compiler Design, computing the FIRST set is essential for parsing table construction in LL(1) parsers. Here&#8217;s a short trick method with rules to find the FIRST set quickly and accurately. [&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-2816","post","type-post","status-publish","format-standard","hentry","category-compiler-design"],"_links":{"self":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/posts\/2816","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=2816"}],"version-history":[{"count":0,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/posts\/2816\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/media?parent=2816"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/categories?post=2816"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/tags?post=2816"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}