用于从文件填充类的词法分析器/解析器的语法规则

Grammar rules for Lexer/Parser for populating classes from file

本文关键字:规则 语法 词法分析器 文件 填充 用于      更新时间:2023-10-16

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

我有一个文件,其中包含表单的内容

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是终端。