Bevor Sie eine XML-Grammatikanalyse durchführen, müssen Sie zunächst die Grundregeln der XML-Syntax verstehen:
Lexikalische Funktionen: 1) XML unterscheidet zwischen Groß- und Kleinschreibung, z. B. Elementnamen in öffnende und schließende Tags Die Groß- und Kleinschreibung sollte konsistent sein
2) XML-reservierte Markierungszeichen sind: < > Das Symbol 2) Die XML-Beschreibung wird mit geschlossen, die optionale Beschreibungen wie Version und Codierung enthält, wie z : DOCTYPE mydoc SYSTEM „mydoc.dtd“> 4) XML-Anweisungen werden mit und reservierten Zeichenfolgen geöffnet und mit ?> geschlossen, wie zum Beispiel: 5) XML-Kommentare werden mit geschlossen, wie zum Beispiel:
6) XML-Elemente werden geöffnet durch < Elementname >Geöffnet durch />, oder , die öffnenden und schließenden Tags des Elements stimmen überein, wie zum Beispiel<?xml …?> /*XML说明*/ <!DOCTYPE …> /*XML文档说明*/ <!-- … --> /*XML注释*/ <?xml-stylesheet …?> /*XML指令*/ <root> /*根数据元素*/ <child> …<![CDATA[…]]> </child> </root>
Basierend auf den oben genannten XML-Grammatikfunktionen können reguläre Ausdrücke für die lexikalische Analyse und syntaktische Analyse erstellt werden. Pushdown-Automatenstruktur .
XML-lexikalischer regulärer Ausdruck:
#Ziffer definieren [1,2,…,9] /*Zahlenzeichen*/
#Buchstaben definieren [a,b,…,z,A,B,…, Z] /*Alphabetische Zeichen*/
#Zeichen definieren [~, ! , @, #, %, ^, &,*,(, ), ?, :, ;, „, ', ,, ., / ,-, _, +, =, |, /] /*Symbolzeichen*/
#define ascii2 [0x80,…,0xFF] /*ASCII chart2 erweitertes Zeichen*/
#define space [0x20, / t, /r, /n] /*Leerzeichen, Tabulatorzeichen, Wagenrücklaufzeichen, Zeilenvorschubzeichen*/
#define Reserve [<, >, &] /*XML reservierte Zeichen*/
1) Regulärer Ausdruck des Elementnamens:
2) Regulärer Ausdruck des Elementtexts:
element_name -> (_ | letter | ascii2) (ε| _ | - | : | . | digit | letter | signs | ascii2)*
element_text -> (ε| not reserve)*
proper_name -> (_ | letter | ascii2) (ε| _ | - | : | . | digit | letter | signs | ascii2)*
proper_value -> (ε| not reserve)*
1) STACK_DFA mata_xml_doc =
xml_document -> xml_header (ε| xml_declare | xml_instruct | xml_comments)* xml_element xml_header -> [<?xml](space)*(proper_token)*(space)* [?>] xml_declare -> [<!]reserve_word(space)*(token)*(space)*[>] xml_instruct -> [<?]reserve_word(space)* (proper_token)* (space)*[?>] xml_comments -> [<!--](ε| digit | letter | signs | ascii2 | space)*[-- >] xml_element -> [<]element_name (space)*( ε| proper_token)*(space)*[/>] | [<]element_name(space)*( ε | proper_token)*(space)*[>] [ε| <![CDATA[ ]element_text[ε| ]]>] (ε | xml_element)*(space)*[</]element_name[>] proper_token -> proper_name(space)*[=](space)* [ε| <![CDATA[ ] [‘ | “]proper_value[‘ | “] [ε| ]]>] reserve_word -> [DOCTYPE | ELEMENT | NOTATION | …] token -> (ε| not reserve)*
2) Das Stapeloberseitensymbol wird verwendet, um den Typ des aktuellen Analyseknotens widerzuspiegeln:
Q: {…} /*详见后面的状态集合*/ Σ: /*指向待解析的XML元素词串*/ σ: Q×Σ->Q /*状态转移函数,见状态转移列表*/ q: {NIL_SKIP} /*初始状态*/ Γ: {NIL_FAILED,NIL_SUCCEED} /*终结状态集合*/ S: {Q/*状态*/, N/*DOM节点*/>,<…>} /*下推栈*/
Das obige ist der detaillierte Inhalt vonWebprogrammierung – detaillierte Erläuterung der XML-Grammatikanalyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!