Разрабатываем базу данных сканера




 

Табл.2. Таблица одно-литерных   Табл.3. Таблица классов литер  
терминальных символов      
ТТС1   KTL  
«а» … «z» «A» «C» … «K» «M» … «Z» Буквы б   б    
«B»    
д    
н    
р    
«+»    
«–»    
«*»    
«^»    
 
«H» Шестнадцатеричный префикс «H»   «=»    
«B» Двоичный префикс «B»   «<»    
«0» «1» Двоичные цифры д   «>»    
«#»  
«2» … «9» Недвоичные цифры н   «%»    
«$»  
«(»  
«» Разделитель (пробел) р   «)»    
«+» Сложение «+»   «.»    
«–» Вычитание «–»   «ы»    
«*» Умножение «*»   «H»    
«^» Степень «^»   Табл.4. Таблица типов лексем  
«<» Меньше «<»        
«>» Больше «>»   TLE  
«=» Равно «=»   конст_10    
«#» Суффикс double «#»   конст_16    
«%» Суффикс integer «%   конст_2    
«$» Суффикс string «$»   ид_р    
«(» Открывающая скобка «(»   sin    
«)» Закрывающая скобка «)»   left    
«.» Точка «.»   not    
  Недопустимый символ х   and    
  Конец файла ы   or    
        xor    
Табл.5. Таблица ключевых слов     equ    
      разделитель    
ТКС     +    
sin     -    
left     *    
not     mod    
and     ^    
or     оо    
xor     (    
equ     )    
mod          
               

 

Временные таблицы:

 

Табл.6. Таблица идентификаторов
         
ТИ
Ид описатели адр
тип точка точность осн
           
         
Табл.7. Таблица констант
         
ТК  
конст описатели  
тип точка точность осн  
           
         
Табл.8. Таблица операций и специальных символов
   
ТОС  
символ  
   
         
Табл.9. Таблица стандартных символов
         
ТСС      
TLE ALE      
         
             

Каждый тип лексических единиц описываем с помощью автоматной грамматики и для каждой грамматики составляем эквивалентный ей конечный автомат.

· конст_10

 

S = нD1! дD1.

D1 = нD1! дD1!». «D2! е.

D2 = нD3! дD3.

D3 = нD3! дD3! е.

е = «"! «*»!» –"! «+»! «*»! «/"! «^»!»)"! «=»! «<»! «>».


               
   
н,д
 
н,д
 
 
 
   

 

 


· конст_2

 

S = «&«B0.

B0 = «B» B1.

B1 = дB2.

B2 = дB2!». «B3! е.

B3 = дB4.

B4 = дB4! е.

е = «"! «*»!» –"! «+»! «*»! «/"! «^»!»)"! «=»! «<»! «>».

 

                 
 
 
   
е
 
   
 
 
   

 


· конст_16

 

S = «&«B0.

B0 = «H» H1.

H1 = дH1! нH1! «A" H1! «B» H1! «C» H1! «D» H1! «E» H1! «F» H1! е.

е = «"! «*»!» –"! «+»! «*»! «/"! «^»!»)"! «=»! «<»! «>».

 
 

 

 


· ид_р

 

S = бА! «B» A! «H» A.

А = бА! нА! дА! «A» A! «B» A! «C» A! «D» A! «E» A! «F» A! «H» A! «%«A2! «&«A2! «$«A2.

A2 = е.

е = «"! «*»!» –"! «+»! «*»! «/"! «^»!»)"! «=»! «<»! «>».

 

                       
   
б,н,д,"A".."F","H"
 
 
 
   
"s"
 
"i"
 
"n"
 
е4

 

 


· sin

 

S = «s» A4.

A4 = «i» A5.

A5 = «n» A6.

A6 = е4.

е4 = р! «(».


                                   
         
 
         

 


· left

 

S = «l» A7.

A7 = «e» A8.

A8 = «f» A9.

A9 = «t» A10.

A10 = е4.

е4 = р! «(».

 

                   
   
     
         
 


 

 

· not

 

S = «n» A11.

A11 = «o» A12.

A12 = «t» A13.

A13 = е4.

е4 = р! «(».

 

 
 

 


· and

 

S = «a» A14.

A14 = «n» A15.

A15 = «d» A16.

A16 = е4.

е4 = р! «(».

 

 
 

 


· or

 

S = «o» A17.

A17 = «r» A18.

A18 = е4.

е4 = р! «(».

 

 
 

 

 


· xor

 

S = «x» A19.

A19 = «o» A20.

A20 = «r» A21.

A21 = е4.

е4 = р! «(».


                                       
   
"x"
     
е4
           
 
 
 
         

 


· equ

S = «e» A22.

A22 = «q» A23.

A23 = «u» A24.

A24 = е4.

е4 = р! «(».

 
 

 


· разделитель

S = рR1.

R1 = рR1! e0

e0 – любой символ из ТТС1

       
   
р
 
 

 

 


· +

 

S = «+«U1.

U1 = e3.

e3 = б! «B»! «H»! д! н! р! «&»! «(».


           
   
"+"
 
e3
 
 

 


· -

 

S = «– «U1.

U1 = e3.

e3 = б! «B»! «H»! д! н! р! «&»! «(».

 
 

 

 


· *

 

S = «*«U1.

U1 = e3.

e3 = б! «B»! «H»! д! н! р! «&»! «(».

 
 

 


· mod

 

S = «mod» U1.

U1 = e3.

e3 = б! «B»! «H»! д! н! р! «&»! «(».

 
 

 

 

S = «^«U1.

U1 = e3.

e3 = б! «B»! «H»! д! н! р! «&»! «(».

 
 

 

 


· оо

 

S = «<«O1! «>«O2! «=«O3.

O1 = «>«O4! «=«O4! e3.

O2 = «=«O5! e3.

O4 = e3.

O5 = e3.

O3 = e3.

e3 = б! «B»! «H»! д! н! р! «&»! «(».

 

 
 

 

 


· (

 

S = «(«K1.

K1 = e2.

e2 = б! «B»! «H»! д! н! р! «+»!» –"! «&»! «(».


 
 

 


·)

 

S =»)«K2.

K2 = e.

е = «"! «*»!» –"! «+»! «*»! «^»!»)"! «=»! «<»! «>».

 

 

 
 

 


4) Описываем использованные в сканере подпрограммы:

end – Процедура окончания работы сканера

podgot – Процедура производит общую подготовку сканера к работе

 

tip – Процедура устанавливает тип литеры

 

vkl – Процедура добавляет текущую литеру в текущую лексему

 

cll – Процедура считывает из файла очередную литеру

 

zaptab – Процедура проверяет наличие текущей лексемы в таблице ключевых слов

 

out – Процедура заполняет основные таблицы


Пример работы сканера

Исходное выражение:

 

(sin (2*aa%-&B01)<bb#) and (2+3+4<10) xor &H0

 

Заполненные в результате работы сканера таблицы:

Табл.10. Таблица идентификаторов
 
ТИ
ид описатели адр
тип точка точность осн
Aa% Integer        
Bb# Double        
         
Табл.11. Таблица констант
         
ТК  
конст Описатели  
тип точка точность осн  
  Integer        
&B01 Bin        
  Integer        
  Integer        
  Integer        
  Integer        
&H0 Hex        
         
Табл.12. Таблица операций и специальных символов
   
ТОС  
Символ  
(  
Sin  
(  
*  
-  
)  
<  
)  
And  
(  
+  
+  
<  
)  
Xor  
         
         
                 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-06-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: