Article View: be.comp.programming
Article #7408lex probleempje
From: Bart Vandewoestyne
Date: Mon, 09 Sep 2002 20:03
Date: Mon, 09 Sep 2002 20:03
109 lines
5046 bytes
5046 bytes
Ben hier mijn eerste lex stapjes aan het zetten, en bij wijze van
oefening probeer ik een lexer te maken voor een .html file zoals
geëxporteerd uit een bookmark list van Netscape 4.77.
Alle tags herkennen enzoverder lukt fijn... doch er is één probleem:
ik slaag er niet in om de gewone tekst uit de beschrijving van een URL
of folder te herkennen als text.
Als ik te 'algemeen' ben in mijn regular expression voor die text, dan
gebeurt het dat er ook html tags als text herkend worden, en als ik te
'streng' ben, dan zou het wel eens kunnen gebeuren dat bepaalde tekst
die echt tekst is niet gematcht wordt.
Ik vermoed dat 'start conditions' mij eventueel zouden kunnen helpen,
doch ik heb nog niet goed uitgedokterd hoe ik ze dan best gebruik...
een 'BEGIN TEXT;' zetten bij de rule voor '<' en dan in de rule voor
TEXT terug 'BEGIN 0' zetten lukt precies ook niet...
%{
#include "bookmarks.h"
%}
%START TEXT
%%
\<![^>]*\> {
printf("COMMENT = %s\n", yytext);
}
\< {
printf("SMALLER = %s\n", yytext);
}
\> {
printf("BIGGER = %s\n", yytext);
BEGIN TEXT;
}
= {
printf("EQUAL = %s\n", yytext);
}
\" {
printf("QUOTE = %s\n", yytext);
}
\/ {
printf("SLASH = %s\n", yytext);
}
\http:\/\/[^\"]* {
printf("URL = %s\n", yytext);
}
[0-9]+ {
printf("NUMBER = %s\n", yytext);
}
ADD_DATE {
printf("ADD_DATE = %s\n", yytext);
}
LAST_MODIFIED {
printf("LAST_MODIFIED = %s\n", yytext);
}
LAST_VISIT {
printf("LAST_VISIT = %s\n", yytext);
}
FOLDED {
printf("FOLDED = %s\n", yytext);
}
A {
printf("A = %s\n", yytext);
}
HREF {
printf("HREF = %s\n", yytext);
}
H[0-9]* {
printf("H = %s\n", yytext);
}
TITLE {
printf("TITLE = %s\n", yytext);
}
DD {
printf("DD = %s\n", yytext);
}
DL {
printf("DL = %s\n", yytext);
}
DT {
printf("DT = %s\n", yytext);
}
p {
printf("p = %s\n", yytext);
}
<TEXT>[^\<^\>]* {
printf("TEXT = %s\n", yytext);
BEGIN 0;
}
. ;
%%
int yywrap(void) {
return 1;
}
Hoe los ik dit best/properst op?
Greetzzz,
mc303
--
Ing. Bart Vandewoestyne Bart.Vandewoestyne@pandora.be
Hugo Verrieststraat 48 GSM: +32 (0)478 397 697
B-8550 Zwevegem http://users.pandora.be/vandewoestyne
----------------------------------------------------------------------
"Any fool can know, the point is to understand." - Albert Einstein
Technical Details
Message-ID:
<3D7CFE96.28027C44@pandora.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-06!sn-xit-04!supernews.com!diablo.theplanet.net!kibo.news.demon.net!demon!aotearoa.belnet.be!naxos.belnet.be!news.belnet.be!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII X-Google-Thread: fcea4,a9122c2ea4eb0dd2,start X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2002-09-09 14:06:36 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-06!sn-xit-04!supernews.com!diablo.theplanet.net!kibo.news.demon.net!demon!aotearoa.belnet.be!naxos.belnet.be!news.belnet.be!not-for-mail From: Bart Vandewoestyne <Bart.VandewoestyneNOSPAM@pandora.be> Newsgroups: be.comp.programming Subject: lex probleempje Date: Mon, 09 Sep 2002 22:03:34 +0200 Organization: MyHome Lines: 109 Message-ID: <3D7CFE96.28027C44@pandora.be> Reply-To: Bart.Vandewoestyne@pandora.be NNTP-Posting-Host: seven.kulnet.kuleuven.ac.be Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-Trace: naxos.belnet.be 1031601815 11275 134.58.127.12 (9 Sep 2002 20:03:35 GMT) X-Complaints-To: abuse@belnet.be NNTP-Posting-Date: Mon, 9 Sep 2002 20:03:35 +0000 (UTC) X-Mailer: Mozilla 4.77 [en] (X11; U; Linux 2.4.19 i686) X-Accept-Language: nl-BE, nl, en, de Cache-Post-Path: seven.kulnet.kuleuven.ac.be!unknown@localhost X-Cache: nntpcache 2.4.0b5 (see http://www.nntpcache.org/)