Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Context free grammar BNF(EBNF)用于描述带有可选列的表格格式_Context Free Grammar_Bnf_Ebnf_Context Sensitive Grammar - Fatal编程技术网

Context free grammar 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也

我正在尝试定义可用于描述以下类型表的语法:

**二氧化碳……**col2……**col3

价值……价值……价值

价值……价值……价值

价值……价值……价值

价值……价值……价值

其中**col1和**col2为列名。该格式可以选择性地具有附加的预定义列(例如,假设还可以包含**col4和**col5)。我想写一个输出这种格式的解析器。这种类型的表格可以用BNF或EBNF来描述吗


从我到目前为止所读的内容来看,这是一种上下文敏感语法,因此不能用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
,但除此之外,过程仍然类似;以及然后,您的语法将只生成具有适当类型匹配的表。)

我觉得您考虑得太多了。可能行中的列之间有一些分隔符。只需在该分隔符上拆分列。您需要完成哪些不能通过分隔符拆分的任务?