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

黄舟
Libérer: 2017-03-24 16:47:35
original
1422 Les gens l'ont consulté

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 , et les chaînes de mots réservées de XML doivent répondre aux exigences des majuscules et des minuscules ….

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

%20Caract%C3%A9ristiques%20syntaxiques%20:%201)%20Un%20document%20XML%20se%20compose%20d'une%20description%20XML,%20de%20plusieurs%20

descriptions%20de%20documents

%20facultatives,%20de%20plusieurs%20directives%20XML%20facultatives,%20de%20plusieurs%20commentaires%20XML%20facultatifs%20et%20d'un%20corps%20de%20donn%C3%A9es%20de%20l'%C3%A9l%C3%A9ment%20racine.%20De%20plus,%20le%20CDATA%20peut%20%C3%AAtre%20int%C3%A9gr%C3%A9.%20segment%20dans%20l'instruction,%20tel%20que%C2%A0:%20

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

4) Les instructions XML sont ouvertes par , telles que :
5) Les commentaires XML sont ouverts par , tels que :
6) Les éléments XML sont ouverts par < element name >Opened by />, ou , les balises d'ouverture et de fermeture de l'élément correspondent, telles que ou , les éléments XML peuvent être imbriqués, la correspondance hiérarchique doit donc être conservée, telle que .. 7) Le segment CDTATA est ouvert par et fermé par ]]>, qui est utilisé pour que les instructions qu'il contient évitent les règles d'analyse XML. Par exemple :
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 [<, >, &] /*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)*
Copier après la connexion


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


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


Structure de la syntaxe XML :
  proper_value -> (ε| not reserve)*
Copier après la connexion


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)*
Copier après la connexion

1) STACK_DFA mata_xml_doc =


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节点*/>,<…>} /*下推栈*/
Copier après la connexion


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/*注释*/}
Copier après la connexion


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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!