2012-03-30 77 views
-1

我不知道如何做到這一點,並且我沒有發現有關如何執行此操作的良好資源[。]我正在嘗試使用帶註釋的EBNF生成規則這是兩個正則表達式之間的差異,並將其轉換爲(na | f?)lex語法規範規則[。]問題是,我沒有辦法通常這樣做[。] {3}有沒有辦法做到這種使用克萊尼代數,喜歡的方式,你可以在上下文無關文法使用空匹配交替[?][af]?lex正則表達式差異

回答

1

什麼是EBNF產生式規則看起來像(你可以寫在EBNF?)

正則表達式之間的設置差異A\B等效於nt與補碼相交:A&~B:由A匹配的字符串集合,不含任何與B匹配的字符串.Flex和Alex都不支持其正則表達式語言中的這種語義。

這種形式的表達式仍然表示一種常規語言,因此具有等價的自動機,正則表達式僅基於交替和Kleene運算符存在。這個等價的表達式不容易找到,它取決於A和B的具體內部。也就是說,我們不能只將A和B插入一般的正則表達式公式,以便結果表示集合差異。原始的A和B不會出現在設置的差異正則表達式中。

+0

我明白了。感謝迄今爲止的信息,這對於理解爲什麼我無法真正使用Visual Basic提供的語法來分析它是因爲這樣一些規則: XMLProcessingValue :: = <任何不支持的XMLString包含字符串> ......除非書面EBNF規則是 「>」: 「?>」 XMLProcessingValue :: = 了XmlString \ 是嗎?對於正式語言的機制我還是一個新手。 – user1303374 2012-04-03 14:47:18

+0

EBNF是一種正式定義的語法寫作語言(查看維基百科)。它沒有設置差異的操作員。語法作者在標準EBNF中插入一些非正式英語,以表達他們無法表達的內容。 – Kaz 2012-04-03 16:10:19

+0

有一種方法可以使用正則表達式,而不用補集或交集操作符來排除像'ab'這樣的圖。即:'(a * | [^ a] * |([^ a] *(a [^ b]))*)[^ b] *'。也就是說,匹配所有'a'或全部非'a'的所有字符串,或匹配由'a'和非'b'終止的非'a'的零個或多個段,允許所有這些可能性的並集由0或更多的非'b'序列落後 – Kaz 2012-04-03 16:25:31