ТОР 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);
}
Не нашли, что искали? Воспользуйтесь поиском:
|