Context free grammar BNF(EBNF)用于描述带有可选列的表格格式
我正在尝试定义可用于描述以下类型表的语法: **二氧化碳……**col2……**col3 价值……价值……价值 价值……价值……价值 价值……价值……价值 价值……价值……价值 其中**col1和**col2为列名。该格式可以选择性地具有附加的预定义列(例如,假设还可以包含**col4和**col5)。我想写一个输出这种格式的解析器。这种类型的表格可以用BNF或EBNF来描述吗Context free grammar BNF(EBNF)用于描述带有可选列的表格格式,context-free-grammar,bnf,ebnf,context-sensitive-grammar,Context Free Grammar,Bnf,Ebnf,Context Sensitive Grammar,我正在尝试定义可用于描述以下类型表的语法: **二氧化碳……**col2……**col3 价值……价值……价值 价值……价值……价值 价值……价值……价值 价值……价值……价值 其中**col1和**col2为列名。该格式可以选择性地具有附加的预定义列(例如,假设还可以包含**col4和**col5)。我想写一个输出这种格式的解析器。这种类型的表格可以用BNF或EBNF来描述吗 从我到目前为止所读的内容来看,这是一种上下文敏感语法,因此不能用BNF或EBNF来描述(我假设这是因为如果x-1也
从我到目前为止所读的内容来看,这是一种上下文敏感语法,因此不能用BNF或EBNF来描述(我假设这是因为如果x-1也这样做,那么x行将只包含**col4)。这是正确的吗?是否有其他方法来描述上述表格格式?如果变量数大于两列且必须具有相同的条目数,或者变量数大于两行且必须具有相同的条目数,该语言不能与上下文无关,原因与
a^n b^n c^n
不与上下文无关相同
如果您希望表具有不受限制的语法,可以使用类似的方法:
// begin with A^n B
S := AS | AB
// produce C^n D^n B
A := CD
DC := CD
// produce C^n . E^n B
DB := BE
CBE := C.EB
BE := EB
// produce C^n . E^n G^n B
E := EG
GE := EG
// produce C^n (. E^n)+ B
GB := BE
EBE := E.EB
BE := EB
// produce C^n (. E^n)+
B := (empty)
// lead column headings and values to terminal symbols
C := (rules for headers)
E := (rules for values)
为简单起见,以上假设所有值都属于一种类型;也就是说,可以使用
E
的规则生成所有值。如果要添加多个类型并与所涉及的列进行协调,语法将变得更加复杂(您需要E
,E'
,E'
等,每种值类型一个,以及相应的G
,G'
,G'
等和C
,C'
等,并复制产品以处理在每个值周围移动B
,但除此之外,过程仍然类似;以及然后,您的语法将只生成具有适当类型匹配的表。)我觉得您考虑得太多了。可能行中的列之间有一些分隔符。只需在该分隔符上拆分列。您需要完成哪些不能通过分隔符拆分的任务?