我想知道如何使用 EBNF 表示“日期时间”格式,例如“yyyy-MM-dd hh:mm”。
下面显示了使用 EBNF 制定此公式的一种可能方法。该表达式仅解析合法的年份、月份和时间戳。但是,它允许任何月份最多有 31 天。
Timestamp = [ "-" ] Year "-" Month "-" Day " " Time ;
Year = Digit Digit Digit Digit ;
Month = "0" Digit | "1" "0".."2" ;
Day = "0".."2" Digit | "3" "0".."1" ;
Time = Hour ":" Minute ;
Hour = "0".."1" Digit | "2" "0".."3" ;
Minute = "0".."5" Digit ;
Digit = "0".."9" ;
只是一个想法,将语法和语义的关注点分开不是很正常吗?
所以语法就是 而如何将 12 或 31 的限制排除在语法之外的语义。 上面仍然允许无效日期,例如 4 月 31 日,无论如何都应该处理。