Thread View: be.comp.programming
3 messages
3 total messages
Started by Bart Vandewoestyne
Mon, 09 Sep 2002 20:03
lex probleempje
Author: 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
Re: lex probleempje
Author: Nicolas Barbier
Date: Mon, 09 Sep 2002 23:24
Date: Mon, 09 Sep 2002 23:24
43 lines
2460 bytes
2460 bytes
Bart Vandewoestyne wrote:
> 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.
Ik weet niet hoe zo een bestand eruitziet, maar ik reply toch maar :-).
Een paar (vrij flauwe) opmerkingen:
> \<![^>]*\> {
Moet > binnen de [] ook niet ge-escaped worden? Het kan wel dat het gewoon
nooit ge-escaped moet worden ;-).
> \http:\/\/[^\"]* {
Wat doet die \ hier? (Als dat in ANSI C een betekenis heeft, matcht het
iets anders dan je wil).
> <TEXT>[^\<^\>]* {
Die tweede ^ moet er volgens mij niet staan, en ik denk dat > mag
voorkomen in de gewone tekst (buiten de tags dus) in HTML.
Nu heb ik naar aanleiding van je post even een dingetje gemaakt om een
HTML-achtige syntax te interpreteren. Als je er wat aan hebt, ik heb het
online gezet:
http://www.nicolas.barbier.easynet.be/test.lex
Ik heb het wel enkel getest met flex (lex zit blijkbaar niet bij Debian
main?). Het zal ook wel niet erg leesbaar zijn (vooral de namen van de
start conditions zijn belachelijk ;-). Een test file vind je op:
http://www.nicolas.barbier.easynet.be/test.html
(Ondanks de naam heeft deze file niets met HTML te maken :-).
--
Nicolas Barbier
MY_PROFILE: http://users.pandora.be/HATE/profiles/itsme/
HOW_TO_QUOTE: http://www.houghi.org/quote/ /* Dutch */
Re: lex probleempje
Author: Bart Vandewoestyne
Date: Tue, 10 Sep 2002 18:55
Date: Tue, 10 Sep 2002 18:55
68 lines
3637 bytes
3637 bytes
Nicolas Barbier wrote:
>
> Ik weet niet hoe zo een bestand eruitziet, maar ik reply toch maar :-).
>
> Een paar (vrij flauwe) opmerkingen:
>
> > \<![^>]*\> {
>
> Moet > binnen de [] ook niet ge-escaped worden?
Yep, dat lijkt me inderdaad logisch. Wel raar dat het op deze manier
dan ook werkte...
> > \http:\/\/[^\"]* {
>
> Wat doet die \ hier? (Als dat in ANSI C een betekenis heeft, matcht het
> iets anders dan je wil).
Die \ was gewoon een typo en mag er dus inderdaad niet staan :-)
> > <TEXT>[^\<^\>]* {
>
> Die tweede ^ moet er volgens mij niet staan, en ik denk dat > mag
> voorkomen in de gewone tekst (buiten de tags dus) in HTML.
Nouja, voorlopig ga ik ervan uitgaan dat mijn tekst geen > mag
bevatten... later kijken we daar dan wel eens naar :-)
> Nu heb ik naar aanleiding van je post even een dingetje gemaakt om een
> HTML-achtige syntax te interpreteren. Als je er wat aan hebt, ik heb het
> online gezet:
>
> http://www.nicolas.barbier.easynet.be/test.lex
Ik heb je filetje eens vluchtig bekeken en ik zie dat je ook van die
startcondities gebruik maakt. Dat heeft me aangespoord om daar ook
verder op door te gaan, en ik ben gekomen tot hetgeen staat op:
http://mc303.ulyssis.org/downloads/bookmarks.tar.gz
> Ik heb het wel enkel getest met flex (lex zit blijkbaar niet bij Debian
> main?).
Ik gebruik ook flex hoor:
mc303@forsythe:~/my_programs$ ls -al `which lex`
lrwxrwxrwx 1 root root 4 Sep 10 17:49 /usr/bin/lex
-> flex
Ik vermoed dat flex compatibel is met lex... dat het enkel eventuele
uitbreidingen bevat.
Wie zin heeft mag mijn lexer gerust testen op zijn bookmarks file, en
mochten er dingen niet juist herkend worden, gelieve me dan de
bookmarkfile door te sturen...
Bon, en nu mijn lexer al tamelijk naar behoren werkt kunnen we
overgaan tot het schrijven van de parser, joepie :-)
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
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads