跳到主内容
文章阅读

使用 BNF 范式编写语言格式规范

2025/12/16351 次阅读6 分钟

一个表示 url的 bnf范式规范


<url> ::= <scheme> ":" <hier_part> | <scheme> ":" <hier_part> "?" <query> | <scheme> ":" <hier_part> "#" <fragment> | <scheme> ":" <hier_part> "?" <query> "#" <fragment>

<scheme> ::= <ALPHA> <scheme_tail> | <ALPHA>

<scheme_tail> ::= <scheme_char> <scheme_tail> | <scheme_char>

<scheme_char> ::= <ALPHA> | <DIGIT> | "+" | "-" | "."

<hier_part> ::= "//" <authority> <path_abempty> | <path_absolute> | <path_rootless> | <path_empty>

<authority> ::= <userinfo> "@" <host> ":" <port> | <userinfo> "@" <host> | <host> ":" <port> | <host>

<userinfo> ::= <userinfo_char> <userinfo> | <userinfo_char>

<userinfo_char> ::= <unreserved> | <pct_encoded> | <sub_delims> | ":"

<host> ::= <IP_literal> | <IPv4address> | <reg_name>

<IP_literal> ::= "[" <IPv6address> "]"

<IPv6address> ::= <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16>

<h16> ::= <HEXDIG> | <HEXDIG> <HEXDIG> | <HEXDIG> <HEXDIG> <HEXDIG> | <HEXDIG> <HEXDIG> <HEXDIG> <HEXDIG>

<IPv4address> ::= <dec_octet> "." <dec_octet> "." <dec_octet> "." <dec_octet>

<dec_octet> ::= <DIGIT> | <DIGIT> <DIGIT> | "1" <DIGIT> <DIGIT> | "2" <DIGIT> <DIGIT>

<reg_name> ::= <reg_name_char> <reg_name> | <reg_name_char>

<reg_name_char> ::= <unreserved> | <pct_encoded> | <sub_delims>

<port> ::= <DIGIT> <port> | <DIGIT>

<path_abempty> ::= "/" <segment> <path_abempty> | "/" <segment> | <path_empty>

<path_absolute> ::= "/" <segment_nz> <path_abempty> | "/"

<path_rootless> ::= <segment_nz> <path_abempty> | <segment_nz>

<path_empty> ::= <ALPHA>

<segment> ::= <pchar> <segment> | <pchar>

<segment_nz> ::= <pchar> <segment> | <pchar>

<pchar> ::= <unreserved> | <pct_encoded> | <sub_delims> | ":" | "@"

<query> ::= <query_char> <query> | <query_char>

<query_char> ::= <pchar> | "/" | "?"

<fragment> ::= <fragment_char> <fragment> | <fragment_char>

<fragment_char> ::= <pchar> | "/" | "?"

<pct_encoded> ::= "%" <HEXDIG> <HEXDIG>

<unreserved> ::= <ALPHA> | <DIGIT> | "-" | "." | "_" | "~"

<sub_delims> ::= "!" | "$" | "&" | "'" | "(" | ")" | "*" | "+" | "," | ";" | "="

<ALPHA> ::= "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"

<DIGIT> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

<HEXDIG> ::= <DIGIT> | "a" | "b" | "c" | "d" | "e" | "f" | "A" | "B" | "C" | "D" | "E" | "F"

变量{{var}}


<variable> ::= "{{" <variable_name> "}}"

<variable_name> ::= <letter> <variable_name_tail> | <letter>

<variable_name_tail> ::= <variable_name_char> <variable_name_tail> | <variable_name_char>

<variable_name_char> ::= <letter> | <digit> | "_"

<letter> ::= "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"

<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

bnf编译和测试网站

https://bnfplayground.pauliankline.com/

返回顶部