[Jlex/CUP] adresgrammatica

Pagina: 1
Acties:
  • 189 views sinds 30-01-2008
  • Reageer

  • hennink
  • Registratie: Augustus 2000
  • Laatst online: 00:14
Is er toevallig iemand die ooit eens een grammatica heeft gemaakt waarmee je een adresstring in een keer kan uitpluizen naar adresnaam, nummer en eventueel suffix
Dus bijvoorbeeld
Kerklaan 243
Kerklaan 24 3e
Johan de 2e straat 24
Johan de 2e straat 24 e

etc,
zit nu op
[0] NT$0 ::=
[1] adres ::= S SN SU NT$0 SEMI
[2] $START ::= adres EOF
[3] S ::= SN
[4] SN ::= WOORD SN2
[5] SN2 ::= WOORD
[6] SN2 ::= GETAL SN
[7] N ::= GETAL
[8] SU ::= CIJFER
[9] SU ::= LETTER
[10] SU ::=

alleen deze resolved N ::=getal al niet eens,
zodat je nooit aan een geldig adres komt in je parser.

alles wat aan kan, gaat kapot. De vraag is alleen wanneer.


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik denk dat je eerst goed moet uitzoeken wat de syntax van een adres allemaal kan zijn

code:
1
2
3
4
5
6
adres
   = [straat]:identifier huis_nummer

huis_nummer
   = [nummer]:integer [sufix]:identifier
    ;


Hiermee kan je dus schrijven Hoofweg 11, Hoofweg 100 a, Kees de Vries straat 100. Volgens mij moet je hier wel een heel eind komen.

[edit]
oeps... die laatste kan niet... :P

[ Voor 35% gewijzigd door Alarmnummer op 11-08-2003 14:02 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Helaas is dit niet te parsen zonder voorkennis; Plein 1813 is een straatnaam maar Plein 1 is een straatnaam met een huisnummer :)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • hennink
  • Registratie: Augustus 2000
  • Laatst online: 00:14
inderdaad, daar ben ik dan ook mee bezig.
Maar kan niet ergens een document vinden met adresbeschrijvingen in Nederland o.i.d.
Het meest irritante is echter bijvoorbeeld: plein 1813 24 en kerklaan 24 3
In het eerste geval is het gewoon nummer 24 op straat plein 1813, goed het tweede voorbeeld moge duidelijk zijn dat dit nummer 24 met suffix 3 is.
Alleen hoe vang je deze met een grammatica.
Oh ja.
CIJFER = [0-9]
GETAL = {CIJFER}+
LETTER= [a-zA-Z]
WOORD = {LETTER}+
SEMI = ;

alles wat aan kan, gaat kapot. De vraag is alleen wanneer.


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Het is ook wel handig om erbij te vertellen dat Cup LALR parsers genereerd.

  • hennink
  • Registratie: Augustus 2000
  • Laatst online: 00:14
MSalters schreef op 11 August 2003 @ 14:01:
Helaas is dit niet te parsen zonder voorkennis; Plein 1813 is een straatnaam maar Plein 1 is een straatnaam met een huisnummer :)
Goed, maar bij Plein 1813 komt dan nog een nummer voor het huisnummer erachter en dat is wel te herkennen.
Het nare zit hem in een grammaticale beschrijving voor het straatnaamgedeelte .
Heb nu:
adres ::= S:s SN:n SU:su
{:
System.out.println("straat: " + s);
System.out.println("nummer: " + n);
System.out.println("suffix: " + su);
System.exit(0);
:}SEMI ;

S ::= SN:s
{:
RESULT=s;
:}
;

SN ::= WOORD:w SN2:s
{:
RESULT = w + s;
:}
;

SN2 ::= WOORD:w
{:
RESULT = w;
:}
| GETAL:g SN:s
{:
RESULT = g;
// moet eigenlijk g +s zijn maar geeft een optelfout omdat g een Integer is en s een Object, komt later wel, eerst de herkenning.
:}
;


N ::= GETAL:g
{:
RESULT = g;
:}
;

SU ::= CIJFER:c
{:
RESULT = c;
:}
|
LETTER:l
{:
RESULT=l;
:}
|
;

alles wat aan kan, gaat kapot. De vraag is alleen wanneer.


  • hennink
  • Registratie: Augustus 2000
  • Laatst online: 00:14
Alarmnummer schreef op 11 August 2003 @ 14:08:
Het is ook wel handig om erbij te vertellen dat Cup LALR parsers genereerd.
Nam even aan dat dat wel bekend is bij diegene die dit zouden lezen.
Hier dan de manuals:
http://www.cs.princeton.e...dern/java/CUP/manual.html
http://www.hio.hen.nl/~vanleeuw/pse/lexcup/jlex-manual.html

alles wat aan kan, gaat kapot. De vraag is alleen wanneer.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
In de categorie verdere problemen: huisnummertoevoegingen zijn niet genormeerd. In Haarlem heb je bv 3 rood en 3 blauw. Woonboten hebben soms alleen een straatnaam+locatie, zonder huisnummer (dacht ik)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:33

Creepy

Tactical Espionage Splatterer

MSalters schreef op 11 August 2003 @ 15:53:
In de categorie verdere problemen: huisnummertoevoegingen zijn niet genormeerd. In Haarlem heb je bv 3 rood en 3 blauw. Woonboten hebben soms alleen een straatnaam+locatie, zonder huisnummer (dacht ik)
En niet te vergeten dat er straten zijn met 1 huis, en je raadt het al, dat huis heeft GEEN huisnummer ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • hennink
  • Registratie: Augustus 2000
  • Laatst online: 00:14
aaaaaaaaaaahhhhhhhhhhhhhhhhhh,

de echte uitzonderingen zijn ook niet allemaal te vangen.
Maar zit het meest met dus het plein 1813 13 voorbeeld.

alles wat aan kan, gaat kapot. De vraag is alleen wanneer.


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 30-10 04:03

alienfruit

the alien you never expected

Je zou misschien PTT's KIX code handleiding erbij kunnen pakken, volgens mij wordt daar wel beschreven wat alle mogelijke manieren zijn voor straatnamen. Kun je er meteen KIX code generen voor op de enveloppe is de sorteermachine ook weer blij :)

  • hennink
  • Registratie: Augustus 2000
  • Laatst online: 00:14
OK,

bedankt allemaal.
Heb het mezelf iets makkelijker gemaakt door een woord als [a-zA-Z0-9] te zien en in de aangeleverde data de vreemde combi's als plein 1813 13 te laten aanleveren als plein1813 13

alles wat aan kan, gaat kapot. De vraag is alleen wanneer.

Pagina: 1