我想在最简单的级别使用词法分析器和解析器来解决以下问题
我的文件内容为
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这样的解析器将是什么语言 要为他们设定的语法规则?
答案 0 :(得分:1)
好吧,因为现在似乎没有任何实际的Flex / Bison用户,因为你确实说过'... lexer和解析器喜欢 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 ]+
]?
'}'
.
这假设关于哪些部分是保留关键字,哪些部分是可变数据等等,但你应该明白这一点。
identifier
和integer_literal
是终端。