📄 textlex.l
字号:
%{/* * Copyright (c) 1984, 1985, 1986 Xerox Corp. * * texttoip - convert a textual representation of interpress to a real * interpress file. The text produced by "iptotext" is the input * that is recognized. * * This is the lex specification of the input scanner. * * Written for Xerox Corporation by William LeFebvre * * 6-May-1984 * * HISTORY * 15-Jul-86 Lee Moore (lee) at Xerox Webster Research Center * Escaped characters (as octal numbers) are no longer processed * here. The popular null was causing problems. Processing * of these escapes has been moved to AppendString1 in libip.a . * * 01-Dec-85 lee at Xerox, WRC * Linted. * * 28-apr-85 ed flint * add conditional compilation for vax11-c (vms) * * * if using this file on vms, you must edit this file and add the following * lines around the #include "stdio.h" line which is at the top of the file * * #ifdef vax11c * # include stdio * #else * # include "stdio.h" * #endif */#ifdef vax11c# include ctype#else# include <ctype.h>#endif# include "iptokens.h"# include "texttoken.h"# include "ipnames.h"# define short_or_long(ch) (ch != '>' ? 1 : 2)extern long yylval_long;extern char *yylval_charP;char *buffptr;char string_buffer[1024];%}%%^"File: " { return(T_file); }^"Header: " { return(T_header); }^>[> ]"Comment: " { yylval_long = short_or_long(yytext[1]); return(T_seq_comment); }^>[> ]"Identifier: " { yylval_long = short_or_long(yytext[1]); return(T_seq_identifier); }^>[> ]"Insert file: " { yylval_long = short_or_long(yytext[1]); return(T_seq_insert_file); }^>[> ]"Integer: " { yylval_long = short_or_long(yytext[1]); return(T_seq_integer); }^>[> ]"Rational: " { yylval_long = short_or_long(yytext[1]); return(T_seq_rational); }^>[> ]"String: " { yylval_long = short_or_long(yytext[1]); return(T_seq_string); }^>[> ]"Adaptive Pixel Vector: " { yylval_long = short_or_long(yytext[1]); return(T_seq_apv); }^>[> ]"Compressed Pixel Vector: " { yylval_long = short_or_long(yytext[1]); return(T_seq_cpv); }^>[> ]"Packed Pixel Vector: " { yylval_long = short_or_long(yytext[1]); return(T_seq_ppv); }[+-]?[0-9A-Fa-f][0-9A-Fa-f]* { yylval_long = getnum(yytext); return(T_number); }^[a-zA-Z{}][a-zA-Z]* { register char *ptr; for (ptr = yytext; *ptr; ptr++) { if (isupper(*ptr)) { *ptr = tolower(*ptr); } } for (yylval_long = 0; yylval_long <= OP_LIMIT; yylval_long++) { if (strcmp(yytext, op_names[yylval_long]) == 0) { return(T_operator); } } return(T_operator); }\" { unsigned char ch; int val = 0; int cnt = 0; yylval_charP = buffptr = string_buffer; while ((ch = input()) != '"') { if (ch == '\\') { ch = input(); if (ch >= '0' && ch <= '9') { *buffptr++ = '\\'; } } *buffptr++ = ch; } *buffptr = '\0'; return(T_string); }[a-zA-Z][a-zA-Z0-9\-]* { yylval_charP = yytext; return(T_identifier); }[ \t][ \t]* { yyleng = 0; /* gobble white space */ yymore(); }\(.*\) { yyleng = 0; /* gobble comments */ yymore(); }^\(.*\)\n { /* comment that spans the whole line */ yyleng = 0; yymore(); }\n { return(T_newline); }. { yylval_long = yytext[yyleng-1]; return(T_character); }%%extern int radix;getnum(str)char *str;{ register int val; register int digit; /* take the easy and fast way out for base 10 */ if (radix == 10) { return(atoi(str)); } /* otherwise this is a standard "convert any radix" algorithm */ val = 0; while ((digit = *str++) != '\0') { if ((digit -= '0') > 9) { /* it is a letter */ if ((digit -= ('A' - '0' - 10)) > 15) { /* it is a lower case digit */ digit -= ('a' - 'A'); } } if (digit >= radix) { /* this is really too much! give up at this point */ return(val); } val *= radix; val += digit; } return(val);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -