2017-07-17 60 views
1

林嘗試定義可用於描述以下類型的表的語法表格式:BNF(EBNF)來描述與可選列

** CO1 ....... ** COL2。 .... ** col3 ......

value ....... value .......值

value ....... value ... ....值

值.......值.....................值

值.......值.......值

.....

picture of table

有** col1和** COL2存在的列名。格式可以有選擇地添加額外的預定義列(例如,讓我們假設** col4和** col5也可以包含在內)。我想寫一個輸出這種格式的解析器。可以使用BNF或EBNF來描述這種類型的表格嗎?

從我目前閱讀的內容來看,這是一個語境敏感的語法,因此無法用BNF或EBNF來描述(我認爲這是因爲如果x-1也行x行將只包含** col4 )。它是否正確?有沒有其他的辦法來描述上面的表格格式?

提前感謝 弗洛裏安

+0

我覺得你是在反思這件事。據推測,連續的列之間有一些分隔符。只需拆分該分隔符上的列。你需要做什麼,這是不能通過分隔符分割來完成的? – Welbog

回答

0

如果你有超過兩列必須有相同數量的條目,或大於兩行的變量數必須有相同數量的更大的可變數目條目,由於相同的原因,語言不能無上下文。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的規則生成所有值。如果要添加多種類型,並配合所涉及的列,語法變得更加複雜(需要EE'E''等,每個值類型,並相應GG'G''等,CC',C''等等,以及重複的作品來處理移動B圍繞每一個,但否則過程保持相似;然後你的語法只會產生具有適當類型匹配的表)。

+0

非常感謝 – Nairolf