用于从文件填充类的词法分析器/解析器的语法规则
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 ]+
]?
'}'
.
这做了一些关于哪些部分是保留关键字,哪些部分是可变数据等的假设,但你应该明白这个想法。
identifier
和integer_literal
是终端。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- QMetaObject invokeMethod的基于函数指针的语法
- 此代码是否违反一个定义规则
- 生成文件不对文件使用隐式规则
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- C ++试图理解用于破译复杂语法的顺时针规则
- Qt语法高亮显示单行注释的高亮显示规则示例
- 当一个规则使用BOOST_FUSION_ADAPT_STRUCT时,精神因果报应语法问题
- C++类型定义语法规则
- 用于从文件填充类的词法分析器/解析器的语法规则
- 无法根据boost::spirit::qi中的规则生成语法
- c++中异常的规则和语法
- 增强精神语法规则提取只是字母数字符号
- 野牛语法中的无用规则和非终结符
- Boost Spirit规则和语法中模板参数中的括号
- 如何编写SFINAE来测试语法分析器规则
- LR(1) 语法的状态、符号和规则的数量的合理上限是多少?