繁体   English   中英

用于从文件填充类的Lexer / Parser的语法规则

[英]Grammar rules for Lexer/Parser for populating classes from file

我想在最简单的级别使用词法分析器和解析器来解决以下问题

我有一个文件内容的文件

TYPE1 ABCR
{

    TYPE2 EFG
    {

        omega 1

        TYPE3 AFGH
        {
            alpha 1
            beta 1 2 
            gamma 1 3 4 
        }   

    }

}


TYPE1 CFGRT
{

    TYPE2 EFGI
    {
        omega 0

        TYPE3 AFGHJ
        {

            beta 6 2 
            gamma 1 8 4 
        }   

    }

}

//.... (more members of TYPE1)

我有以下类可以解析和填充上述数据

class TYPE1
{


  List<TYPE2> listelems;

}



class TYPE2
{

    omega abc;
    List<TYPE3> listelems;

}

class TYPE3
{

    vec2 beta
    vec3 gamma  

}

现在我的文件规范可以通过在每个级别说更多属性以及更多层次结构级别(如TYPE4)来更改。

因此,我想保持我的解析通用和可扩展。

在这种情况下,如果我使用像Flex / Bison这样的词法分析器和解析器,那么为它们设置的语言语法规则是什么?

好吧,因为现在似乎没有任何实际的Flex / Bison用户,因为你确实说过'...... Flex / Bison 这样的词法分析器和解析器......',这里的内容大致如下(我使用的专有)解析器生成器:

TYPE1_clause =
  "TYPE1" identifier
  '{'
    TYPE2_clause
  '}'
 .

TYPE2_clause = 
  "TYPE2" identifier
  '{'
    "omega" integer_literal

    TYPE3_clause
  '}'
 .

TYPE3_clause =
  "TYPE3" identifier
  '{'
    [
      "alpha"
      [ integer_literal ]+
    ]?
    [
      "beta"
      [ integer_literal ]+
    ]?
    [
      "gamma"
      [ integer_literal ]+
    ]?
  '}'
 .

这假设关于哪些部分是保留关键字,哪些部分是可变数据等等,但是你应该得到这个想法。

identifierinteger_literal是终端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM