1 / 44

MINI-BASIC Lexical box

MINI-BASIC Lexical box. จัดทำโดย 1. นายจักริน ชวชาติ 4205116 2. นายชานนท์ โชคธัญญาวัฒน์ 4205150 3. นายทรงศักดิ์ จ.เจริญพานิช 4205175 4. นายสราวุธ วิริยะวณิชกุล 4205432 5. นายเอกชัย ฟังนิยมอมมตะ 4205523. MINI-BASIC Lexical box. Introduction. MINI-BASIC.

Download Presentation

MINI-BASIC Lexical box

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MINI-BASIC Lexical box จัดทำโดย 1. นายจักริน ชวชาติ 4205116 2. นายชานนท์ โชคธัญญาวัฒน์ 4205150 3. นายทรงศักดิ์ จ.เจริญพานิช 4205175 4. นายสราวุธ วิริยะวณิชกุล 4205432 5. นายเอกชัย ฟังนิยมอมมตะ 4205523

  2. MINI-BASIC Lexical box Introduction

  3. MINI-BASIC MINI-BASIC เป็นโปรแกรมแบบเรียงบรรทัดซึ่งจะเริ่มต้นด้วยตัวเลข โดยที่ตัวเลขเหล่านี้เราเรียกว่า หมายเลขบรรทัด(Line number) หมายเลขบรรทัดมีไว้เพื่อใช้ในการระบุบรรทัดแยกบรรทัด ส่วนที่เหลือนอกจากหมายเลขบรรทัดเราเรียกว่า คำสั่ง(statement) หมายเลขบรรทัดเป็นตัวช่วยบอกลำดับของคำสั่งที่ถูกประมวลผล(execute) ให้เป็นไปตามลำดับของหมายเลขบรรทัดนั้น ยกเว้นถ้าคำสั่งนั้นมีคำสั่ง เช่น GOTO , IF, FOR,NEXT,GOSUB และ RETURN และเมื่อ compiler เจอช่องว่างจะไม่สนใจ ดังนั้นเราสามารถเพิ่มช่องว่างเพื่อความชัดเจนได้

  4. ตัวเลข แบ่งออกได้ 2 ชนิดคือ 1. ลำดับของเลขฐานสิบ จะมีจุดทศนิยมหรือไม่มีก็ได้ และมีเครื่องหมายอยู่ข้างหน้าหรือไม่มีก็ได้ เช่น 3.4715 , -1234 , 2 2. ลำดับของเลขฐานสิบ เหมือนดังข้อ 1. แต่จะตามด้วยสัญลักษณ์ E และตามด้วยลำดับของเลขฐานสิบซึ่งมีเครื่องหมายหรือไม่มีก็ได้ เช่น 1234E - 11 , 12.34E - 9 , .00000001234E0 ตัวแปร ตัวแปรจะแสดงด้วยอักษรตัวเดียวหรืออาจจะเป็นตัวอักษรตัวเดียวแล้วตามด้วยตัวเลขหนึ่งตัว เช่น A , X , Y1 , E3 , Q0

  5. นิพจน์ทางคณิตศาสตร์ นิพจน์ทางคณิตศาสตร์มีไว้เพื่อการคำนวณค่า ซึ่งใช้ตัวเลข ตัวแปร และตัวกระทำ(operator) ทางคณิตศาสตร์ 5 ตัว คือ + , - , * , / รวมทั้งวงเล็บเปิดและวงเล็บปิดมาประกอบกัน นิพจน์ทางคณิตศาสตร์ตัวกระทำ 2 ตัวไม่สามารถอยู่ติดกันได้ตัวอย่าง ของ unary operator- A + B , - (A*B ) , C* (-A*B ) ตัวอย่าง ของ นิพจน์ทั่วๆไปA1 + B * ( C + D ^ ( C + E ) )

  6. **นิพจน์ ซึ่งปกติจะทำจากซ้ายไปขวายกเว้น**1. ถ้ามีวงเล็บจะทำในวงเล็บก่อน แล้วจึงคำนวณตามลำดับต่อไป2. ยกกำลังจะถูกทำก่อนคูณ และหาร , คูณและหารจะถูกทำก่อนบวกและลบ ตัวอย่าง แสดงลำดับขั้นตอนในนิพจน์A + ( B / ( C + D ) * F ^ G ^ ( H + B ) + C 7 2 1 6 4 5 3 8

  7. คำสั่ง 1) คำสั่งในการกำหนดค่ารูปแบบ LET <ตัวแปร > = <นิพจน์ทางคณิตศาสตร์> นิพจน์ทางคณิตศาสตร์ จะทำการคำนวณค่าก่อนแล้วนำค่าที่ได้มาให้กับตัวแปรตัวอย่างLET X1 = Y1 + 12.6 * Z + X12) คำสั่ง GOTO รูปแบบ GOTO <หมายเลขบรรทัด> เป็นคำสั่งควบคุมการทำงานของโปรแกรมโดยจะกระโดดไปยังหมายเลขบรรทัดที่กำหนด เช่น GOTO 75

  8. 3) คำสั่งเงื่อนไข รูปแบบ IF<นิพจน์ทางคณิตศาสตร์><ตัวกระทำปรียบเทียบ><นิพจน์ทางคณิตศาสตร์>GOTO<หมายเลขบรรทัด>ตัวกระทำเปรียบเทียบ คือ = , <> , < ,<=, > ,>= ถ้าการเปรียบเทียบเป็นจริงจะทำในคำสั่งตามหมายเลขที่ระบุไว้ แต่ถ้าเป็นเท็จจะไปทำในคำสั่งถัดไป ตัวอย่างIF X > Y GOTO 12IF Z + ( X * Y ) = X1 + 12 GOTO 75

  9. 4) คำสั่ง FOR และ NEXTรูปแบบ มี 2 รูปแบบ คือFOR <ตัวแปร> = <นิพจน์ทางคณิตศาสตร์>TO<นิพจน์ทางคณิตศาสตร์2>STEP<นิพจน์ทางคณิตศาสตร์3>FOR<ตัวแปร> = <นิพจน์ทางคณิตศาสตร์>TO<นิพจน์ทางคณิตศาสตร์2>ใช้ในการทำงานที่ซ้ำกัน(loop) ของโปรแกรม รูปแบบที่ 2 จะถูกแปลเหมือนรูปแบบแรกแต่จะมีการเพิ่มขึ้นทีละ 1 รูปแบบคำสั่ง FOR เพื่อเข้าสู่โปรแกรมทำซ้ำ แล้วจะทำคำสั่งย่อย ๆ จนกระทั่งถึงคำสั่ง NEXT เป็นการครอบรอบการทำงาน 1 รอบรูปแบบ NEXT<ตัวแปร>

  10. โดยทั่วไปตัวแปรนี้ต้องเหมือนกับตัวแปรของคำสั่ง FORตัวอย่างFOR X = 1 TO 100 STEP 5 LET W = X + Y + ZLET Z= X* YNEXT X ในความเป็นจริง คำสั่งที่อยู่ใน loop ระหว่างคำสั่ง NEXT จะถูกประมวลผลเกินจำนวนครั้งที่ระบุในคำสั่ง FOR ค่าของตัวแปรจะเพิ่มขึ้นตามค่าของ step size

  11. 5) คำสั่ง GOSUB และ RETURN รูปแบบ GOSUB <หมายเลขบรรทัด>ทั้ง 2 คำสั่งเป็นคำสั่งที่จะกำหนดและเรียกใช้โปรแกรมย่อย คำสั่ง RETURN สามารถมีได้มากกว่า 1 คำสั่ง และการออกจาก subroutine ทำได้โดยการใช้คำสั่ง RETURN เท่านั้น 6) คำสั่ง ENDรูปแบบ ENDทุกโปรแกรมต้องมีคำสั่ง END เพียงคำสั่งเดียวเป็นคำสั่งสุดท้าย ( หมายเลขบรรทัดมากที่สุด ) 7) คำสั่ง REMรูปแบบ REM <ลำดับอักขระ>คำสั่งนี้เป็นคำสั่งที่ใช้ในการแทรก comment

  12. MINI-BASIC Lexical box The Token Set

  13. THE TOKEN SET Token นั้นประกอบด้วย 2 ส่วน คือ CLASS กับ VALUE เราจะสมมติว่ามี routine ชื่อ CREATE TOKEN ซึ่งทำการ interface กับ syntax box โดย CREATE TOKEN จะเป็น routine สำหรับการเขียน token ลงในแฟ้มข้อมูลระดับกลาง (Intermediate File ) เมื่อเรียกใช้ CREATE TOKEN routine เราจะสมมติว่าตัวแปรที่ชื่อ CLASS REGISTER จะถูกกำหนดค่าซึ่งแสดงถึง class ของ token และในส่วนของ value ของ token จะถูกกำหนดค่าอย่างไรนั้นนั้นขึ้นอยู่กับ class ของ token ที่เกี่ยวข้อง เราจะพิจารณา token แต่ละตัว ดังนี้

  14. LINE TOKEN (line number)ถูกใช้เพื่อบอกบรรทัด จะอยู่ในตำแหน่งเริ่มต้นของ statement และ value ของ tokenนี้ จะเป็น pointer ที่ชี้ไปยัง symbol-table ที่เก็บ line number นั้นไว้ และค่า pointer นี้จะเก็บในตัวแปรชื่อ POINTER REGISTER OPERAND TOKEN ใช้เพื่อระบุตัวแปรหรือค่าคงที่ แต่ไม่สามารถใช้ได้กับตัวแปรที่อยู่หลังคำเหล่านี้ NEXT,FOR และ LET โดยตัวแปรที่ยกเว้นเหล่านี้นั้นเป็นส่วนหนึ่งของ NEXT,FOR และ ASSIGN token ส่วน value ของ OPERAND token คือ pointer ชี้ไปยังตารางที่เก็บตัวแปรหรือค่าคงที่ pointer นี้จะถูกเก็บไว้ในตัวแปรชื่อ POINTER REGISTER ARITHEMETIC OPERATOR TOKEN จะเป็นตัวระบุสัญลักษณ์ +, -, *, / และ ^ operater เหล่านี้จะถูกแทนด้วยตัวเลข 1-5 ตามลำดับ ซึ่งตัวเลขเหล่านี้นั้นจะเป็น value ของ token และถูกเก็บในตัวแปรชื่อ VALUE REGISTER โดยการใช้ transliterator routine

  15. RELATION OPERATOR TOKEN เป็นตัวระบุโดยสัญลักษณ์ =, <, >, <=, >= และ <> operator เหล่านี้จะถูกแทนด้วยแทนด้วยตัวเลข 1-6 ตามลำดับ จะเก็บค่าตัวเลขเหล่านี้ในตัวแปรชื่อ RELATIONAL REGISTER NEXT TOKEN ใช้คำว่า NEXT และตัวแปรที่ตาม NEXTมา value ของ NEXT token เป็น pointer ชี้ไปยัง symbol table ที่ตรงกับตัวแปรนั้นและเก็บในตัวแปรที่ชื่อ POINTER REGISTER ในลักษณะเดียวกันกับ OPERAND TOKEN ในการ interface นั้นเราใช้ NEXT K3 ซึ่งใช้ 2 token ตัวแรกคือ NEXT อีกตัวคือ K3 อย่างไรก็ตามเราจะใช้แค่ 1 token เพื่อที่จะแสดงในลักษณะนี้วิธีนี้จะเป็นการลดจำนวนครั้งในการ CREATE TOKEN ซึ่งความจริงแล้ว token ที่ใช้ในการ compile ไม่จำเป็นต้องเหมือนกับ ตอน programming

  16. ASSIGN TOKEN ใช้คำว่า LET ตามด้วยตัวแปรและเครื่องหมาย "=" ส่วน value ของ ASSIGN token เป็น pointer ชี้ไปยังsymbol table ที่เก็บตัวแปรนั้นและค่า pointer จะเก็บในตัวแปรชื่อ POINTER REGISTER เราจะใช้ lexical box ย่อข้อมูลใน source statement โดยใช้ token 1 token อธิบายคำ 3 คำ FOR TOKEN ใช้คำว่า FOR ตามตัวแปรและเครื่องหมาย "=" ส่วน value ของ FOR token เป็น pointer ชี้ไปยัง symbol table ของตัวแปรนั้น และค่า pointer นี้เก็บในตัวแปรชื่อ POINTER REGISTER แต่ลักษณะของ tokenนี้ต่างจาก ASSIGN token GOTO TOKEN ใช้คำว่า GOTO และตามด้วย line number GOTO tokenเป็นการรวมเอาหลักการรวมแล้วใส่ใน 1 token ส่วน value ของ GOTO token เป็น pointer ชี้ไปยัง symbol table ด้วย line number โดยค่าของ pointer เก็บในตัวแปรชื่อ POINTER REGISTER

  17. GOSUB TOKEN ใช้คำว่า GOSUB ตามด้วย line number ในทำนองเดียวกับ LINE และ GOTO ส่วน value ของ GOSUB token เป็น pointer ชี้ไปยัง symbol table ด้วย line number โดยค่าของ pointer เก็บในตัวแปรชื่อ POINTER REGISTER LEFT PAREN และ RIGHT PAREN TOKEN แทนวงเล็บเปิดและวงเล็บปิด ตามลำดับ token เหล่านี้จะไม่มี value IF , RETURN , END , TO และ STEPTOKEN เป็น reserved word และ token เหล่านี้จะไม่มี value เช่นกัน COMMENTTOKEN ใช้คำว่า REM และตัวอักษรที่ตามในบรรทัดนั้น ซึ่ง token นี้ไม่มี value และ syntax box ใช้ token นี้ เพื่อตรวจสอบหาตำแหน่งที่ไม่ถูกต้องของการวาง comment ตัวอย่างเช่น 13 IF A1 REM THIS IS ABSURD lexical box จะสร้าง COMMENT TOKEN ขึ้นเพื่อและ syntax box จะทำการตรวจสอบความถูกต้อง

  18. ERROR TOKEN เป็น token ที่lexical box ใช้บอก syntax box ว่า มี errorเกิดขึ้น ทำให้ syntax box สามารถหลีกเลี่ยงการบอก error ครั้งที่ 2 token นี้อาจเกิดขึ้นได้เมื่อ lexical box ไม่สามารถแยก source statement เป็น token ที่มีความหมายได้ ERROR token นี้อาจเกิดขึ้นได้ถ้า reserved word มีการสะกดผิดเช่น RETARN หรือ การเขียน constants ที่ที่ผิดรูปแบบเช่น3.6E.3 ส่วน value ของ token นี้ไม่มี value ENDMARKER TOKEN จะถูกแสดงเมื่อพบ End of file และในส่วนนี้จะไม่มี value ข้อมูลที่ต้องการในการ CREATE TOKEN routine มีดังนี้ CLASS REGISTER - Class of token POINTER REGISTER - For pointer to symbol-table entry VALUE REGISTER - For the number of an arithmetic operator RELATIONAL REGISTER - For the number of a relational operator

  19. MINI-BASIC Lexical box The Identification Problem

  20. THE IDENTIFICATION PROBLEM แบบแผนสำหรับการแก้ปัญหาการแยกคำ 4 ปัญหาคือ1.The detection of reserved words2.The identification of variable3.The identification of the line numbers4.The identification of relational operators

  21. 1. The detection of reserved words( การตรวจหาคำ reserved words ) การตรวจหา reserved words นี้ เหมาะที่จะใช้วิธี prefix detection โดยมี finite set ของคำดังนี้ {END,FOR,GOSUB,GOTO,IF,LET,NEXT,REM,RETURN,STEP,TO} เราสามารถตรวจหาคำเหล่านี้ได้ตั้งแต่เริ่มต้น แต่ไม่สามารถ ตรวจหาจุดสิ้นสุดของคำได้โดยปราศจากการนำ finite set มาพิจารณาด้วย วิธีการแก้ปัญหาที่ถูกเลือกขึ้นมานั้นอยู่ภายใต้การจำลองแบบของ prefix detection machine ซึ่งแสดงในรูป 4.3 เราใช้ transition vector ในการเปลี่ยนตำแหน่ง เริ่มด้วยตัวอักษรตัวแรก หลังจากนั้นใช้ Transition list สำหรับ Sub-sequence transition ( transition ที่เหลือนอกจาก fix transition) เมื่อเริ่มคำ reserved words อักษรตัวแรกจะใช้เป็น index ใน Starting Vector

  22. 2. The identification of variables ( ปัญหาในการแยกตัวแปร ) จะใช้วิธีการ index ไปยัง symbol table เราสมมติว่าพื้นที่ 286 แรกของตาราง ถูกกำหนดค่าด้วยตัวแปรที่เป็นไปได้ 286 ตัวแปร ( ตัวแปรที่เป็นอักษรเดี่ยว หรือตัวอักษรที่ตามด้วยตัวเลขเพียงหนึ่งหลักก็ได้) ส่วนที่เหลือของ symbol table จะเป็นที่สำหรับ constant,label etc. เมื่อพบตัวอักษรของตัวแปร ตัวเลขที่ตรงกัน(index by letter) กับเลข1-26 จะเพิ่มค่าให้กับ base address ของ symbol table และเก็บค่าที่ได้ไว้ใน Pointer register ถ้าตัวอักษรตามมาเป็นตัวเลข สมมติว่าเป็น d จะบวกจำนวน 26*(d+1) เข้าไปไว้ใน Pointer Register วิธีนี้เราเรียกว่า index method หรือ indexed-approach โดย d เป็นค่าของตัวเลขที่ตามหลังตัวอักษรในตัวแปรนั้น

  23. 3. The identification of line numbers ( ปัญหาในการแยกหมายเลขบรรทัด ) จะแก้ได้โดยสร้างค่าตัวเลขของ line number ที่ถูกประมวลโดยเครื่อง ค่าของ Value part ของ Line Token จะเก็บค่า Pointer ที่ชี้ไปยัง symbol table ที่เก็บ line number นั้นไว้ ดังนั้นเราต้องรวมทุกอย่างที่ line number นั้นอ้างถึง ให้ไว้ใน symbol table เดียวกันเทคนิคที่จะใช้คือ List Searching Technique บน List ของ Line number symbol-table entries โดยจะใช้วิธี Hashing Hash function = Line.no MOD P P เป็น จำนวนเฉพาะ ซึ่งจะมีค่าเท่าไหร่นั้นสามารถนั้นเรากำหนดเองได้ และสามารถเปลี่ยนแปลงได้ง่ายขึ้นอยู่กับปัจจัยบางประการ เช่น เนื้อที่ว่างของ Storage ใน compiler และขนาดของ source program ที่จะสามารถ compile ในขั้นต้นจะให้ P เท่ากับ 101

  24. 4.The identification of relational operators(ปัญหาในการแยกตัวเปรียบเทียบต่างๆ) จะมี set ของ relational operator ดังนี้คือ { =,<,>,<=,>=,<>} เราใช้วิธีการ index method ซึ่งอาศัยข้อเท็จจริงที่ว่าใน 1 word นั้น จะประกอบด้วย 1 หรือ 2 เครื่องหมาย เมื่อมีการตรวจพบเครื่องหมายตัวแรก จะได้ค่าตัวเลข 1-3 และไปใส่ไว้ใน RELATION REGISTER และเมื่อเครื่องหมายตัวที่ 2 ถูกตรวจพบ ค่าตัวเลขที่สัมพันธ์กับเครื่องหมายนั้น จะถูกเก็บไว้ใน VALUE REGISTER แล้วเมื่แ พบว่ามี 2 เครื่องหมายตาราง Relational Table ก็จะถูกเรียกใช้ รายละเอียดของวิธีนี้แสดงอยู่ในรูป 4.4 โดยรูปที่ 4(a) แสดงค่าที่สัมพันธ์ระหว่างค่าตัวเลขของเครื่องหมายกับตัวเครื่องหมายนั้น ( Relational Operators) รูปที่ 4(b) แสดง Relational table ของตัวมันเองและสมาชิกที่มีค่าเป็น 0 จะหมายถึงสถานการณ์ต่างๆ เช่น ><,== ที่เป็นการประกอบกันของเครื่องหมายที่ไม่ถูกต้อง (error)

  25. (a) VALUE REGISTER (b) Fig. 4.4 (a) Values of RELATIONAL OPERATOR token ; (b) Relational table

  26. MINI-BASIC Lexical box The Transliterator

  27. การใช้ transliterator เป็นการพยายามที่จะประหยัดจำนวน character เพื่อให้มี character token เหลือน้อยที่สุด การรวมกลุ่มของ character แสดงดังรูปที่ 4.5 การ interface ของ transliterator กับระบบปฏิบัติการของคอมพิวเตอร์และกับส่วนที่เหลือของ lexical box เราจะไม่ลงรายละเอียดมากนัก แต่จะพบเมื่อเราสร้าง statement ขึ้นมา เช่น “get input and do state A transition.” เราสมมติว่า trasliterator จะเก็บค่าของ character tokens ในตัวแปร VALUE REGISTER สำหรับส่วนอื่นๆเราจะพิจารณาดังนี้ THE TRANSLITERATOR

  28. character token LETTER ใช้แทนตัวอักษรทั้งหมด character token DIGIT ใช้แทนค่าตัวเลขต่างๆ character token ARITH–OP ใช้แทนเครื่องหมายทางคณิตศาสตร์ character token LEFT–PAR, RIGHT–PAR และ DOT ใช้แทนวงเล็บเปิด วงเล็บปิดและจุด ตามลำดับ character token BLANK ใช้แทนช่องว่าง rubout และ linefeed (เว้นบรรทัด) character token LINE-END ใช้แทนสัญลักษณ์ carriage return character token FILE-END คือสิ่งที่ส่งไปยัง lexical box เพื่อบอกว่าไม่มีข้อมูลเข้าอีกแล้ว (no more character)

  29. ตาราง Transliterator

  30. ตาราง Transliterator (ต่อ)

  31. ตาราง Transliterator (ต่อ)

  32. ตาราง Transliterator (ต่อ)

  33. ตาราง Transliterator (ต่อ)

  34. ตาราง Transliterator (ต่อ)

  35. ตาราง Transliterator (ต่อ)

  36. MINI-BASIC Lexical box The lexical box

  37. State A1 เป็น starting state และใช้ที่จุดเริ่มต้นของบรรทัดซึ่ง token แรกจะต้องเป็น Line number ต่อไปเราก็จะมาพูดถึงสอง control state 30 IF G < G1 * (G+1) GOTO 10 ตัว G จะปรากฏอยู่ถึง 4 ครั้งด้วยกันใน statement นี้ โดยที่ตัว G สามตัวแรก (คือ ตัวที่อยู่หลัง IF , ตัวที่อยู่ถัดมาจาก Relational operator , และตัวที่อยู่หลังเครื่องหมายวงเล็บ) โดยตัว G นี้จะเป็นตัวเริ่มต้นของ MINI-BASIC variable และตัว G ที่ปรากฏตัวสุดท้าย (หลังเครื่องหมายวงเล็บปิด) ไม่ได้เป็นตัวเริ่มต้นของตัวแปร แต่เป็นตัวอักษรตัวแรกของ Reserved word State A2 จะถูกใช้ในสถานการณ์ที่ตัวอักษรควรจะเป็นตัวอักษรตัวแรกของตัวแปร State A3 จะถูกใช้ในกรณีที่ตัวอักษรเป็นตัวเริ่มต้นของ Reserved word State จะถูกตัดสินว่าควรจะเป็น state ไหน โดยดูจาก Lexical token ก่อนหน้า ในกรณีที่ไม่มีการแยกแยะคำว่า คำไหนเป็น Reserved word ถ้าเราพบคำว่า GOTO ก็จะมีการแปลคำว่า GOTO ออกมาเป็น operand G ตามด้วย operand O operand T และ operand O ตามลำดับ

  38. ในการอธิบายเกี่ยวกับ Transition routine จะแสดงให้เห็นถึงส่วนต่างๆที่ถูกสร้างขึ้นเพื่อที่จะตอบสนองในการแปล state ที่เหมือนกัน ในกรณีของ control state ตัวนำของ Transition ในสถานการณ์เหล่านี้จะรอ action ที่ต้องการเพื่อให้ Token ก่อนหน้านี้สมบูรณ์เพื่อที่จะระบุหน้าที่ได้อย่างเฉพาะเจาะจง โดยจะแสดงให้ผู้อ่านได้เห็นถึง state ที่ Transition สร้างขึ้น State B1 ใช้ในการค้นหา Reserved word ซึ่งมันจะใช้ตัวแปร DETECTION REGISTER ในการเก็บค่า pointer ของมันไว้ใน Detection Table ดังรูปที่ 4.3 ซึ่งได้อธิบายมาก่อนหน้านี้แล้ว เมื่อ input ที่รับเข้ามาเป็น ตัวอักษร (Letter) สถานะถัดไป (Next state) จะถูกตัดสินโดย transition M1 ซึ่งเลือกสถานะถัดไปจาก Detection Table การที่ M1 จะถูกเฉพาะเจาะจงได้นั้น จะต้องหลังจากที่มีการทำ transition ที่เหลือก่อน State C1 และ C2 ใช้ในการหาตัวแปรที่เกิดขึ้น โดย state ทั้งสองนี้จะถูกใช้ในการคำนวณค่า value part ของ token OPERAND และ NEXT State C1 ใช้ในการค้นหาตัวอักษร และ

  39. State C2 ใช้ในการตรวจหา optional digit ซึ่งจะตามหลังตัวอักษร ในกรณีที่ เราไม่สามารถจะบอกได้ว่าตัวแปรนั้นเป็นตัวเริ่มต้นหรือไม่ จนกว่าจะพบตัวอักษรตัวแรก ในกรณีนี้ state C2 จะถูกเรียกใช้โดยตรงและ Transition routine จะต้องถูกนำไปใช้ร่วมกับการทำงานเมื่อ state C1 เข้าร่วม ในส่วนนี้ จะมีการ load CLASS REGISTER กับชื่อของ token ที่เป็นกระบวนการ มาเป็น information ด้วย มิฉะนั้นจะเกิดการสูญเสียอย่างรวดเร็ว State C1 ควรจะถูกใช้เฉพาะหลังคำว่า NEXT เท่านั้น State D1 ถึง D6 ถูกใช้เพื่อคำนวณค่า value part ของ MINI-BASIC โดย state เหล่านี้จะตรงกับ State 1, 23 , 4 , 5 , 6 และ 7 ใน processor ของ section 2.14 โดย section 2.14 นี้ เราใช้ตัวแปร 4 ตัวด้วยกันคือ NUMBER REGISTER , EXPONENT REGISTER , COUNT REGISTER และ SIGN REGISTER ในการคำนวณขั้น Intermediate โดยเราสันนิษฐานให้มีงาน COMPUTE CONSTANT ซึ่งใช้ตารางสัญลักษณ์ใหม่ ใช้ NUMBER REGISTER และ EXPONENT REGISTERในการสร้างตัวแทนของค่าคงที่ จากนั้นเก็บตัวแทนนี้ไว้ในตารางใหม่ และใช้ pointer ที่เก็บอยู่ใน POINTER REGISTER ชี้ไป ยังตาราง

  40. โดยงานของ Transition เป็นสิ่งจำเป็นสำหรับ section 2.14 และ 3 Exit routine คือ YES1 YES2 และ YES3 ของส่วน 2.14 ถูกใช้ใน routine นี้ ยกเว้นแต่ว่า Transition routine นี้ไม่ยาวกว่า Exit routine พวกมันก็จะถูกเปลี่ยนชื่อเป็น YES1D YES2D และ YES3D ตามลำดับ เพื่อแสดงให้เห็นถึงความสัมพันธ์ของพวกมันกับค่าคงที่ของกระบวนการ D1 ถึง D6 พวกมันถูกเรียกใน CODE ซึ่งในกระบวนการสถานการณ์ซึ่งมันจะปรากฏอย่างชัดเจนที่ค่าคงที่มีมากเกินไปและ token ถัดไปก็จะเริ่มต้น สำหรับตัวอย่างใน MINI-BASIC statement 512 IF 3 > ( X + 10.3 ) / 2E3 GOTO 10 มีค่าคงที่ 3 ตัวและ lexical box ไม่สามารถบอกถึงสัญลักษณ์สุดท้ายของค่าคงที่ได้จนกว่ามันจะพบสัญลักษณ์ที่ตามมา ได้แก่สัญลักษณ์ > , ) และ G สำหรับคำอื่น เลข 3 อาจหมายถึง 37 10.3 อาจหมายถึง 10.31 และ 2E3 อาจจะหมายถึง 2E30 ในแต่ละกรณีของ 3 กรณีนี้ Transition routine จะต้องทำสำเร็จทั้งกระบวนการของค่าคงที่และเริ่มต้นกระบวนการ lexical token ถัดไป ดังนั้น Transition routine ที่สอดคล้อง (เช่น H1c , A3e และ B1c) ลำดับแรกจะมีการเรียก YES routine ที่เหมาะสมเพื่อจะให้ค่าคงที่สำเร็จ และ Transition routine จะเริ่มทำงานสำหรับ token ถัดไป

  41. State E1 และ E2 ใช้สำหรับกระบวนการ line numbers พวกมันจะถูกใช้ในการคำนวณค่า value part ของ token LINE , GOTO และ GOSUB โดย State E1 จะใช้สำหรับค้นหาตัวเลขตัวแรกของ line number และ State E2 ใช้สำหรับกระบวนการในส่วนที่เหลือของ line number โดยเมื่อ digits ถูกพบ integer ที่สอดคล้องจะถูกเก็บในตัวแปรชื่อ LINE REGISTER เมื่อ line number สมบูรณ์แล้ว routine YES1E จะถูกเรียกเพื่อค้นหา ตารางสัญลักษณ์ที่สอดคล้องกัน และแทนค่า pointer ลงในตารางสัญลักษณ์ ใน POINTER REGISTER โดย routine จะต้องถูเรียกหลังจากสัญลักษณ์ที่ตาม line number ถูกพบ เช่นเดียวกับกรณี YES routine อื่นๆ State F1 F2 และ F3 ถูกใช้ในการค้นหาตัวแปรที่ตามด้วยเครื่องหมายเท่ากับ(=) และใช้ในการคำนวณค่า value part ของ token ASSIGN และ FOR State F1 จะหา letter part ของตัวแปร State F2 จะหา optional digit และ F3 จะหาเครื่องหมายเท่ากับหลัง optional digit พวกมันจะใช้ POINTER REGISTER ในทางเดียวกับ C1 และ C2

  42. State G1 จะใช้ในการค้นหา LINE-END หลังคำว่า REM ถูกตรวจพบ โดยมันมีผลกระทบต่อการลบ comment (หาจุดสิ้นสุดของ comment) State G1 สามารถที่จะถูกใช้หลังจาก lexical error ถูกตรวจพบเพื่อที่จะเริ่มกระบวนการ lexical โดยปกติในบรรทัดถัดไป State H1 ถูกใช้หลังจาก character token REL-OP(relational operators) และดูว่ามี REL-OP ตัวที่ 2 ตามมาหรือไม่ มีตัวที่เพิ่มเข้ามาใน Transition table ของ Lexical analyzer ซึ่ง error routine สามารถถูกเรียกใช้ ยกตัวอย่างของ การนำเข้า RIGHT-PAR ในตารางสำหรับ State A2 เนื่องจาก State A2 จะเข้าร่วมเฉพาะ หลัง arithmetic หรือ relational operator หรือ left parenthesis หรือคำ END , IF , RETURN , STEP และ TO เราทราบกันว่า right parenthesis ไม่สามารถตามด้วย well-formed statement ทำให้เรารู้ว่า อย่างไรก็ตาม lexical box ควรสร้าง RIGHT-PAREN token และดำเนินการต่อเนื่องไป ถ้าไม่มีสิ่งผิดปกติใดเกิดขึ้น The syntax box เป็นส่วนสืบค้น error และคัดทิ้งข้อความ โดยกฎทั่วๆไป เราสร้าง token เมื่อขอบเขตของสัญลักษณ์ lexical ถูกตัดอย่างชัดเจน และ syntax box ตรวจสอบ errors ที่เราทำเช่นนี้เพราะเราสมมุติให้ syntax box มี information มากกว่า เกี่ยวกับว่า User จะทำอะไรและสามารถให้ ความหมายของข้อความ error ได้มากขึ้น

More Related