Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Примеры Lex-программ




 

Пример1.

 

 

 

%Start KOMMENT

/*

* Программа записывает в

* стандартный файл вывода

* комментарии Си-программы.

* Обратите внимание на то, что

* здесь строки комментариев указаны

* не с первой позиции строки!

*/

 

КОММ _ НАЧАЛО "/*"

КОММ _ КОНЕЦ "*/"

 

%%

{ КОММ _ НАЧАЛО } { ECHO;

BEGIN KOMMENT;}

[0*;

 

< KOMMENT >[^*]* ECHO;

< KOMMENT >[^/] ECHO;

< KOMMENT >{ КОММ _ КОНЕЦ } {

ECHO;

printf ("0);

/*

* Здесь приведен пример

* использования комментариев в

* разделе правил Lex-программы.

* Обратите внимание на то, что

* комментрий указан внутри блока,

* определяющего действие правила.

*/

BEGIN 0;}

%%

 

/*

* Здесь приведен пример комментариев

* в разделе программ пользователя.

*/

 

 

Пример 2.

 

 

 

 

%Start IC1 IC2 Normal

 

/*

* Отладочный фрагмент

* Lex-программы, которая строит

* лексический анализатор для

* компилятора языка Паскаль.

* Действие return (...)

* возвращает тип лексемы в

* в вызывающую анализатор

* программу.

* Обратите внимание на то, что в

* этой Lex-программе отсутствуют

* активные правила. Это сделано

* в связи с тем, что нет

* необходимости иметь правила,

* которые всегда активны.

* Все цепочки символов входного

* потока, не распознанные в

* правилах, копируются в выходной

* поток символов.

*/

 

LETTER [A-ZА-Яa-zа-я_]

DIGIT [0-9]

IDENT { LETTER }({ LETTER }|{ DIGIT })*

INT { DIGIT }+

FIXED { INT }?.{ INT }

WHISP [ 0*

 

%%

BEGIN Normal;

< Normal >"{" BEGIN IC1;

< IC1 >[^}];

< IC1 >"}" BEGIN Normal;

< Normal >"(*" BEGIN IC2;

< IC2 >[^*]|[^)];

< IC2 > & gt; "*)" BEGIN Normal;

 

< Normal >'([^']|'')*' return (строка);

< Normal >"<>" return (не _ равно);

< Normal >"=" return (равно);

< Normal >"<" return (меньше);

< Normal >">" return (больше);

< Normal >">=" return (больше _ или _ равно);

< Normal >"<=" return (меньше _ или _ равно);

< Normal >".." return (точка _ точка);

< Normal >"+" return (плюс);

< Normal >"-" return (минус);

< Normal >":=" return (присвоить);

< Normal >"*" return (умножить);

< Normal >"/" return (разделить);

< Normal > mod return (t _ mod);

 

 

 

 

< Normal > div return (t _ div);

< Normal > and return (t _ and);

< Normal > or return (t _ or);

< Normal > not return (t _ not);

< Normal >"(" return (lpar);

< Normal >")" return (rpar);

< Normal >"[" return (lbracket);

< Normal >"]" return (rbracket);

< Normal >"," return (comma);

< Normal >":" return (colon);

< Normal >"^" return (circumflex);

< Normal >";" return (semicolon);

< Normal > write return (Write);

< Normal > writeln return (Writeln);

< Normal > label return (t _ label);

< Normal > program return ();

< Normal > const x (" константы ");

< Normal > type x (" типы ");

< Normal > var x (" перем ");

< Normal > procedure x (" процедура ");

< Normal > function x (" функция ");

< Normal > begin x (" начало ");

< Normal > end {WHISP}. x (" конец прогр ");

< Normal > end x (" конец ");

< Normal > array x (" массив ");

< Normal > of x (" из ");

< Normal > record x (" запись ");

< Normal > case x (" выбор ");

< Normal > in x (" в ");

< Normal > file x (" файл ");

< Normal > for x (" для ");

< Normal > to x (" к ");

< Normal > downto x (" вниз к ");

< Normal > do x (" выполн ");

< Normal > while x (" пока ");

< Normal > repeat x (" повт ");

< Normal > until x (" до ");

< Normal > set x (" множество ");

< Normal > with x (" с ");

< Normal > nil x (" nil ");

< Normal > if x (" если ");

< Normal > then x (" то ");

< Normal > else x (" иначе ");

< Normal >{FIXED} x (" float ");

< Normal >{INT} x (" ц. б. з ");

< Normal >{IDENT} x (" идент ");

< Normal >[ 0];

 

%%

 

x (s)

char * s;

{

 

 

 

 

printf ("%-15.15s 177> %s <1770,

s, yytext);

 

}

 

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных