Ruteplans-grammatik omskrevet til brug for scanner/leksikalsk analyse & parser

Til leksikalsk analyse skal man opbygge tokens svarende til valg

 

Oprindelige grammatik

regionskoereplan = koereplan {koereplan}.

koereplan = "#" ciffer ciffer [ciffer] afgang {afgang}.

afgang = by tidspunkt.

by = bogstav {bogstav}.

tidspunkt = time ":" minut.

time = ("0" | "1") ciffer | "2" ("0" | "1" | "2" | "3").

minut = ("0" | "1" | "2" | "3" | "4" | "5") ciffer.

bogstav = "a"|"b"|"c"|"d"|"e"|"f"|"g"|"h"|"i"|"j"|"k"|"l"|"m"|"n"|

          "o"|"p"|"q"|"r"|"s"|"t"|"u"|"v"|"x"|"y"|"z".

ciffer = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".

 

Konkretisering:

regionskoereplan = koereplan {koereplan}.
koereplan =rute  afgang {afgang}.
afgang = by tidspunkt.

Evt. hvis tidspunkt vælges opdelt i grammatikken

tidspunkt = time kolon minut.
time = tocifre.
minut = tocifre.

Hertil kommer så følgende semantisk regler :  0<=time<=23    og   0<=minut<=60

Tokens beskrevet som regulære udtryk

rute =

# [0-9]([0-9]|[0-9][0-9])

 

By

[a-z]+

 

tidspunkt

[0-1][0-9]:[0-5][0-9]

Hvis tidspunkt IKKE opdelt i ebnf

Kolon

:

Hvis tidspunkt opdelt i ebnf

tociffer

[0-9][0-9]

Hvis tidspunkt opdelt i ebnf