Professional Documents
Culture Documents
Understanding URL Grammar With BNF and EBNF
Understanding URL Grammar With BNF and EBNF
<generic_url> ::= <scheme> "://" <host> [ ":" <port> ] <path> [ "/” ] [ "?" <query> ]
<letter> ::= "a" | "b" | ... | "z" | "A" | "B" | ... | "Z"
BNF Grammar
<alphanum> ::= <letter> | <digit>
<ipv6address> ::= <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16>
<sub_delims> ::= "!" | "$" | "&" | "'" | "(" | ")" | "*" | "+" | "," | ";" | "="
<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
URL Grammar Explanation
URL Mailto URL Generic URL
Can either be "mailto" or Used to create links that It tells the browser where to
generic URL open an email client find resource on the internet
Alternative = |
Optional = [ ]
Repetitions = { }
Grouping = ( )
EBNF Rules
Ø Terminals are enclosed with ("..." or '...')
Ø For Non-Terminals, ("<...>") can be omitted
Ø For EBNF, ::= becomes just =
Ø In EBNF, semicolon ";" marks the end of a rule
Ø Include mechanisms for enhancements, defining the number of
repetitions, excluding alternatives, comments, etc.
Sources:
1. https://en.wikipedia.org/wiki/Extended_Backus–Naur_form
2. https://www.freecodecamp.org/news/what-are-bnf-and-ebnf/
03
BNF to EBNF
Conversion
BNF to EBNF Conversion
url = mailto_url | generic_url;
generic_url = scheme "://" host [ “:” port] path [“/”] ["?" query];
port = digit+;
BNF to EBNF Conversion
path = {"/" <segment>};
ipv6address = h16 ":" h16 ":" h16 ":" h16 ":" h16 ":" h16 ":" h16 ":" h16;
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
h16 = hexdigit{1,4};
BNF to EBNF Conversion
hexdigit = <digit> | "A" | "B" | "C" | "D" | "E" | "F"
segment = pchar*;
query = pchar*;
recipient = pchar*;
sub_delims = "!" | "$" | "&" | "'" | "(" | ")" | "*" | "+" | "," | ";" | "=";
04
Examples
URL Examples with Parse Trees
Example 1:
mailto:cjldellosa@mcm.edu.ph
<url>
<mailto_url>
<recipient>
“mailto:”
<scheme> <query>
<path>
“://” <host> “?”
“https” <pchar>
"/" <segment>
<hostname>
<pchar> q=sitti+tattooed+on+my+mind
<label> <label> <label>
<letter>
music youtube com
search
Example 3: <pchar>
https://www.facebook.com/photo/?fbid=65109
<url> <unreserved>
<generic_url> <digit>
“https” <scheme>
<query>
<path> “?" 65109
"://" <host> <pchar>
<pchar>
<hostname> "/" <segment> "/"
<unreserved>
<label> <pchar> <sub_delims>
<label>
<label> <letter>
<letter> <unreserved>
"." "." <letter> "="
<letter>
<letter>
www com fbid
facebook
photo
Example 4:
https://mcm.codechum.com/student/classes
<url>
<generic_url>
<scheme> <path>
“://” <host>
“https” <hostname>
"/" <segment> “/” <segment>
<pchar> <pchar>
<label> “.” <label> “.” <label>
<unreserved> <unreserved>
<letter> <letter> <letter>
<letter> <letter>
mcm codechum com
student classes
Example 5:
https://127.0.0.1:8080/seb/to/resource
<url>
<generic_url>
<path>
<scheme> <port>
”://” <host>
":" "/" <segment>
<segment> <segment>
“https” <ipv4address> <digit> "/" "/" <pchar>
<pchar> <pchar>
<digit> <digit>
<unreserved> <unreserved> <unreserved>
"." <digit> <digit> “.” 8080
“.”
127 1 <letter> <letter> <letter>
0 0
seb to resource
Thanks for
listening!
Do you have any questions?