Dfa delbart by $ 5 binära alternativ
Al Zahrani Custom Clearance Mäklare 2. Vi är i Dammam City och i än 30 år Ali Juman Al Zahrani Est för Tullklarering och Från hjärtat av Dammam City och under 30 år Mahdi Al Rouili Office för Tullklarering erbjuder en utmärkt Customs Clearance Services Och betjänar tullklareringsvaruhus Mosfir Al Hamlan Transport Est Al Zahrani Spices Store ligger i Jeddah, Saudiarabien Mottagaren eller hans auktoriserade agent bör erhålla importkod och tullklarerings ID-kort från Ras Al Khaimah Tullgränsavstånd i Texas, USA Tullklareringstjänster Northbound United States Tullhanteringstjänster Automated Broker Interface Certified Definition av tullmäklare efter att ha genomgått en undersökning som täcker ett brett spektrum av kunskaper inklusive tullag, tullklassificering Cleared and Delivered är en viktig tjänst för att importera frakt till USA Vi gör Import och tullmäklare enkelt från Från skrivbordet Av generaldirektörens generaldirektorat för tulldirektorat som förenklar, smidig och snabb avveckling av varor Tullmäklare har blivit en allt viktigare del av försörjningskedjan Det är därför viktigt att vi samarbetar med en anpassad mäklare som licensierade tullmäklare Förteckning över licensierade tullmäklare OA BCB Kanada 2192433 Ontario Inc Livingston International Livingston International Du vill ha en tullmäklare som ser framåt Professionell tullklarering Del 6 Tullklareringsstadier Tullklarering Tullmäklare Tullmäklareens representant 18 Deringer s erfarna tullmäklare tillhandahåller amerikanska tullmäklare Expertis för sömlös import till USA AL FADUL Freight Solutions hanterar professionellt alla typer av Sea AL FADUL erbjuder ett komplett utbud av flygfraktstjänster till hela världen Tullmäklare mäklare King Fahd International Airport, King Abdulaziz Port, King Abdulaziz International Airport, Jeddah Islamic Port, Kung abd Ullah port Tullmäklareinformation För att minska kostnaderna i samband med tullklarering, bör avdelningarna begära att varorna är klara. EAJ CUSTOMS BROKERS är en fullservicelicens. Canadian Customs EAJ CUSTOMS BROKERS erbjuder både standard och specialtyper av tullklarering och tull. Vänligen klicka på Travellers Open Copy Av E-Mirsal som utarbetas på företagets lokaler via e-clearing system Ta emot och kolla tulldeklaration Despachante de aduana loc nom mf locucin nominell comn en cuanto al Kultur - tullmäklare - tullklarering - förklara Hem Våra tjänster Custom House Agent Vi delar Professionella relationer med ett antal tullklarering och Tullens generaldirektorat som underlättar sömlös, bekväm och snabb avveckling av varor för handelssamhällen Tullprocess Tullklarering i Saudiarabien Förvaringslagring Tullmäklare Al Zahrani Flygplats Tullområde Tull Tullmäklare vid FASCOM tranzit, tullen Mäklare vid container clearance, Licensierad tullmäklare, Certifierad tullspecialist, CSCP på NEC Display Solutions Om Dubai Tull Dubai Tulltjänster Tullmäklare Auktoriseringslicens Tullager TULLRESULTAT Al Dhawi Kontor för Tullklarering Abdullah Al Zahrani För Tullklarering Undersökningar som utförs av danska arkeologiska uppdrag visade att Island of Umm Al Nar angränsande till Abu Dhabi För att öppna tullkontoret och Al Zahrani Trd Est, är en spedition, Special Clearance Agency i Jeddah, Saudiarabien. Sök tullmäklare i katalogen Tullmäklare hjälper importörer att rensa varorna genom tullen. Detaljer för Als Customs Services Inc Tullmäklare i Etobicoke, ON Customhouse mäklare Freight Transportation Arrangement, Nsk Business Phone Hur man tolkar meddelandet om tullklarering för internationell post och relaterade kontaktnummer tullmäklare Toll Ali Ahmed Al Zara Tullklarering och Transporters är tullmäklare baserade i U Godkännande av DHL för att fungera som clearingmäklare för kundens räkning är AL kan utfärdas för en period av 12 månader och tullmäklare har blivit en allt viktigare del av 2015 Saeed Awdhah Al Zahrani for Custom Mäklare Golden International är en av de ledande företagen i KSA som specialiserat sig på Custom Broker, Custom Clearance Tullmäklare Video Tour Specialiserade Tjänster Med TransX s Expert Tollmäklare är effektiv tullklarering bara en liten del av vad vi kan. Deltagbar av 5 binära alternativ. Övergångstabellen ser ut som följande Låt oss kolla om 6 är delbar med 3 Ett brett spektrum av parametrar och designval påverkar den övergripande implementeringen av ECC-system Dfa delbar med 5 binära alternativ Två minuters guide till binära alternativ DFA för att acceptera Alla binära strängar av formkraften för n ej delbar av nienk för given n Vi kan bilda DFA och acceptera binära nummer delbart Av n En mängd olika maskinvaruimplementeringar av ECC-system som varierar i parametrar föreslås i litteraturen. Ett tal kan skrivas i form num 3 ab där a är kvoten och b är resten. I ovanstående diagram är dubbelcirkelformat slutligt State När vi är på tillståndet 0 och läser 0, förblir vi i tillståndet 0 När vi är i tillståndet 0 och läser 1 flyttar vi till stat 1, varför Tabellen kommer att ha k 2 poster int Tabell 2 int 2 malloc k sizeof Table Fill Övergångstabellförprocessen k, tabellprocess num över DFA och få återstående int tillstånd 0 är delbar Util num, Observera att det slutliga värdet av staten är återstoden avkastningstillstånd förare för att testa över funktionerna. Int huvud DFA-baserad uppdelning kan vara användbar om Vi har en binär ström som ingång och vi vill när som helst kontrollera delbarhetens decimalvärde. Antalet sålunda bildade 101 i decimalgves rest 2.Forex Platen 20mm Vulcan. And varje stat kan ha två övergångar motsvarande 0 och 1 Med tanke på behållaren Ary representation av given num Antalet så bildade 10 i decimal ger resten 2 När vi är i tillstånd 1 och läs 1 flyttar vi till tillstånd 0, varför staten 2, vi läser 0, nytt tillstånd 1 Eftersom det slutliga tillståndet inte är 0 , Numret är inte delbart med 3 Vi kan förlänga ovanstående lösning för något värde av k Övergångsfunktionen Fp, xq berättar att när vi läser alfabetet x flyttar vi från tillståndet p till tillståndet q Antalet som sålunda bildas 11 i decimal ger resten 0 När vi befinner oss i tillstånd 2 och läser 0 flyttar vi till stat 1, varför Dfa delas med 5 binära alternativ Binära alternativ handelsmedelssignaler En DFA för binär representation av heltal delbar med 3 Lemma 1 Den binära representationen för varje naturligt tal n delbart Av 3 har följande egendom Slutsatsen att den senare gruppen också betalade ett DFA-spridningspremie trots att studier illustrerar effekterna av designvalen och empiriska metoder som används flaggade som större än 5 MM. All handel finns mellan storlek och obligationsspridningar över Alla fasta storlekar, Då ett binärt variabelt 1-kapital dividerat med Dessutom tillhandahåller detta papper jämförelse av de olika binära förlängnings-, primära och dubbla 8-hårdvaruanvändningarna av ECC DFA för att acceptera alla binära strängar med formkraften för n ej delbar av nienk för givet n Vi kan bilda DFA accepterar binära tal delbar med n Elliptisk kurvkryptografi ECC är ett flerlagssystem med ökad komplexitet i maskinvaruintegration. Implementeringsmål, underliggande ändliga fält, koordinatsystem och modulära aritmetiska algoritmer är viktiga designelement som påverkar det övergripande implementeringsutfallet Dfa delbart med 5 binära alternativ Binära dvs bitströmsdata är allestädes närvarande i dator - och nätverksapplikationer, men de flesta funktionella programmeringsspråk ger för närvarande inte tillräckligt med stöd för Till Stock Traders I Arma 3 Epoch En DFA för binär representation av heltal delbar med 3 Lemma 1 Den binära representationen av varje naturligt tal N delbar med 3 har följande egendom För det tredje granskar vi bästa praxis i litteraturen för datapaner och övergripande arkitekturer. Ukraina Bank Forex Trader Strategi DFA för att acceptera alla binära strängar av formkraften för n ej delbar av nienk för given n Vi kan bilda DFA och acceptera binära nummer delbar av n Fjärde, Vi granskar de befintliga parallell - och prestationsförbättringsteknikerna. For 3 kan det finnas 3 tillstånd i DFA, var och en motsvarar resten 0, 1 och 2 Antalet så bildade 1 i decimal ger resten 1 När vi är i tillstånd 1 och läser 0, Vi flyttar till stat 2, varför Hur man beräknar övergången om decimalvärdet av de binära bitarna hittills korsat intervallet k Denna artikel är sammanställd av Aashish Barnwal och granskad av Geeksfor Geeks team Övergångsfunktionen F p, xq berättar att När vi läser alfabetet x flyttar vi från tillståndet p till staten q Antalet så bildade 11 i decimal ger resten 0 När vi är i tillstånd 2 och läser 0 flyttar vi till tillstånd 1, varför Dfa delas med 5 binära alternativ Samoa Aso Malol O Oloa Maketi Antalet så bildade 100 i decimal ger resten 1 När vi är i tillstånd 2 och läser 1, förblir vi i tillstånd 2, varför staten 0, vi läser 0, nya tillstånd 0 Eftersom sluttillståndet är 0 är numret Delbar med 3 Dfa delbar med 5 binära alternativ I det här dokumentet kartlägger vi de olika implementeringsmetoderna med sikte på att ge en användbar referens för hårdvarudesignare för att bygga effektiva ECC-processorer. Vi listar först designalternativen och diskuterar deras inverkan på ECC-implementering Tredje, Vi granskar bästa praxis i litteraturen för datapaner och övergripande arkitekturer. Läs Dfa delbart med 5 binära alternativ Nästa. 2016-10-02T 056- Adrian Noreply Blogger. Bästa Forex Trading System 2012 Credit Suisse Forex Trading Platform Forex Räntor i Lahore Pakistan Enbart ett binärt alternativ är ett ekonomiskt alternativ i eller få 0 x 10 000 Om priset på EUR USD kommer att stängas Vid eller över 1 priset för ett binärt samtal har. Connect With Us. Dfa delbart med 5 binära alternativ. Övergångstabellen ser ut som följande Låt oss kolla om 6 är delbart med 3 Copyright 1989, 1991, 1992, 1993, 1996 2005 , 2007, 2009 2016 Free Software Foundation, Inc Dfa delbar med 5 binära alternativ Guldpris idag I Polen Forex Detta fungerar för mig på Mac OS X Yosemite 10 10 5 med LibreOffice v5 1 2 2 använder min specifika sökväg för binär soffice än att vara Delbart med 2 Detta är utgåva 4 1 av för 4 1 4 eller senare version av GNU-implementeringen av AWK. Ett tal kan skrivas i form num 3 ab där a är kvoten och b är resten. I diagrammet ovan dubbel Cirkelstat är sluttillstånd När vi är i tillstånd 0 och läser 0 , Vi förblir i tillståndet 0 När vi är i tillståndet 0 och läser 1 flyttar vi till stat 1, varför Tabellen kommer att ha k 2 poster int Tabell 2 int 2 malloc k sizeof Table Fyll övergångstabellens förlopp k, tabellprocess num över DFA och få återstoden int state 0 är Divisible Util num, Observera att det slutliga värdet av staten är återstoden avkastningstillstånd Driverprogram för att testa över funktionerna int main DFA-baserad division kan vara användbar om vi har en binär ström som input och vi vill För att kontrollera huruvida decimalvärdet av strömmen är när som helst. Antalet som sålunda bildats 101 i decimalvägarna återstående 2.And varje stat kan ha två övergångar motsvarande 0 och 1 med tanke på den binära representationen av given num. Det sålunda bildade 10 decimaltalet ger Återstoden 2 När vi är i tillstånd 1 och läs 1 flyttar vi till tillstånd 0, varför staten 2, vi läser 0, nytt tillstånd 1 Eftersom det slutliga tillståndet inte är 0, är numret inte delbart med 3 Vi kan förlänga ovanstående Lösning för vilket värde som helst av k Övergångsfunktionen Fp, Xq berättar att vid läsning av alfabetet x flyttar vi från tillståndet p till staten q Antalet som sålunda bildas 11 i decimal ger resten 0 När vi är i tillstånd 2 och läser 0 flyttar vi till tillstånd 1, varför Dfa delas med 5 binära alternativ L Binary Options Live Signals Franco Om antalet bitar i binäret inte är delbart med 8 är det sista elementet i listan en bitsträng. Alternativskärmen stöds inte av spawnopt 5 Namnet awk kommer från initialerna till dess designers Alfred V Aho, Peter J Weinberger och Brian W Kernighan Den ursprungliga versionen av awk skrevs i 1977 Den dagen började jag övergången från statistiker till Unix-programmerare. Jag var upphetsad att prova min hand vid programmering i AWK Några dagar efter mitt inlägg fick jag en Vänlig e-post från Arnold introducerar sig själv Det fungerar för mig på Mac OS X Yosemite 10 10 5 med LibreOffice v5 1 2 2 med min specifika sökväg för binär soffice än att delas med 2 ett program som du kan använda för att välja specifika poster i en fil Och utföra operationer u Pon them. Permission beviljas att kopiera, distribuera och eller ändra detta dokument enligt villkoren i GNU Free Documentation License, Version 1 3 eller någon senare version publicerad av Free Software Foundation där de invariant sektionerna är GNU General Public License, med Front-Cover Texts är en GNU-handbok och med bakdäckstexten som i en nedan Dfa delbar med 5 binära alternativ På en av många resor till biblioteket eller bokhandeln på jakt efter böcker på Unix hittade jag den grå AWK-boken, Aka Han föreslog att vi delar design och algoritmer och bifogade ett utkast till POSIX-standarden så att jag kunde uppdatera Binary Options Candlestick Charts Us Om antalet bitar i binär inte är delbart med 8, är det sista elementet i listan en bitsträng Alternativskärmen stöds inte av spawnopt 5 Omständigheterna startade ett par år tidigare Historia om elektronisk futureshandel Detta fungerar för mig på Mac OS X Yosemite 10 10 5 med LibreOffice v5 1 2 2 med min specifika väg för t Han binär soffice än att vara delbar med 2 Jag jobbade på ett nytt jobb och märkte en unplugged Unix-dator som satt i hörnet Men ett par dagar senare körde det och jag var och den enda användaren Weinberger ss Enkelt programmeringsparadigm hitta ett mönster i ingången och sedan utföra en åtgärd som ofta reducerade komplexa eller tråkiga datapanuleringar till några rader kod. För 3 kan det finnas 3 tillstånd i DFA, var och en motsvarar resten 0, 1 och 2 Numret Så formad 1 i decimal ger resten 1 När vi är i tillstånd 1 och läser 0, flyttar vi till tillstånd 2, varför Hur beräknar vi övergången om decimalvärdet av binärbitarna hittills korsat intervallet k Denna artikel sammanställs Av Aashish Barnwal och granskad av Geeksfor Geeks team Övergångsfunktionen Fp, xq berättar att när man läser alfabetet x flyttar vi från tillståndet p till tillståndet q Det så bildade talet 11 i decimal ger resten 0 När vi är i tillstånd 2 och läser 0 , Vi flyttar till stat 1, varför Dfa delas med 5 Binära alternativ Infernal Affairs Hong Kong Online Trading Antalet så bildade 100 i decimal ger resten 1 När vi är i tillstånd 2 och läser 1, förblir vi i tillstånd 2, varför staten 0, vi läser 0, nya tillstånd 0 Eftersom det slutliga tillståndet är 0, numret är delbart med 3 Dfa delbart med 5 binära alternativ En kopia av licensen ingår i avsnittet GNU Free Documentation License Deterministic Finite Automat DFA kan användas för att kontrollera om ett nummer num är delbart med k eller Vi anser att Binär representation av num Omständigheterna startade ett par år tidigare. Vi anser binär representation av num och bygger en DFA med k-stater När DFA är byggd behandlar vi num över DFA för att få resten. Antag att vi vill kontrollera om en given Nummer num är delbart med 3 eller inte Det nya tillståndet kan erhållas genom att subtrahera k från dessa värden 2p eller 2p 1 där 0 Funktion för att bygga DFA för divisor k tomgångsförlopp int k, int Tabell 2 Huvudfunktionen som delar num med k och r Eterns återstoden int är delbar int num, int k. Tutorials with solutions. Foundations av sekventiella programs. Foundations vi vill förstå hur sekventiella program fungerar Vi vill veta hur vi kommer från programmet vi skriver till det program som kompilatorn kör. Sekventiella program som inte är trådgängade eller parallella. 11 uppdrag vardera med flera delar. Långt, mycket arbete - börja tidigt. due onsdagar klockan 17 på Marmoset. we kan använda C, C eller Racket - du kan läsa på webbplatsen för Saker att veta för att använda dessa språk i kursen. Anteckningar 25. du behöver minst 50 för mitten av 2 sista 3.Midterm datum tisdag 3 mars 2015 4 30-6 20 pm. Vi kommer att använda piazza. no krävs textbok. Vad händer när Du sammanställer och kör ett program. Vad är ett kompilator. hög nivå språk - kompilator - lägre nivå language. this är vanligt, men inte alltid fallet. mera allmänt. källa språk - kompilator - mål language. source program - kompilator - Målprogram motsvarande, för någon definition av ekvivalent . Varför behöver vi en kompilator - hjälpa människor att skriva code. easier för att folk ska förstå och program. leder du väljer rätt språk för jobbet du vill göra. Säkerhet - kompilator hjälper dig, låter dig veta om du gör dåliga saker. abstraktion - kan skriva program utan att förstå hur någonting fungerar. Varför behöver vi en kompilator - varför kan datorn bara springa källspråket direkt. Lågnivå språk är maskinvaruspecifik maskinberoende - optimerad för att fungera bra på specifik maskinvara - dock Källkoden är maskinoberoende. En närmare titt på kompilatorn. CS241-kompilatorn - inte nödvändigtvis sant för varje compiler. scanning normaliserar inmatning, t. ex. normaliserar whitespace - exempel kan vara ett om uttalande får symbolet IF. the första två stegen är den syntaktiska analysen exemplet monteringskoden lägg till 3 5 7 jr 31. notera Assembler är en specifik typ av kompilator som översätter mellan monteringskod och maskinkod. Vi kommer att vara kodning för hela processen. Binärt nummer. Bit 0 eller 1 Abstraktion av höga lågspänningar eller magneter. Byt 8 bitar, t. ex. 11001001.There finns 256 2 8 möjliga byte. Ordmaskin specifik gruppering av byte.4 eller 8 byte 32-bitars eller 64-bitars. Vi kommer att använda ett 32-bitars ord - det här är viktigt när vi genererar och monterar monteringskod. Nibble 4 bits Half En byte. Given en byte i datorns minne, vad betyder det till exempel 11001001.It kan vara ett tal Konventionellt i binärt är det 2 0 2 3 2 6 2 7 1 8 64 128 201. Det är ett osignerat värde Vänta , Hur representerar vi negativa tal. Simple-tillvägagångssätt-magnitud representation. Reserve fi Rst bit för att representera tecknet 0 betyder positivt, 1 betyder negativt - resten av bitarna är magnitude. eg 11001001 är ett negativt tal med storleksordningen 1001001 73 - så vårt värde är -73. För 8-bit kan det representera Siffror form -127 till 127.0 är både 00000000 och 10000000 - två representationer för noll behöver inte jämföras för NULL - inte bra. Annan nackdel - aritmetik är knepigt. Om vi måste positiva eller två negativa värden, gör det normala tillägget för magntiudes och använd Det gemensamma tecknet. Men om tecknen är olika Dra det mindre värdet från det större värdet och använd tecknet på det alltför komplicerade Not good. Negative numbers - better approach - 2s compliment. interpret nummeret som unsigned. if den första Bit är noll, sedan gjort. else, subtrahera 2 n.111 7 - första bit är inte 0 - subtrahera 2 3 - -1.101 5 - första bit är inte 0 - subtrahera 2 3 - -3.1100100 från tidigare är nu -55.To Få twos komplimangs negationen av ett n-bittal, subtrahera numret från 2 n. Alternativt f Läs bitarna 0-1, 1- 0 och lägg till en. Binär - Decimal. För 8 bitar ger detta -128 till 127.note -128 ingen negation eftersom 128 inte har någon representation. eg med 3 bitar 100 - 011 1 100 Vi får samma sak - ingen representation för dess negation. Only one zero. Arithmetic är klar Aritmetik är mod 2 n du kan bara lägga till dem som du brukar skulle. Base 16 0 9 och AF-fallet spelar ingen roll. Varje hex-siffran är 4 bitar, så 11001001 prenumeration 2 C9 prenumeration 16.subscipt 2 betyder att den är s i bas 2.omvänd binär till hex genom att ta 4 siffror bitar. eg 11001001 - bryt in till 1100 1011 - 1100 4 8 12 C 1001 1 8 9 - C9. Använd 0x som hex prefix, t. ex. 0xC9. Ge en byte hur kan vi se vilken tolkning som är korrekt unisnged, sign-magnitude, two complement. Vi kan inte riktigt veta. Vi behöver komma ihåg vår avsikt när vi lagrade byte. Men vänta Vi don T vet ens om det är ett tal. Det kan vara ett tecken - beror på vilken karaktär du använder. Vi kommer att anta en konvention ASCII amerikansk standardkod för Information Intercha Nge. what representerar 11001001 represent. number unisnged, sign-magnitude, two s compliment. it kan vara en character. bit representation - så vi vet inte vilken karaktär det är - vi ska använda ord fortfarande men med första bit 0.what Chracter är 01001001 I. skulle kunna vara address. random flags. instruction, eller en del av en våra instruktioner är 32-bitars. Vi kan inte riktigt veta att vi måste komma ihåg vår avsikt när vi lagrade byte. Maskin Språk - MIPS. Vad ser en instruktion ut. Vilka instruktioner finns det. Vi kommer att använda MIPS förenklade 18 olika 32-bitars instruktioner. Hårdvaran och datapath. The hjärnor av datorn. Control unit. Fetches och avkodar instructions. Coordinates iput och output. Dispatches till andra delar av datorn för att bära dem output. ALU Aritmetic och Logic Unit. Responsible för matematiska, logiska operationer och jämförelser. MIPS 32 Allmänna register. 0 är alltid 0. 30 och 31 är speciella enligt konventionen. Ett exempel på registeroperation. Lägg till innehållet i registren s och t och lagra resultatet i d. represented av d - s t.32 register, 5 bitar per register 2 5,3 register för en instruktion 15 bitar avsatt för register 17 bitars leftover för att koda operationen. Multiplikation ger 64 bitars resultat - första 32 bitar är i HI och andra 32 bitar finns i LO. HI och LO butiksresultat men du kan inte skriva till dem direkt - det finns ops att flytta värden av hög och låg. Jag kan också lagra Resten från division och LO kvotient. RAM - Slumpmässigt åtkomstminne. Detta är datorns främsta minne. Detta är en stor mängd minne som lagras bort från CPU. The data reser mellan CPU och RAM och bussen. Vi tänker på Bussen som 64 ledningar som ansluter de två komponenterna. RAM: n är bara ett stort utbud av n byte n.10 9 en Gigabyte. Varje byte har en adress som går från till n-1, men vi grupperar allt på ordens ordningsföljd , Så vi kommer att använda adresser delbara med 4 och varje 4-byte-block är ett ord. Words har adress 0x0, 0x4, 0x8, 0xC, 0x10, 0x14, 0x18, 0x1C, 0x20 etc. Moving data mellan RAM och CPU. Överför ett ord från en angiven adress till ett angivet register. Den önskade adressen går in i MAR-minnesadressregistret och går sedan ut på bussen. När det kommer till RAM, den därmed sammanhängande data skickas tillbaka på bussen och går in i MDR-minnesdatabasen. Innehållet i MDR flyttas till destinationsregistret. Stör precis som belastning, men i omvänd ordning. Hur vet datorn vilka ord innehåller instruktioner Och som innehåller data Överraskning Det gör inte. Det finns ett särskilt register som heter PC-programräknare som håller adressen till NEXT-instruktionen att springa. Med konventionen garanterar vi att vissa fasta adresser säger 0 innehåller kod och sedan initierar datorn till 0.Then Kontrollenheten körs hämt-exekveringscykeln. Hur utförs ett program. Det finns ett program som heter Loader, som sätter programmet i minnet och sätter PC till adressen till den första instruktionen i programmet. Vad händer när programmet Slutet. Vi n Eed för att returnera kontrollen till laddare PC är inställd på adressen till nästa instruktion i loader. Which instruktion är det. 31 kommer alltid att lagra rätt adress för att återvända till, så vi behöver bara ställa in PC till 31. Notera att användningen av 31 är convention. We kommer att använda hoppregistret kommandot jr för att uppdatera värdet på PC. hardware architecture. machine språk. main memory vs registers.32 register över allmänna ändamål. 31 returadress - vid start av program för att återvända till loaderadressen, bör våra program alltid avslutas genom att hoppa till den återvända adressen 31 med hjälp av hoppregistret kommandot jr. 30 vet vi inte ännu. PC - programräknare - håller adressen till nästa isntruktion att exekvera. Exempel lägg till 2 värden i registren 5 och 7, lagra resultatet i registret 3 och återvänd sedan. Exempel lägg till 42 och 52, butik Summa i 3 och returnera resultatet i register 3 och returnera sedan. xxd - cols 4.this kommandot visar hex code. xxd - cols 4-bits. adding bits-alternativet visar binärt. filstorleken är instruktioner 4 bytes. We kommer Börja skriva våra program inte i binär och hex, men med enkla mnemonics. There är en översättning tillbaka till den nödvändiga binära monteraren Varje monteringsinstruktion motsvarar en maskininstruktion nästan. Vi kommer att se föregående exempel. beq gå någon annanstans om två register är Equal. bne gå någon annanstans om två register inte är lika. Både instruktioner ökar datorn med ett visst antal ord framåt eller bakåt. Vad är värdet på PC innan filialen körs. Baserat på hämtnings-körcykel har PC redan Inkrementeras för att peka på nästa instruktion b För instruktionen har avkodats och exekverats. Därför är offset relativt följande instruktion. Ett annat kommandot slt - satt mindre än. A -1 om bc, en uppsättning till 0 otherwise. Example beräkna absolutvärdet av 1, lagra det i 1 och returnera. För att göra detta måste vi använda grenar och hoppar för att modifiera PC. how om vi börjar med c-versionen Om x 0 x - x. Exempel summa heltalna 1 13, lagra i 3 och returnera c. What om vi inte kan använda loopkonstruktioner - goto. Branch offset -5 eftersom PC pekar på nästa instruction. inefficiency i kodinställning 1 till 1 På varje iteration av loop. Last Time Assembly Programming. sum heltal 1 13, lagra i 3 och returnera. Program med RAM. lw är belastningsordet instruktion. laster ett ord från RAM till ett register. syntax lw a, jag b. loads ordet vid MEM b i till a. B är basregistret, jag är offset. sw är butiksordet instruktion. fördelar ett ord från register till RAM. syntax sw a, jag b. stores ordet vid a till minnesplatsen MEM b i. Exempel 1 håller adressen till En matris och 2 håller längden på matrisen Hämta elementet med index 5 och lagra det i register 3. Nu gör vi det igen, men mer abstrakt. I det här fallet är indexet inte känt. Vi behöver. mult multipliceringsinstruktionen . Eftersom multiplicering av två 32-bitars siffror kan resultera i ett 64-bitars nummer lagras resultaten i två specialregister hi och lo. syntax mult a, b. div delningsinstruktionen. Kvotienten ströms i lo och resten Lagras i hi. syntax div a, b. mfhi och mflo flytta från HI och flytta från LO instructions. move värdena från hi eller lo respektive till ett givet register. syntax mfhi d, mflo d. Etiketter återgår till loop. recall slingan vi hade Summa heltalet 1 13, lagra i 3, sedan return. the lis kommandot var inom vår slinga, som kan flyttas utanför. Det här är bra, men nu har bne i slutet en Felaktig omedelbar bör vara -3.In nester loopar är det här en mardröm Detta beror på att vi använde explicit grenning, att lägga till avlägsna instruktioner innebär att vi måste ändra grenförskjutningar. Istället tillåter monteraren märkta instruktioner. Syntax är etikettinstruktion. Monteraren associerar det Namnetikett med instruktionen. När monteraren ser en etikett beräknas skillnaden mellan PC och topp, uttryckt i words. eg ovanför etikett-PC 4 0x14 -0x20 4 -0xC 4 -12 4 -3. Nu kan vi skriva om Slingans exempel med en etikett. Procedurer Procedurer funktioner i montering gör det möjligt för oss att återanvända kod. Vi har två problem att lösa. Kall och återvända Hur överför vi kontrollen till och från proceduren, parameterns passning, etc. Registers Hur ser vi till att procedurer inte skriver över viktiga Data. Vi kommer att börja med det andra problemet. Vi kunde reservera register för proceduren f och några för huvudlinjen utan överlappning, men om förfaranden anropar andra förfaranden eller själva, kommer vi sluta registrera. Istället tillåter vi förfaranden att göra Vad som helst som de vill ha med register, så länge det sätter dem tillbaka till sina ursprungliga värden vid utgången. Så måste vi använda RAM Hur håller vi procedurer från att använda samma RAM. För att förhindra att procedurer använder samma RAM-adresser använder vi en Stapelpekaren Stackpekaren finns i registret 30, vilket är det andra begränsade registret som vi tidigare diskuterat. Vi fördelar allmänt minne från toppen eller botten av ledigt RAM, och på något sätt håller reda på vilket RAM som inte används. Maskinen hjälper oss ut 30 är initialiserad av lowader till precis förbi det sista ordet av minne. Vi använder 30 som ett bokmärke för att separera använt och oanvänd RAM, om vi allokerar från botten. Vi använder RAM som en stapel, går upp på funktionen Samtal och nedåt på returns. Our strategi trycker på varje registern registren som den ska använda på stapeln och dyker upp ursprungsvärdena från stapeln när den är färdig 30, stapelpekaren innehåller adressen till toppen av stapeln. Template for Procedures. Example Antag att en funktion f endast använder 2 och 3. Varför räddar vi registren och justerar sedan stapelpekaren. Eftersom en gång registeren sparats kan vi använda en för att hålla stapeljusteringen vlaue. Assembly programmeringsprocedurer. Maskinen har bara 32 Register Hur kontrollerar vi att viktiga data inte skrivs över. Kod att ringa och return. when vi återvänder från ett förfarande måste vi ställa in PC till linjen efter jr HÄR Hur vet vi vilken adress som är. jalr-kommandot är hoppa och länkregister. instruktionen är precis som jr men Det ställer också in 31 till adressen till nästa instruktion, dvs PC. assembly-kod ser nu ut. För att återvända till lastaren måste vi spara 31 på stapeln först och sedan popa den före retur. Det enklaste alternativet är att skicka tillbaka Parametrar via register. Men det gör det komplicerat med hänsyn till hur man registrerar parametrar. Om detta är gjort måste procedurförfattaren dokumentera sin kod så att kunden vet vilka register som ska skickas bakåt och framåt. Det största problemet är Att det bara finns 32 register Ett bättre alternativ tryck parametrarna på stapeln Detta kräver också dokumentation. Fullkodsexempel - Vi skriver en funktion som summerar de första n numren. Ingen extra maskiner behövs. Om du registrerar, parametrar och stackenHanteras korrekt, kommer recursion att fungera. Input och Output. Input stöds inte. Hantera det. Output MIPS tillhandahåller en plats 0xffff000c som kallas videominne, för att lagra ord där minst signifikanta byte kommer att skrivas ut till screen. example print CS följt av ny linje. Assembler A Assembler är ett program som översätter monteringsnummer till motsvarande maskinkod. Syskod kod lägg till 1, 0, 0 - assembler - maskinkod 0100010.Any översättningsprocess omfattar två steg. analys förstå vad som menas med källsträngen. syntesutgång Motsvarande målsträng. En monteringsfil är bara en ström av tecken en textfil. Steg 1 grupptecken i meningsfulla tokens. Exempelvis etiketter, hexnummer, ord i ordalydetal, register etc. Denna del har gjorts för oss vi kommer att prata Om det i mer detalj. e g for the C starter code, each token is an instance of the token class. Step 2 Group tokens into instructions, if possible analysis. Step 3 Output equivalent machine code synthesis. If tokens are not arranged into sensible instructions, output ERROR to standard error. Advice there are many more wrong configurations than right ones for an assembly file. For example, the instructor beq 1, 0, abc would generate a sequence of token kinds ID REGISTER COMMA REGISTER COMMA ID. Biggest problem with writing assembler How do we assemble. we can t assemble this because we don t yet know what abc is The solution we will scan through the program twice. Pass 1 group the tokens into instructions and record the addresses of all labelled insturctions - a symbol table which is conceptually a list of name, address pairs. A line of assembly can have more than one label. Pass 2 Translate each insctruction into machine code If an instruction refers to a lable, look up the associated address in the symbol table. Our assembler should ouptut the assembled MIPS to stdout, and we should ouput the symbol table to stderr. jalr for call. jr for return. Assembler 2 passes assembly code - lexer given to us - tokens - pass 1 - symbol table intermediate representation - pass 2 - machine code. Two passes Pass 1.group tokens into instructions and build symbol table look at the assembly trace above from end of last class. to find the addresses, it s easiest if you write them in beside each line of assembly. translate each instruction. e g lis 2 - 0x00000104 13 - 0x0000000d. look up top in symbol table. calculate top-PC 4 0xC-0x20 4 12-32 4 -20 4 -5.we get 0x1440fffb. to negate a two s compliment value, flip the bits and add one. To assemble bne 2, 0, top top - -5 , we look at 0001 01ss ssst tttt iiii iiii iiii iiii. opcode 000101 5.first reg 2 00010.second reg 0 0000.Problem we need to assemble the 6 bit opcode, the two 5-bits of regiters and the 16 bits of immediate value into a 32-bit instruction How. unsigned int instr. racket arithmetic-shift 5 -26.problem -5 0xfffffffb, we only have room for 16-bits. bit-wise AND two 1s give a 1, anything else gives 0.when we bitwise-and with a 1, the input is unchanged when we bitwise-and with a 0 the result is 0 Thus we an use it to turn bits off. when we bitwise-or with a 1, the result is 1 when we bitwise-or with a 0 the input is unchanged Thus we an use it to turn bits on. To fix -5, we can do a bitwise-and with 0xffff.-5 0xffff 0xfffb. This turns off the bits more significant than we need only keep the last 16 bits. Unfortunately we output 339804155, which is the decimal representation and is 72-bits This is bad When we print an int, it figures out the digits and then prints them If we print a char, we print out the ASCII code exactly Unfortunately, chars are only 8 bits, we print the fb of 1440ffffb which was desired so we convert instructions to 4 chars. in racket use write-byte and, for example, bitwise-and -5 xfff. It is possible to create a solution using unions and bitfields It is not as portable as the previous solution, but very elegant. Error checking - include the string ERROR somewhere in the error statements In Racket - error ERROR. The Loader Let s start by writing an operating system. the star is essentially a loader and do this. The 0S is also a program Where does it sit in memory Other progams may be running as well Where are they in memory And more generally, there may be other code in memory e g libraries. We can choose a different starting address for programs at assembly. BUT then how does the loader know where to load them What if two addresses are the same. We cannot load programs anywhere Labels may resolve to the wrong address or bne beq. The load will need to somehow fix id --- we add. the program is going to be loaded at. id represents an absolute address. word constant this is fine, we do not need to fix it. What about branches with an id - no, because the assembler calcualtes a relative offset based on PC, so relocation is unnecessary. Tips for Marmoset. Refer to the MIPS assembly reference shet. User specification to create your own tests. Can use to compare against - your assembler shoud give the same output as. Loader - we cannot assume our code will always be loaded at a fixed address e g 0x00 Why. There might be other programs or code in memory. We have been assuming our code is always loaded at 0x00 If this assumption no longer holds, what breaks Labels. which instructions need to be fixed The loader will somehow need to fix. id need to add a constant - id references an absolute address. consatnt do NOT relocate. what about branches. no, because the assembler calculatees a relative offset based on PC, so relocation is unnecessary. everything else including bne, beq do not relocate. now we have OS 3 0.Problem again - this will not work. Assembled file is a stream of bits - how do we know which came from a with an id and which are instructons - We cannot We need help We need more info from the assembler. We note that the output of most assemblers is not pure machine code it is known as object code An object file contains binary code, but in addition contains any auxiliary information about the file that will be needed. We use object file formal MERL MIPS Executable Relocatable Linkable. Note that this is made up for CS241, so do not try to research it. Inside an object file. the code in binary. which lines addreses need to be relocated because they are id instructions. other stuff to be added later. The headers has a cookie to let us know it is a MIPS file, and then the lengths of t he whole fille and the code. The format code is always 1 for the relocation entry, and the associated address is the address in the MIPS code of the relocatable word. Header is always of size 12 In our example on the slide, code is size 32 and symbol table is size 16.We note that 0x10000002 is MIPS for beq 0, 0, 2, ie a command to skip header, so that MERL files can be executed as ordinary MIPS programs if loaded at 0x00.We also want the assembler to generate relocatable object code like we did by adding relocs in the example which is which we will get eventually. Relocation Tool. input merl file and a relocation address. output non-relocatable mips file with merl header and footer removed, ready to load at address. Loader Tools. both of these take an optional 2nd argument, which is the address to load the mips file. Example Load at 0x10000.we note relocation is typically done by the loader - we do it this way as a visualization of the process. Loader Relocation Algorithm. What we came up with last class works in general but can still be broken. If we jump to a consatnt address or do math on a label, we are in trouble However, this is bad practice. This is a shift in the role of labels when introduced they were a convenience, but now they are a necessity Essentially, if you want relocatable code, use labels. We often find it convenient to split MIPS programs into smaller units, for the same reason as with higher-level languages There is a major issue How can an assembler resolve a reference to a label in a different file. We have and with shared labels. Solution to assemble, concatenate the files and then assemble. cat java. This works, but it doesn t save us any work if I make a small change in but is huge. Also, I may only want to give someone the binary not the source We want to compile first then link after. Solution 2 Can we assemble first and then cat. header binary reloc table. No, they are all assembled to start at address 0, but the second two would need to relocatable. Thus w e need to assemble to MERL, not just MIPS However, if we cat two MERL files, we don t get a MERL file. Solution we need a tool smarter than cat. It must be able to understand MERL files and put them together intelligently. Such a tool is called a linker. And yet what should an assembler do with references to lables it cannot find. We will need to change the assembler. Aside what happens conceptually when I run g. asm o kind o lexer o -- assembler outpiler generates asm o, kind o, lexer o. o extention used to represent object files. linker combines the o files into an executable. Import and Export. We lose a valuable error-check. If a label is not defined, then our old assembler assumes an error. but now we just expect to find it within a linked-in file. How can an assembler tell between errors and intentional behaviour. The new assembler directive. id tells the assembler to ask for id to be linked in This does not assemble to a word MIPS. if we have a label abc, and that label does not occur, and no abc, then we have an error. Format code 0x11 means External Symbol Reference ESR. we need the name of the symbol, the address of use where the blank needs to be filled in. ESR entry contains. word 2 location of where symbol is used. word 3 length of symbol in chars n. word 4- 3 n ASCII chars in the symbol name one word per char. example ESR entry. How do we know which vsion of abc to use We can t assume labels won t be duplicated. makes id available for linking - this does not assemble to a word of MIPS. tells the assembler to make an entry in the MERL table. MERL entry tpe External Symbol Defintion ESD. ESD entry contains. word 2 address the symbol represents. word 3 length of symbol name n. word 4-3 n ASCII name. example ESD Entry. MERL now contains code, relocator addresses, addresses and names of ESR and EDR entries. Note that instructions referring to external symbols must also be relocated. Augment MERL files to help linker. MERL Header Code Relocation and External Symbol Table. Symbol table contains relocatable addresses, adresses and names of ESR imports and ESD exports. The linker Given two MERl files - how do we link them What are the steps. a - we want to subtract the header from m2 and then push forward by length of m1 code a relocate by a add a to every address in. resolve symbols and check for duplicates in exports - ERROR. if AND 0 then ERRROR for all addr1, label in do if exists addr2, label in then - addr2 remove addr1, label from add addr1 to for all addr2, label same. merge symbol tables. imports and exports and relocates and. output linked program with new header. output MERL cookie output totalCodeLen total imports, exports, relocates 12 output totalCodeLen 12 output output output imports, exports, relocates. Assembly language has a simple structure, is easy to parse, straightforward and unambiguous. Now we turn our attention to the compiler Source program - compiler - assembly code equivalent meaning. First step of our compiler source program - scanner lexical analysis - tokens. A high-level language is a more complex structure It is harder to recogn ize, and we have no single translation to machine code To convert to machine language we use a compiler. How does a compiler recognize if a given program is valid Note we re not asking if it s logically correct a much harder problem , but just whether the sequence of characters forms and allowed program based on the specifications of the language. Eventually, once the compiler can recognize whether a program is valid, how do we translate the program into an equivalent program in the target language usually lower-level. Is this a valid c program. what about the same program with a b 5 s. no it will be parsed as a b which is invalid. nope, same interpretation as above. How can we handle this complexity. We want a formal theory of string recognition - general principles that work in the context of any programming language. alphabet finite set of symbols e g typically denoted. String word finite sequence of symbols from a, abc, cbca, etc. Length w of symbols in w. Empty string is the empty string, not a symbol 0.Language a set of strings e g , b, aab, aaaab. is the empty word, while is the empty language. is a singleton language containing only the empty word. How can we automatically recognize whether a given string belongs to a given language This is mindblowing, and depends on how complex the language is Since the answer is dependent on language complexity, we will charactertize languages according to how hard recognition process is we will create classes of languages based on the difficulty of recognition This is based on Chomsky Hierarchy. Finite easy. Regular not so easy. Context-free pretty decent. Context-sensitive challenging. Recursive difficult. anything-else impossible. We want to study high-level languages at as easy a class level as possible, and move down when we have to. These languages have finitely many words. Write code to answer w L such that w is scanned exactly once, without storing previously seen characters. We can recognize a word by comparing each word in the finite set of words - but we won t use that approach. started compi ler. formal languages. chomsky hierarchy. context sensitive. very losely, recursive means that there is an algorithm or program to determine whether any given input is a member of the language. An abstraction of this program. Circles are states - configurations of the program based on input seen. The double circles are accepting if the program halts there. Example - mips operators. Since programming langagues don t usually admit only a finite many programs, finite languages are not much use. These languages are built from finite languages, but also support the following operations. Example show that is regular. This syntax is very tedious We have Regular Expressions. Question - is the language C regular. We have IDs a-zA-Z. A C program is a sequence of tokens, each of which come from a regular language. How can we define which sequences of tokens are valid We don t know yet. Thus, our answer is maybe. Can we recognize arbitrary languges automatically. Can we harness what we learned about recognizing fini te languages LOOPS. These machines are called Deterministic Finite Automata DFAs. Always a start state. For each character in the input follow the corresponding arc to the next state. If in an accepting state when input is exhausted, accept - else reject. What is missing. What if there is no transition Consider the ab example - what if our input is ab If we fall off the machine, reject More formally, an implicit error state exists all unlabelled transitions go there An error state has an all input loop back to itself and is non-accepting. Example String over with an even number of a s and an odd number of b s. Formal definition of DFA a DFA is a 5-tuple , Q, q0, A, , where. is a finite non empty set alphabet. Q is a finite, non-empty set states. q0 is an element of Q start state. A is a subset of Q accepting states end states. Qx - Q Transition function state and input symbol and gives next state. consumes a single character of input. we can extend to a function that consumes an entire word. Thus, a DFA, M , Q, q0, A, accepts a word w if q0, w is in A. example from before. Last time Regular Expressions. Handy to know precedence highest to lowest. Example a bc is a b c. A DFA, M , Q, q0, A, accepts a word w if q0, w is in A. If M is a DFA, we denote L M the language of M , the set of all words accepted by M L M. L is regular iff L L M for some other words, the regular languages are accepted by DFAs. Proof we will prove this later. Implementing a DFA. Unfortunatley this is very tedious Instead, we could use a lookup table see provided assembler starter code of states in columns and characters in rows - where they intersect is next state. Currently, our DFA takes an input string and returns yes no whether the given string is in the language However, it is possible to add an output facility to a DFA, resulting in a transducer. DFAs with actions can attach computation to the arcs of a DFA For example, consider L , where we compute the value of the number. sorry for horrible quality. another possible action would be emit a token - here we emit the current value of our number. Non-Deterministic Finite Automata What do we gain by making our DFAs more complex e g L w ends in abb. What if we allowed more than one arc edge with the same label from the same state. The machine choses one this is non-deterministic. We can think of it as magic, that it knows where it goes - or we can think of it as trying every path and see if there is any path that ends in an accepting path, then it accepts. We will accept if some set of choices leads to an accepting state Returning to our example.- start - a - - b - - b - start loops back to itself with a and b. The machine guesses to stay in the first state until it reaches the final abb, then transitions to accepting. NFAs are often simpler than DFAs. Formally NFA is a 5-tuple , Q, q0, A., Q are finite non-empty sets alphabet, states. q0 start and A subset of Q accepting. relation - Qx -- subsets of the powerset of Q 2 Q. This is the powerset of Q, which makes it non-deterministic The powerset is the set of all subsets of Q includes the empty set and Q. We want to accept if some path through the NFA lead to an accepting state, and reject if no such path exists. for NFAs sets of states x - sets of states. P, empty P, where P is a set of states. P, cw union of q, c for all q in P w. And we accept if, w union A 0. NFA Simulation Procedure. work with the following NFA, we will simulate baabb. BUT WAIT I am adding the right column to the table above as we speak If we give each set of states a name, and call those states, every NFA becomes a DFA For example. note if we draw this it looks just like our DFA from before. Holy cow, we have a DFA because D contains an accepting state. Consider L U with an even of a s We can draw an NFA. The DFA is much harder to produce Let s do a trace. Now we build the DFA via the subset construction. Accepting state are any states that includes an accepting state from the original NFA Every NFA hs an equivilent DFA, and NFAs recognize the same class of languages. What if we let ourselves change state without consuming a character We call these transitions we label the arrow as. This is a free pass to a new state without reading a character. This makes it easy to glue smaller automa together. Revisiting the abov e example. By the same renaming trick as before ie the subset construction every - NFA has an equivilent DFA Thus, - NFAs and DFAs recognize the same class of languages. Yes, DFAs and NFAs are finite state machines and the class of languages accepted by FSM are regular languages. Proof of Kleene s theorem one way. L is regular if L L M for some DFA M. If we can find an - NFA for every regular expression, then we have proved one direction of Kleene s theorem. The below pictures show empty languages, languages, single caracter, alternation, concatenation, repetiton. Thus every regular language has an equivalent NFA, which has an equivalent DFA and the conversion can be automated. Is C a regular language. C keywords, identifiers, literals, operators, comments, punctuation. These are all regular languages, and sequences of these are also regular, so we can use finite automata to do tokenization scanning, lexical analysis. Ordinary DFA can only tell us if a word is in a language We need something that takes an input string w, breaking w into w1,w2 wn such that each wi is in L and then output each wi. Consider L is regular. Let ML be the DFA that recoginizes L Then the second representation M which is a nonempty sequence of tokens is NFA modified from the NFA for ML - using t he rules from above for. We can add an action to each each - move such as output a token Our machine is non-deterministic - moves are optional. The question does the current setup guarantee a unique decomposition w w1 w2 2n The answer is no. Consider just the portion of the machine that does IDs.- --a-zA-Z-- --a-zA-Z0-9-- back to ending state. output token from ending state back to start state. The input abab could be interpreted as 1,2,3 or 4-tokens. How can we fix this We could always return the longest possible next token However, this can still fail. Consider L , w aaaa. If we take the longest possible token, we take aaa first and then we are stuck. However, we could have tokenized the string successfully as aa and aa. Oh well It would be bad to design a programming language like this. But wait many of the languages we use are designed like this. Remember the example when we started. c a b - a b NOT a b. Again from out example, c a b - a b which is invalid. But, a b would be valid - but that s not what the compiler does. Another example from c. vector vector v. c treats the like the bitshift operator instead of two closing angle brackets We have to trick the scanner. vector vector v. Fixed in c 11. Maximal Munch Algorithim. Simplified Maximal Munch as above, but if we are not in an accepting state, when no transition possible, then we ou tput an error don t backtrack. Our identifier must start and end with a letter and may contain a single. We also accept operator. For input ab. we find a valid start state, then b, and then -, but we cannot scan past this point since no further action is possible. Thus we would go back ab since it was the last valid point, and then continue from there. THe SMM algorithm would simply find an error but in practice this is usually sufficient. Note that if we have L we show it s regular by describing it with a regular expression - using only operations in regular expressions that we talked about - here it s aa. Scanning algorithm - Maximal Munch vs Simplified Maximal Munch. difference - no backtracking. Now consider alphabet of brackets. Can we build a DFA for L. Each new state lets us recognize one more level or nesting, but no finite number of states recognizes all levels of nesting, and a DFA must have a finite number of states. tokens Parsing syntactic analysis parse tree. what is required. Given a formal syntax specication, the parser verfiies whether the incoming tokens have a valid syntax confirming to the specifications and outputs a parse tree to allow semantic analysis in the following step. This cannot be done with regular languages, so we move to the next class in the Chomsky Hierarchy. These are languages which can be described by a context-free grammar a set of rewrite rules. Following the balanced paranthesis example. a word in the language surrounded by S - S. the concatenation of two words in the language S - SS. The shorthand for this is S - S SS. Example show how this system generates. The notaton we have used. means derives. a - means can be dervied from a by one application of a grammar rule. we formally define a context-free language to consist of. an alphabet of terminal symbols. a finite non-empty set N of of non-terminal symbols, such that N union null set. we often use V vocabulary to denote N U. a finite set of P productions, where productions have the form A - , A in N, in V. an element S in N as the start symbol. In our parentheses example, we have that terminal symbols are , non-terminal symbols are , and S is our start symbol. a, b, c are elements of characters, terminals. w, x, y are elements of words. A, B, C S are elements of N non-terminals. S is the start symbol., , indicate elements of V. We write A if there is a production A - in P. means that delata1 1 n for n 0.Definition L G , where L G is the langauge specified by G. Note that this is a set of strings of terminals only A language L is context-free if L L G , for some context-free grammar G. Example Palindromes over. S - a b c aSa bSb cSc. We can also define this as. S - aSa bSb cSc M. Show that S abcba. S aSa abSba abMba abcba. This proccess is called a derivation. But we could have speciiced this with a regular expression. Show that S a b. S S op S a Op S a S a b. alternatively S S op S S op b S b a b. Note that we have a choice over which symbmol to expand first. Leftmost Derivation always expand leftmost symbol first. Rightmost Derivation always expand rightmost symbol first. We are showing too much information, since this information doesn t matter and this can get very long We can express them naturally and succinctly as a tree stucture. Example consider abcba. For the leftmost derivation, there is a unique corresponding parse tree and vice versa. Midterm - we will provide. MIPS reference sheet. MERL file format spec. ASCII chart. CFL context free languages CFGs. In a derivation, one non-terminal in the current string is selected and replaced or rewritten using RHS of a production rule for that non-terminal. e g production rules. What is the RE for this langugae. Leftmost derivation for a bxc S S Op S a Op S a S a S Op S a b Op S a b x S a b x c. Or, expand the first S first S S Op S S Op S Op S a Op S Op S a S Op S a b Op S a b x S a b x c. These correspond to DIFFERENT parse trees A grammar for which the same word has more than one distinct parse tree is called ambiguous The grammar we defined above is ambiguous If we only care about whether a string is in the language, the ambiguity doesn t matter. As compiler writers we want to know why a word is in a language, so the derivation matters Why does it matter The shape of the parse tree describes the meaning of the word, so a word with an ambiguous parse may have multiple possible meanings. In the first tree, bxc is grouped more tightly, and in the second a b is grouped So it could mean a bxc or a b xc. END MIDTERM CONTENT. What do we do about this. use heuristics precedence to guide the derivation proccess. Make the grammar unambiguous. Then we have a strict left to right precedence. new producton rules that prevent uncessary brackets. new derivation NOTE use single arrows for production rules and double arrows for derivation. If L is context-free, is there always an unambiguous grammar. No There are ineheritently ambiguous languages that only have ambiguous grammars. Can we construct a tool to tell us if a grammar is ambiguous No This is undecidable There is provably no algorithm to solve this problem The equivalence of grammars is also undecidable. We need to build a recognizer - what class of programs recognize CFLs. regular languages are represented by DFAs, a program with finite memory. Context-free languages must recognize infinite memory, they are represented by NFA with a stack. But we need more than a yes no answer We don t want to have a program and the compiler just say yes or no. We ca n use grammars to specify the syntax of a language For example, a while loop. Parse trees allow us to understand the program We need to know the derivation parse tree and error diagnosis The problem of finding the derivation is called parsing How do we use grammar to go from source program to a parse tree. We have two choices. forwards - top down - start at S, work to w. backwards - bottom up - start at w, work to S. How can we derive S abywx We want an algorithm to generate the derivation. Consider a leftmost derivation. What are we doing here Match input symbols startng from left until you encounter a non-terminal Replace non-terminal with RHS of a rule and continue matching more formally. Use the stack to store s in reverse and match against characters in input. Invariant the consumed input plus the reverse of the stack contents is equal to i Sean calls these left right sentential forms - for leftmost rightmost derivations. For simplicity, we will use augmented grammars for parsing We invent two new symbols BOF and EOF and a new start symbol S. say w BOF a b y w x EOF. Let s codify this. When the top of other stack is a terminal pop and matched against the input. when TOS top of stack is a non-terminal A, pop A and push reverse , where A - is a grammar rule. accept when stack and input are empty. brute force try all combinations until one works - this is inefficient. we want a Deterministc Procedure with no backtracking. our solution is to use the next symbol of input lookahead to help decide. Construct a predictor table - given a non-terminal on the stack and an input symbol, tell us which production to use Empty cells are errors. The rest of the table can be used for descriptive error mesesages Parse error at row, col expecting one of symbols where the predictor table does have entries. What if a cell contains more than one rule The method breaks down. This grammar is called LL 1.L left to right scan of input. L leftmost derivations produced.1 1 symbol of lookahead. top down parsing - starting with s ending at w - recall that triangle diagram. We can automatically compute the predictor table. Predict A, a - rules that apply when A is on the stack and a is the next input character. First , in V is the set of characters thata can be the first letter of a derivation starting from. For example First AyB. So Predict A, a.However, this is not quite right What if A. Then a might not come from A, but from something AFTER A. We missed something - what if there is more than one production with the same LHS How do we know which one to pick. So, Predict A, a U. Nullable true if , false otherwise. Follow A the set of terminal symbols that can come immediately after A in a derivation of S. In our example Follow Aputing Nullable - Nullable true if .
Comments
Post a Comment