Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的xml的BNF语法_Xml_Grammar_Bnf - Fatal编程技术网

我的xml的BNF语法

我的xml的BNF语法,xml,grammar,bnf,Xml,Grammar,Bnf,我编写了简单的类代码生成器,它基于xml文件创建代码 xml文件如下所示: <?xml version="1.0" encoding="UTF-8"?> <classes> <class name="Klient"> <attr type="int">id</attr> <attr type="String">imie</attr> <attr typ

我编写了简单的类代码生成器,它基于xml文件创建代码

xml文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<classes>
    <class name="Klient">
        <attr type="int">id</attr>
        <attr type="String">imie</attr>
        <attr type="String">nazwisko</attr>
        <attr type="Date">dataUr</attr>
    </class>
    <class name="Wizyta">
        <attr type="int">id</attr>
        <attr type="Klient">klient</attr>
        <attr type="Date">data</attr>
    </class>
</classes>

身份证件
伊米
纳兹维斯科
达图尔
身份证件
克利特
数据

如果我想将这个简单的xml定义为BNF语法,它会是什么样子?

这取决于您希望语法有多松散。例如,做出一些明确的假设:

data       -> version '<classes>' classes '</classes>'
version    -> '<?xml version=' quotedString 'encoding=' quotedString '?>'
classes    -> '<class name=' quotedString '>' attributes '</class>' classes
attributes -> '<attr type=' quotedString '>' string '</attr>' attributes
数据->版本“”类“”
版本->“”
类->“”属性“”类
属性->“”字符串“”属性
(quotedString和string是终端,所有其他终端位于QUOTE之间)

注意如何从上面的语法中删除一些结果,但这并不能提高可读性


至于此语法的实际用法:考虑使用XML解析库,这可能比使用实际的解析器生成器(更不用说手动实现解析器生成器)容易得多。

您需要决定是否支持某种简化的XML(为此,您可能可以非常快速地编写解析器),或者处理XML标准的全部荣耀(此时编写您自己的解析器将成为一项艰巨的任务,您应该只使用现有的包)