gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:08:33 25 4
gpt4 key购买 nike

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

我有一个文件,其内容为以下形式

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

关于c++ - 用于从文件填充类的 Lexer/Parser 的语法规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9101358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com