Maison  >  Article  >  développement back-end  >  Programmation Web - Explication détaillée de l'analyse de la grammaire XML

Programmation Web - Explication détaillée de l'analyse de la grammaire XML

黄舟
黄舟original
2017-03-24 16:47:351423parcourir

Avant d'effectuer une analyse grammaticale XML, il est d'abord nécessaire de comprendre les règles de base de la syntaxe XML :

Caractéristiques lexicales : 1) XML est sensible à la casse, comme les noms d'éléments dans balises d'ouverture et de fermeture Les majuscules et les minuscules doivent être cohérentes 1b01232ea6f0577bc4ec8d1a522b6a86…6879c8de8c5e2889d23c06f516d46b6b, et les chaînes de mots réservées de XML doivent répondre aux exigences des majuscules et des minuscules 07941956e4f100af056a0d61df0cce2d ….

2) Les caractères de marque réservés XML sont : 6d267e5fab17ea8bc578f9e7e5e1570b Le symbole

2) La description XML est ouverte par 71ae2c40975c2f92563b127ce52da098, qui contient des descriptions facultatives telles que la version et l'encodage, telles que : 892021e3d67a486f032749808fc5789f
<?xml …?> /*XML说明*/
  <!DOCTYPE …> /*XML文档说明*/
  <!-- … --> /*XML注释*/
  <?xml-stylesheet …?> /*XML指令*/
  <root> /*根数据元素*/
  <child>
  …<![CDATA[…]]>
  </child>
  </root>
 3) La description du document XML est ouverte par 2bbae693420058f838e005605316a3f5, tel que : 2a1c1ace77d19b27e26388e2e62358dc

4) Les instructions XML sont ouvertes par e7873bff2cb5c6290155e38e61b9e655, telles que : d79042a8674d4ba1a29b08738f364384
5) Les commentaires XML sont ouverts par 942217944a55853554bdfa6153aeb23b, tels que : 3c0cc36a15278c3786b4d61215a8dc2b
6) Les éléments XML sont ouverts par fec56caea761adf538f711849ca9bc2dOpened by />, ou 68a56ae7059556683f46528c5f5d9bdc, les balises d'ouverture et de fermeture de l'élément correspondent, telles que a964f9aea6a098c3296f8e249581be9b ou 5c49c926bc487be6f96606df447708f4…178733e97ec71b870a77daafc67e8e0b, les éléments XML peuvent être imbriqués, la correspondance hiérarchique doit donc être conservée, telle que 5c49c926bc487be6f96606df447708f4e663bf67d432875fde4c932efd4feaf7..48f80ac41c3449a2c0f73671e2cd7ccd2c6b0034fc90fcedc09e7bbf024a11ba et fermé par ]]>, qui est utilisé pour que les instructions qu'il contient évitent les règles d'analyse XML. Par exemple : 42b27496e28bf89995f80f350676eb07
Sur la base des fonctionnalités de grammaire XML ci-dessus, des expressions régulières pour l'analyse lexicale et l'analyse syntaxique peuvent être construites. Structure d'automate pushdown .
Expression régulière lexicale XML :
#define digit [1,2,…,9] /*Caractère numérique*/
#define letter [a,b,…,z,A,B,…, Z] /*Caractères alphabétiques*/
 #définir les signes [~, !, @, #, %, ^, &,*,(, ), ?, :, ;, “, ', ,, ., / ,-, _, +, =, |, /] /*Caractère symbole*/
 #define ascii2 [0x80,…,0xFF] /*Caractère étendu du tableau ASCII2*/
 #define space [0x20, / t, /r, /n] /*Caractère espace, caractère de tabulation, caractère de retour chariot, caractère de saut de ligne*/
 #define reserve [95ec6993dc754240360e28e0de8de30a, &] /*Caractères réservés XML*/
1) Expression régulière du nom de l'élément :


2) Expression régulière du texte de l'élément :
  element_name -> (_ | letter | ascii2) (ε| _ | - | : | . | digit | letter | signs | ascii2)*


3) Expression régulière du nom de l'attribut :
  element_text -> (ε| not reserve)*


 4) Expression régulière du texte d'attribut :
  proper_name -> (_ | letter | ascii2) (ε| _ | - | : | . | digit | letter | signs | ascii2)*


Structure de la syntaxe XML :
  proper_value -> (ε| not reserve)*


Analyse de la grammaire XML besoins Construire un automate pushdown, sa structure est définie comme suit :
 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)*

1) STACK_DFA mata_xml_doc = c2c00a4f81bdb39f559c7014143f40dc


2) Le symbole du haut de la pile est utilisé pour refléter le type du nœud d'analyse actuel :
 Q: {…} /*详见后面的状态集合*/
  Σ: /*指向待解析的XML元素词串*/
  σ: Q×Σ->Q /*状态转移函数,见状态转移列表*/
  q: {NIL_SKIP} /*初始状态*/
  Γ: {NIL_FAILED,NIL_SUCCEED} /*终结状态集合*/
  S:  {Q/*状态*/, N/*DOM节点*/>,<…>} /*下推栈*/


3) L'ensemble de statuts reflète les caractéristiques d'une certaine étape d'analyse, correspondant à la symbole du dessus de la pile :
T:{NIL/*空*/, TG/*标记*/, NS/*元素*/, IS/*指令*/, DS/*声明*/, CD/*CDATA界段*/,CM/*注释*/}


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn