數的表達式解析,正則定義以及DFA

目標

識別unsigned float,float,unsigned int,int。
整數類型下識別八進制(076),十進制(76),十六進制表示法(0x7f)。

構造正則定義

基本正則定義

ϵ\epsilon\rightarrow 空串

SpaceSpace\rightarrow 空格

Spaces(Space)(Space)Spaces\rightarrow (Space)(Space)^*

Digit(0123456789)Digit\rightarrow (0|1|2|3|4|5|6|7|8|9)

DigitsDigitDigitDigits\rightarrow DigitDigit^*

HexaDigits(123456789abcdefABCDEF)(DigitabcdefABCDEF)HexaDigits\rightarrow (1|2|3|4|5|6|7|8|9|a|b|c|d|e|f|A|B|C|D|E|F)(Digit|a|b|c|d|e|f|A|B|C|D|E|F)^*

OctalDigits(1234567)(01234567)OctalDigits\rightarrow (1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)^*

Signed(ϵ+)Signed\rightarrow (\epsilon|+|-)

HexaDecimal0(xX)HexaDigitsHexaDecimal\rightarrow 0(x|X)HexaDigits

Decimal(123456789)(1234567890)Decimal\rightarrow (1|2|3|4|5|6|7|8|9)(1|2|3|4|5|6|7|8|9|0)^*

OctalDecimal0OctalDigitsOctalDecimal\rightarrow 0OctalDigits

UnsigneIntOctalDecimalDecimalHexaDecimalUnsigneInt\rightarrow OctalDecimal|Decimal|HexaDecimal

IntSigned(UnsignedInt)Int \rightarrow Signed(UnsignedInt)

Fraction.DigitsFraction\rightarrow.Digits

Exponentϵ((eE)(Signed)(Digits))Exponent\rightarrow \epsilon|((e|E)(Signed)(Digits))

UnsignedFloat(DigitsFractionExponent)ExponentUnsignedFloat\rightarrow (Digits|Fraction|Exponent)-Exponent

Float(Signed)(UnsignedFloat)Float\rightarrow(Signed)(UnsignedFloat)

EqualSpace=SpaceEqual\rightarrow Space^*=Space^*

ID(_Letter)(_LetterNumber)ID\rightarrow (\_|Letter)(\_|Letter|Number)^*
標識符,以下劃線或字母開頭,後續可以接着下劃線或字母或數字

數的正則定義

(float)(Spaces)(ID)(Equal)(Float)有符號浮點數\rightarrow (float)(Spaces)(ID)(Equal)(Float)

(unsigned float)(Spaces)(ID)(Equal)(UnsignedFloat)無符號浮點數\rightarrow (unsigned\space float)(Spaces)(ID)(Equal)(UnsignedFloat)

(int)(Spaces)(ID)(Equal)(Int)有符號整數\rightarrow (int)(Spaces)(ID)(Equal)(Int)

(unsigned int)(Spaces)(ID)(Equal)(UnsignedInt)無符號整數\rightarrow (unsigned\space int)(Spaces)(ID)(Equal)(UnsignedInt)

();數的定義\rightarrow (有符號浮點數|無符號浮點數|有符號整數|無符號整數);;作爲結束符。

正則定義轉NFA(非確定的有窮自動機)

ϵ\epsilon邊轉換後結果,加雙引號表示字符串。

無符號浮點數(unsigned float)(Spaces)(ID)(Equal)(UnsignedFloat)

ID

在這裏插入圖片描述

unsigned float

在這裏插入圖片描述

Equal

在這裏插入圖片描述

UnsignedFloat

UnsignedFloat(DigitsFractionExponent)ExponentUnsignedFloat\rightarrow (Digits|Fraction|Exponent)-Exponent
浮點數的三個部分可以在一定條件下自由組合。指數位不可以單獨出現。
在這裏插入圖片描述

Digits

在這裏插入圖片描述

Fraction

在這裏插入圖片描述

Exponent

在這裏插入圖片描述

Signed

在這裏插入圖片描述

有符號浮點數(float)(Spaces)(ID)(Equal)(Float)

在這裏插入圖片描述

float

在這裏插入圖片描述

Float

在這裏插入圖片描述

無符號整數(unsigned int)(Spaces)(ID)(Equal)(UnsignedInt)

unsigned int

在這裏插入圖片描述

UnsignedInt

UnsigneIntOctalDecimalDecimalHexaDecimalUnsigneInt\rightarrow OctalDecimal|Decimal|HexaDecimal

OctalDecimal

在這裏插入圖片描述

Decimal

畫錯了,Start0Start\rightarrow 0的邊應該是1234567891|2|3|4|5|6|7|8|9,不能以0開頭。
在這裏插入圖片描述

HexaDecimal

畫錯了,343\rightarrow 4不能以0開頭,否則毫無意義。
在這裏插入圖片描述

UnsignedInt(簡化後)

在這裏插入圖片描述

有符號整數(int)(Spaces)(ID)(Equal)(Int)

Int

在這裏插入圖片描述

數的識別(簡化後)

在這裏插入圖片描述

定義關係依賴圖

下圖爲正則定義之類的依賴關係圖,爲了保證每一步開發完都能測試,將從葉節點開始自底向上開發。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章