當前位置:編程學習大全網 - 編程語言 - 請問什麽是程序設計語言中的正則表達式和BNF表示法?

請問什麽是程序設計語言中的正則表達式和BNF表示法?

括號的意思:將 ( 和 ) 之間的表達式定義為“組”(group),並且將匹配這個表達式的字符保存到壹個臨時區域(壹個正則表達式中最多可以保存9個),它們可以用 \1 到\9 的符號來引用。

|的意思:將兩個匹配條件進行邏輯“或”(Or)運算。例如正則表達式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。

*的意思:匹配0或多個正好在它之前的那個字符。例如正則表達式.*意味著能夠匹配任意數量的任何字符。

所以妳給的那個例子00(0|1)*可以用來匹配00或者001或者000或者0000或者0011,但是不能匹配011等等。

具體定義還是要多參考壹下下面的文章:

/~yhf/tao_regexps_zh.html

正則表達式,Regular Expression(也稱為“regex”或“regexp”),是壹種用來描述文本模式的特殊語法。壹個正則表達式由普通字符(例如字符 a 到 z)以及特殊字符(稱為元字符,如/、*、?等)組成。簡單地說,壹個正則表達式就是妳需要匹配的字符串。例如,正則表達式“A*B”匹配字符串“ACCCB”但是不匹配“ACCCC”。

什麽是巴科斯範式?

巴科斯範式(BNF: Backus-Naur Form 的縮寫)是由 John Backus 和 Peter Naur 首先引入的用來描述計算機語言語法的符號集。

現在,幾乎每壹位新編程語言書籍的作者都使用巴科斯範式來定義編程語言的語法規則。

巴科斯範式的內容

在雙引號中的字("word")代表著這些字符本身。而double_quote用來代表雙引號。

在雙引號外的字(有可能有下劃線)代表著語法部分。

尖括號( < > )內包含的為必選項。

方括號( [ ] )內包含的為可選項。

大括號( { } )內包含的為可重復0至無數次的項。

豎線( | )表示在其左右兩邊任選壹項,相當於"OR"的意思。

::= 是“被定義為”的意思。

巴科斯範式示例

這是用BNF來定義的Java語言中的For語句的實例:

FOR_STATEMENT ::=

"for" "(" ( variable_declaration |

( expression ";" ) | ";" )

[ expression ] ";"

[ expression ] ";"

")" statement

這是Oracle packages的BNF定義:

package_body ::= "package" package_name "is"

package_obj_body { package_obj_body }

[ "begin" seq_of_statements ]

"end" [ package_name ] ";"

package_obj_body ::= variable_declaration

| subtype_declaration

| cursor_declaration

| cursor_body

| exception_declaration

| record_declaration

| plsql_table_declaration

| procedure_body

| function_body

procedure_body ::= "procedure" procedure_name

[ "(" argument { "," argument } ")" ]

"return" return_type

"is"

[ "declare" declare_spec ";" { declare_spec ";" } ]

"begin"

seq_of_statements

[ "exception" exception_handler { exception_handler } ]

"end" [ procedure_name ] ";"

statement ::= comment

| assignment_statement

| exit_statement

| goto_statement

| if_statement

| loop_statement

| null_statement

| raise_statement

| return_statement

| sql_statement

| plsql_block

這是用BNF來定義的BNF本身的例子:

syntax ::= { rule }

rule ::= identifier "::=" expression

expression ::= term { "|" term }

term ::= factor { factor }

factor ::= identifier |

quoted_symbol |

"(" expression ")" |

"[" expression "]" |

"{" expression "}"

identifier ::= letter { letter | digit }

quoted_symbol ::= """ { any_character } """

擴展的巴科斯範式 Augmented BNF

RFC2234 定義了擴展的巴科斯範式(ABNF)。近年來在Internet的定義中ABNF被廣泛使用。ABNF做了更多的改進,比如說,在ABNF中,尖括號不再需要。

  • 上一篇:新買了個psp有幾個問題 資深高手進
  • 下一篇:求助!!!EDA課程設計 用與非門設計的紅綠燈控制
  • copyright 2024編程學習大全網