Use of gedcom_lex_common.c.
[gedcom-parse.git] / gedcom_1byte.lex
1 /*  This program is free software; you can redistribute it and/or modify  *
2  *  it under the terms of the GNU General Public License as published by  *
3  *  the Free Software Foundation; either version 2 of the License, or     *
4  *  (at your option) any later version.                                   *
5
6  (C) 2001 by The Genes Development Team
7  Original author: Peter Verthez (Peter.Verthez@advalvas.be)
8 */
9
10 /* $Id$ */
11 /* $Name$ */
12
13 %{
14 #include "gedcom.tab.h"
15 #include "gedcom.h"
16 #include "multilex.h"
17 #include "encoding.h"
18
19 #define YY_NO_UNPUT
20 %}
21
22 %s NORMAL
23 %s EXPECT_TAG
24
25 alpha        [A-Za-z_]
26 digit        [0-9]
27 delim        " "
28 tab          [\t]
29 hash         #
30 literal_at   @@
31 otherchar    [\x21-\x22\x24-\x2F\x3A-\x3F\x5B-\x5E\x60\x7B-\x7E\x80-\xFE]
32 terminator   \x0D|\x0A|\x0D\x0A|\x0A\x0D
33
34 any_char     {alpha}|{digit}|{otherchar}|{delim}|{hash}|{literal_at}
35 any_but_delim {alpha}|{digit}|{otherchar}|{hash}|{literal_at}
36 non_at       {alpha}|{digit}|{otherchar}|{delim}|{hash}
37 alphanum     {alpha}|{digit}
38 gen_delim    {delim}|{tab}
39
40 escape       @#{any_char}+@
41 pointer      @{alphanum}{non_at}+@
42
43 %{
44 static int current_level=-1;
45 static int level_diff=MAXGEDCLEVEL;
46  
47 #ifdef LEXER_TEST 
48 YYSTYPE gedcom_lval;
49 int line_no = 1; 
50 #endif
51  
52 %} 
53
54 %%
55
56 %{
57 #include "gedcom_lex_common.c"
58
59 ACTION_BEFORE_REGEXPS
60   
61 %}
62
63 <INITIAL>{gen_delim}* /* ignore leading whitespace (also tabs) */
64
65 <INITIAL>0{digit}+    ACTION_0_DIGITS
66
67 <INITIAL>{digit}+     ACTION_DIGITS
68
69 <EXPECT_TAG>ABBR  MKTAGACTION(ABBR)
70 <EXPECT_TAG>ADDR  MKTAGACTION(ADDR)
71 <EXPECT_TAG>ADR1  MKTAGACTION(ADR1)
72 <EXPECT_TAG>ADR2  MKTAGACTION(ADR2)
73 <EXPECT_TAG>ADOP  MKTAGACTION(ADOP)
74 <EXPECT_TAG>AFN   MKTAGACTION(AFN)
75 <EXPECT_TAG>AGE   MKTAGACTION(AGE)
76 <EXPECT_TAG>AGNC  MKTAGACTION(AGNC)
77 <EXPECT_TAG>ALIA  MKTAGACTION(ALIA)
78 <EXPECT_TAG>ANCE  MKTAGACTION(ANCE)
79 <EXPECT_TAG>ANCI  MKTAGACTION(ANCI)
80 <EXPECT_TAG>ANUL  MKTAGACTION(ANUL)
81 <EXPECT_TAG>ASSO  MKTAGACTION(ASSO)
82 <EXPECT_TAG>AUTH  MKTAGACTION(AUTH)
83 <EXPECT_TAG>BAPL  MKTAGACTION(BAPL)
84 <EXPECT_TAG>BAPM  MKTAGACTION(BAPM)
85 <EXPECT_TAG>BARM  MKTAGACTION(BARM)
86 <EXPECT_TAG>BASM  MKTAGACTION(BASM)
87 <EXPECT_TAG>BIRT  MKTAGACTION(BIRT)
88 <EXPECT_TAG>BLES  MKTAGACTION(BLES)
89 <EXPECT_TAG>BLOB  MKTAGACTION(BLOB)
90 <EXPECT_TAG>BURI  MKTAGACTION(BURI)
91 <EXPECT_TAG>CALN  MKTAGACTION(CALN)
92 <EXPECT_TAG>CAST  MKTAGACTION(CAST)
93 <EXPECT_TAG>CAUS  MKTAGACTION(CAUS)
94 <EXPECT_TAG>CENS  MKTAGACTION(CENS)
95 <EXPECT_TAG>CHAN  MKTAGACTION(CHAN)
96 <EXPECT_TAG>CHAR  MKTAGACTION(CHAR)
97 <EXPECT_TAG>CHIL  MKTAGACTION(CHIL)
98 <EXPECT_TAG>CHR   MKTAGACTION(CHR)
99 <EXPECT_TAG>CHRA  MKTAGACTION(CHRA)
100 <EXPECT_TAG>CITY  MKTAGACTION(CITY)
101 <EXPECT_TAG>CONC  MKTAGACTION(CONC)
102 <EXPECT_TAG>CONF  MKTAGACTION(CONF)
103 <EXPECT_TAG>CONL  MKTAGACTION(CONL)
104 <EXPECT_TAG>CONT  MKTAGACTION(CONT)
105 <EXPECT_TAG>COPR  MKTAGACTION(COPR)
106 <EXPECT_TAG>CORP  MKTAGACTION(CORP)
107 <EXPECT_TAG>CREM  MKTAGACTION(CREM)
108 <EXPECT_TAG>CTRY  MKTAGACTION(CTRY)
109 <EXPECT_TAG>DATA  MKTAGACTION(DATA)
110 <EXPECT_TAG>DATE  MKTAGACTION(DATE)
111 <EXPECT_TAG>DEAT  MKTAGACTION(DEAT)
112 <EXPECT_TAG>DESC  MKTAGACTION(DESC)
113 <EXPECT_TAG>DESI  MKTAGACTION(DESI)
114 <EXPECT_TAG>DEST  MKTAGACTION(DEST)
115 <EXPECT_TAG>DIV   MKTAGACTION(DIV)
116 <EXPECT_TAG>DIVF  MKTAGACTION(DIVF)
117 <EXPECT_TAG>DSCR  MKTAGACTION(DSCR)
118 <EXPECT_TAG>EDUC  MKTAGACTION(EDUC)
119 <EXPECT_TAG>EMIG  MKTAGACTION(EMIG)
120 <EXPECT_TAG>ENDL  MKTAGACTION(ENDL)
121 <EXPECT_TAG>ENGA  MKTAGACTION(ENGA)
122 <EXPECT_TAG>EVEN  MKTAGACTION(EVEN)
123 <EXPECT_TAG>FAM   MKTAGACTION(FAM)
124 <EXPECT_TAG>FAMC  MKTAGACTION(FAMC)
125 <EXPECT_TAG>FAMF  MKTAGACTION(FAMF)
126 <EXPECT_TAG>FAMS  MKTAGACTION(FAMS)
127 <EXPECT_TAG>FCOM  MKTAGACTION(FCOM)
128 <EXPECT_TAG>FILE  MKTAGACTION(FILE)
129 <EXPECT_TAG>FORM  MKTAGACTION(FORM)
130 <EXPECT_TAG>GEDC  MKTAGACTION(GEDC)
131 <EXPECT_TAG>GIVN  MKTAGACTION(GIVN)
132 <EXPECT_TAG>GRAD  MKTAGACTION(GRAD)
133 <EXPECT_TAG>HEAD  MKTAGACTION(HEAD)
134 <EXPECT_TAG>HUSB  MKTAGACTION(HUSB)
135 <EXPECT_TAG>IDNO  MKTAGACTION(IDNO)
136 <EXPECT_TAG>IMMI  MKTAGACTION(IMMI)
137 <EXPECT_TAG>INDI  MKTAGACTION(INDI)
138 <EXPECT_TAG>LANG  MKTAGACTION(LANG)
139 <EXPECT_TAG>LEGA  MKTAGACTION(LEGA)
140 <EXPECT_TAG>MARB  MKTAGACTION(MARB)
141 <EXPECT_TAG>MARC  MKTAGACTION(MARC)
142 <EXPECT_TAG>MARL  MKTAGACTION(MARL)
143 <EXPECT_TAG>MARR  MKTAGACTION(MARR)
144 <EXPECT_TAG>MARS  MKTAGACTION(MARS)
145 <EXPECT_TAG>MEDI  MKTAGACTION(MEDI)
146 <EXPECT_TAG>NAME  MKTAGACTION(NAME)
147 <EXPECT_TAG>NATI  MKTAGACTION(NATI)
148 <EXPECT_TAG>NATU  MKTAGACTION(NATU)
149 <EXPECT_TAG>NCHI  MKTAGACTION(NCHI)
150 <EXPECT_TAG>NICK  MKTAGACTION(NICK)
151 <EXPECT_TAG>NMR   MKTAGACTION(NMR)
152 <EXPECT_TAG>NOTE  MKTAGACTION(NOTE)
153 <EXPECT_TAG>NPFX  MKTAGACTION(NPFX)
154 <EXPECT_TAG>NSFX  MKTAGACTION(NSFX)
155 <EXPECT_TAG>OBJE  MKTAGACTION(OBJE)
156 <EXPECT_TAG>OCCU  MKTAGACTION(OCCU)
157 <EXPECT_TAG>ORDI  MKTAGACTION(ORDI)
158 <EXPECT_TAG>ORDN  MKTAGACTION(ORDN)
159 <EXPECT_TAG>PAGE  MKTAGACTION(PAGE)
160 <EXPECT_TAG>PEDI  MKTAGACTION(PEDI)
161 <EXPECT_TAG>PHON  MKTAGACTION(PHON)
162 <EXPECT_TAG>PLAC  MKTAGACTION(PLAC)
163 <EXPECT_TAG>POST  MKTAGACTION(POST)
164 <EXPECT_TAG>PROB  MKTAGACTION(PROB)
165 <EXPECT_TAG>PROP  MKTAGACTION(PROP)
166 <EXPECT_TAG>PUBL  MKTAGACTION(PUBL)
167 <EXPECT_TAG>QUAY  MKTAGACTION(QUAY)
168 <EXPECT_TAG>REFN  MKTAGACTION(REFN)
169 <EXPECT_TAG>RELA  MKTAGACTION(RELA)
170 <EXPECT_TAG>RELI  MKTAGACTION(RELI)
171 <EXPECT_TAG>REPO  MKTAGACTION(REPO)
172 <EXPECT_TAG>RESI  MKTAGACTION(RESI)
173 <EXPECT_TAG>RESN  MKTAGACTION(RESN)
174 <EXPECT_TAG>RETI  MKTAGACTION(RETI)
175 <EXPECT_TAG>RFN   MKTAGACTION(RFN)
176 <EXPECT_TAG>RIN   MKTAGACTION(RIN)
177 <EXPECT_TAG>ROLE  MKTAGACTION(ROLE)
178 <EXPECT_TAG>SEX   MKTAGACTION(SEX)
179 <EXPECT_TAG>SLGC  MKTAGACTION(SLGC)
180 <EXPECT_TAG>SLGS  MKTAGACTION(SLGS)
181 <EXPECT_TAG>SOUR  MKTAGACTION(SOUR)
182 <EXPECT_TAG>SPFX  MKTAGACTION(SPFX)
183 <EXPECT_TAG>SSN   MKTAGACTION(SSN)
184 <EXPECT_TAG>STAE  MKTAGACTION(STAE)
185 <EXPECT_TAG>STAT  MKTAGACTION(STAT)
186 <EXPECT_TAG>SUBM  MKTAGACTION(SUBM)
187 <EXPECT_TAG>SUBN  MKTAGACTION(SUBN)
188 <EXPECT_TAG>SURN  MKTAGACTION(SURN)
189 <EXPECT_TAG>TEMP  MKTAGACTION(TEMP)
190 <EXPECT_TAG>TEXT  MKTAGACTION(TEXT)
191 <EXPECT_TAG>TIME  MKTAGACTION(TIME)
192 <EXPECT_TAG>TITL  MKTAGACTION(TITL)
193 <EXPECT_TAG>TRLR  MKTAGACTION(TRLR)
194 <EXPECT_TAG>TYPE  MKTAGACTION(TYPE)
195 <EXPECT_TAG>VERS  MKTAGACTION(VERS)
196 <EXPECT_TAG>WIFE  MKTAGACTION(WIFE)
197 <EXPECT_TAG>WILL  MKTAGACTION(WILL)
198      
199 <EXPECT_TAG>{alphanum}+   ACTION_ALPHANUM
200
201 {delim}                   ACTION_DELIM
202
203 {any_but_delim}           ACTION_ANY
204
205 {escape}/{non_at}         ACTION_ESCAPE
206
207 {pointer}                 ACTION_POINTER
208
209 {gen_delim}*{terminator}  ACTION_TERMINATOR
210
211 <<EOF>>                   ACTION_EOF
212
213 .                         ACTION_UNEXPECTED
214
215 %%
216
217 int yywrap()
218 {
219   return 1;
220 }
221
222 #ifdef LEXER_TEST
223 int main()
224 {
225   int tok, res;
226   init_encodings();
227   set_encoding_width(ONE_BYTE);
228   res = open_conv_to_internal("ASCII");
229   if (!res) {
230     gedcom_error("Unable to open conversion context: %s",
231                  strerror(errno));
232     return 1;
233   }
234   tok = gedcom_1byte_lex();
235   while (tok) {
236     switch(tok) {
237       case BADTOKEN: printf("BADTOKEN "); break;
238       case OPEN: printf("OPEN(%d) ", gedcom_lval.level); break;
239       case CLOSE: printf("CLOSE "); break;
240       case ESCAPE: printf("ESCAPE(%s) ", gedcom_lval.string); break;
241       case DELIM: printf("DELIM "); break;
242       case ANYCHAR: printf("%s ", gedcom_lval.string); break;
243       case POINTER: printf("POINTER(%s) ", gedcom_lval.pointer); break;
244       case USERTAG: printf("USERTAG(%s) ", gedcom_lval.tag); break;
245       default: printf("TAG(%s) ", gedcom_lval.tag); break;
246     }
247     tok = gedcom_1byte_lex();
248   }
249   printf("\n");
250   close_conv_to_internal();
251   return 0;
252 }
253 #endif