Регулярное выражение для числовой константы - PullRequest
1 голос
/ 21 июня 2010

В книге Теории вычислений Сипсера дано следующее:

числовая константа, которая может включать дробную часть и / или знак, может быть описана как член языка

(+ U - U e) (D + U D +. D * UD *. D +)

, где D = {0,1,2,3,4,5,6,7,8, 9}алфавит десятичных цифр.Примеры сгенерированных строк: 72, 3.14159, +7. И -.01.

Здесь я не могу понять, какова цель объединения D + или D *?Кроме того, почему добавлена ​​3-я точка?

Пожалуйста, кто-нибудь прояснит мои сомнения.

1 Ответ

3 голосов
/ 21 июня 2010

Он пытается охватить следующие случаи:

5    #matched by D+
.5   #matched by D*.D+
5.   #matched by D+.D*
5.5  #matched by both D*.D+ and D+.D*
.    #not matched

Символ . в выражениях является десятичным разделителем.Вы можете прочитать выражение следующим образом:

( + U - U e) ( (D+) U (D+ . D*) U (D* . D+) )
...