Develop and Download Open Source Software

Browse Subversion Repository

Contents of /branches/mty-makai/expr_scan.lex

Parent Directory Parent Directory | Revision Log Revision Log


Revision 260 - (show annotations) (download)
Wed Jan 12 09:00:49 2011 UTC (13 years, 3 months ago) by notanpe
File size: 2733 byte(s)
特殊検索を実装。
gettid() をちょっとマシにした。
1 /***********************************************************************
2 *
3 * file: expr_scan.lex
4 *
5 * 単純なスキャナ
6 *
7 */
8
9 %option 8bit
10
11 %x EXPR_SET
12
13 CHAR [./0-9A-Za-z]
14 NCHAR [^./0-9A-Za-z]
15 CHAE [.26AEIMQUYcgkosw]
16 CHU [./A-Z]
17 CHUE [.AEIMQUY]
18 CHL [./a-z]
19 CHLE [.cgkosw]
20 CHC ({CHU}|{CHL})
21 CHCE ({CHUE}|{CHLE})
22
23 ACY ((\.+\/+|\/+\.+)|(A+a+|a+A+)|(C+c+|c+C+)|(E+e+|e+E+)|(G+g+|g+G+)|(I+i+|i+I+)|(K+k+|k+K+)|(M+m+|m+M+)|(O+o+|o+O+)|(Q+q+|q+Q+)|(S+s+|s+S+)|(U+u+|u+U+)|(W+w+|w+W+)|(Y+y+|y+Y+))
24 ACZ ((B+b+|b+B+)|(D+d+|d+D+)|(F+f+|f+F+)|(H+h+|h+H+)|(J+j+|j+J+)|(L+l+|l+L+)|(N+n+|n+N+)|(P+p+|p+P+)|(R+r+|r+R+)|(T+t+|t+T+)|(V+v+|v+V+)|(X+x+|x+X+)|(Z+z+|z+Z+)|{ACY})
25 CHX \[{ACZ}\]
26 CHXE \[{ACY}\]
27
28 BLANK [\x20\r\t]
29
30 PRINT [\x20-\x7E\xA1-\xDF]
31 SJIS1 [\x80-\x9F\xE0-\xFC]
32 SJIS2 [\x40-\x7E\x80-\xFC]
33 %%
34
35 "#"[^\r\n]*[\r]* comment( yytext );
36
37 ({CHAR}|{CHX}|{CHXE}){11,} expr_error("ターゲット<%s:%d文字くらい>は明らかに長すぎるので無視!", yytext, yyleng); return JUNK;
38
39 {CHU}{0,9}{CHUE} return mkdict(CA_U, 1);
40 {CHU}{1,9} return mkdict(CA_U, 0);
41
42 {CHC}{0,9}{CHCE} return mkdict(CA_C, 1);
43 {CHC}{1,9} return mkdict(CA_C, 0);
44
45 {CHAR}{0,9}{CHAE} return mkdict(CA_A, 1);
46 {CHAR}{1,9} return mkdict(CA_A, 0);
47
48 {CHAR}+ expr_error("ターゲット<%s:%d文字>は明らかに長すぎるので無視!", yytext, yyleng); return JUNK;
49
50 {CHXE} return mkchx(yytext[1], 1);
51 {CHX} return mkchx(yytext[1], 0);
52
53 <EXPR_SET>"]" BEGIN(0);
54 <EXPR_SET>{CHAR}-{CHAR} yylval.bmp = mkrng(cv64(yytext[0]), cv64(yytext[2])); return RNGS;
55 <EXPR_SET>{CHAR} yylval.bmp = mkrng(cv64(yytext[0]), (unsigned)-1); return RNGS;
56 <EXPR_SET>\n BEGIN(0); expr_error("範囲指定の中で改行するなんて…"); g_lineno++;
57 <EXPR_SET>{SJIS1}{SJIS2} BEGIN(0); expr_error("文字<%c%c(0x%02X%02X)>は範囲指定に含めるワケにはいかないので無視します。", yytext[0], yytext[1], yytext[0] & 0xFF, yytext[1] & 0xFF);
58 <EXPR_SET>{PRINT} BEGIN(0); expr_error("文字<%c>は範囲指定に含められないので無視します。", yytext[0]);
59 <EXPR_SET>. BEGIN(0); expr_error("なんですかこの文字は範囲指定なのに? <0x%02X> 無視っすよ?", yytext[0] & 0xFF);
60
61 [\^$?\(\)] return yytext[0];
62 "[^" BEGIN(EXPR_SET); return CLS_CMPL;
63 "[" BEGIN(EXPR_SET); return CLS;
64
65 ({BLANK}|"|")*\n({BLANK}|"|")* g_lineno++; return OR;
66 ({BLANK}|"|")+ return OR;
67
68 {SJIS1}{SJIS2} expr_error("文字<%c%c(0x%02X%02X)>はお行儀が悪いので無視します。", yytext[0], yytext[1], yytext[0] & 0xFF, yytext[1] & 0xFF); return JUNK;
69 {PRINT} expr_error("文字<%c>はよくわかってないので無視します。", yytext[0]); return JUNK;
70 . expr_error("なんですかこの文字は? <0x%02X> 無視っすよ?", yytext[0] & 0xFF); return JUNK;
71
72 %%
73
74 /*
75 * Local Variables:
76 * tab-width: 4
77 * End:
78 *
79 * EOF */

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Rev URL

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26