blob: 220e5d625e84b1b74774b41b881d8846c3b0efb9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
%top {
#include "grammar.h"
}
%{
#include "manual.h"
%}
%option noyywrap
%option nounput
%option yylineno
%option stack
%option noyy_top_state
%x comments
%x ins_name try_details ins_details
%x encoding encoding_type encoding_content
%x encoding_bits encoding_bits_size
%x raw_line
%%
[ \t\n]+ { }
"/*" { BEGIN(comments); }
<comments>"*/" { BEGIN(INITIAL); }
<comments>[^*\n] { }
<comments>"Copyright"[^\n]* { yylvalp->string = strdup(yytext); return COPYRIGHT; }
<comments>"*" { }
<comments>"\n" { }
"@title" { BEGIN(ins_name); return TITLE; }
<ins_name>[ ][A-Za-z0-9-]+ { yylvalp->string = strdup(yytext + 1); BEGIN(try_details); return INS_NAME; }
<try_details>[ ,/-] { BEGIN(ins_details); yylvalp->character = yytext[0]; return INS_SEP; }
<try_details>[\n] { BEGIN(INITIAL); }
<ins_details>[^\n]* { yylvalp->cstring = yytext; return INS_DETAILS; }
<ins_details>[\n] { BEGIN(INITIAL); }
"@desc" { yy_push_state(raw_line); return DESC; }
"@encoding" { BEGIN(encoding); return ENCODING; }
<encoding>[ ] { }
<encoding>"(" { BEGIN(encoding_type); }
<encoding_type>[A-Za-z] { yylvalp->string = strdup(yytext); return TYPE; }
<encoding_type>[0-9]+ { yylvalp->integer = atoi(yytext); return NUMBER; }
<encoding_type>")" { BEGIN(encoding); }
<encoding>"{" { BEGIN(encoding_content); }
<encoding_content>[ \t\n]+ { }
<encoding_content>"}" { BEGIN(INITIAL); }
<encoding_content>"@format" { yy_push_state(raw_line); return FORMAT; }
<encoding_content>"@half" { yy_push_state(raw_line); return HALF; }
<encoding_content>"@word" { yy_push_state(raw_line); return WORD; }
<encoding_content>"@syntax" { yy_push_state(raw_line); return SYNTAX; }
<encoding_content>"@conv" { return CONV; }
<encoding_content>"@hooks" { return HOOKS; }
<encoding_content>"@rules" { return RULES; }
<raw_line>[^\n]+ { yylvalp->cstring = yytext; return RAW_LINE; }
<raw_line>"\n" { yy_pop_state(); }
<encoding_content>"{" {
read_block(temp);
yylvalp->cstring = temp; return RAW_BLOCK;
}
%%
|