-- Author: Christopher Waid -- Course: CIS310 010 -- Assignment: #2 -- Due Date: June 15, 2007 -- Filename: lookup.adb -- Purpose: looks up the enum_token with Ada.Text_Io; use Ada; package body LookUp is procedure LookUpSymbol (Token : in String; Symbol : out Integer) is -- Function name: LookUpSymbol -- Description: create token -- Parameters: String Token INPUT data input -- Integer Symbol OUTPUT token number -- Return Value: none type Enum_Token_Type is (ADDsym,BEGINsym,COLONsym,COMMAsym,DECsym,DIVIDEsym,ENDsym, EQUALsym,IDsym,INTsym,LPARANsym,RPARANsym,MINUSsym, MULTIPLYsym,PROGsym,READsym,SEMICOLONsym,WRITEsym,REALsym, INTLITsym, OTHERsym); package Class_IO is new Ada.Text_IO.Enumeration_IO(Enum_Token_Type); use Class_IO; i : Integer :=1; len_token : Integer :=1; begin while len_token < 35 and Token(len_token) /=' ' loop len_token:=len_token+1; end loop; if (Token(1..4) = "END.") and (len_token = 5) then Symbol := Enum_Token_Type'Pos(ENDsym); return; end if; i:=1; while i < 35 loop if Token(i)='.' or Token(i)='!' then Symbol := Enum_Token_Type'Pos(OTHERsym); return; end if; Text_IO.Put(Token(i)); i:=i+1; end loop; Text_IO.New_Line; i:=1; --creat tokens case Token(1) is -- this checks for numbers when '0' .. '9' => while i < 35 loop case Token(i) is when '0'..'9' => null; when 'a' .. 'z' => Symbol := Enum_Token_Type'Pos(OTHERsym); return; when 'A' ..'Z' => Symbol := Enum_Token_Type'Pos(OTHERsym); return; when others => null; end case; i:=i+1; end loop; Symbol := Enum_Token_Type'Pos(INTLITsym); when others => -- this checks everything else if Token(1) = ',' then Symbol := Enum_Token_Type'Pos(COMMAsym); elsif Token(1) = ':' then Symbol := Enum_Token_Type'Pos(COLONsym); elsif Token(1) = ';' then Symbol := Enum_Token_Type'Pos(SEMICOLONsym); elsif Token(1) = '(' then Symbol := Enum_Token_Type'Pos(LPARANsym); elsif Token(1) = ')' then Symbol := Enum_Token_Type'Pos(RPARANsym); elsif Token(1) = '*' then Symbol := Enum_Token_Type'Pos(MULTIPLYsym); elsif Token(1) = '+' then Symbol := Enum_Token_Type'Pos(ADDsym); elsif Token(1) = '=' then Symbol := Enum_Token_Type'Pos(EQUALsym); elsif Token(1..7) = "PROGRAM" then Symbol := Enum_Token_Type'Pos(PROGsym); elsif Token(1..5) = "BEGIN" then Symbol := Enum_Token_Type'Pos(BEGINsym); elsif Token(1..3) = "INT" then Symbol := Enum_Token_Type'Pos(INTsym); elsif Token(1..5) = "WRITE" then Symbol := Enum_Token_Type'Pos(WRITEsym); elsif Token(1..4) = "READ" then Symbol := Enum_Token_Type'Pos(READsym); elsif Token(1..3) = "DEC" then Symbol := Enum_Token_Type'Pos(DECsym); elsif Token(1..1) = "#" then Symbol := Enum_Token_Type'Pos(OTHERsym); elsif Token(1..1) = "@" then Symbol := Enum_Token_Type'Pos(OTHERsym); elsif Token(1..4) = "REAL" then Symbol := Enum_Token_Type'Pos(REALsym); else Symbol := Enum_Token_Type'Pos(IDsym); end if; end case; end LookUpSymbol; end LookUp;