2009-07-08 74 views
2

這裏的語法,這是爲了描述嵌套括號的語言用逗號分隔符:如何消除以下語法中的左遞歸?

L ::= {L} | L,L | 

一些更多的字符串的例子,我期望語法接受和拒絕:

接受:

{,{,,{,}},,{,}} 
{{{{}}}} 
{,{}} 

拒絕:

{}{} 
{,{}{}} 
{{},{} 
+0

你使用什麼工具來獲得左遞歸錯誤? – 2009-07-08 01:57:11

+0

我沒有使用任何工具。 – wkf 2009-07-08 02:00:11

+0

作業問題? – 2009-07-08 02:01:24

回答

4

手工完成:

L :: = { L } | { L }, | , L | &小量;

或者,而不只是即興發揮我們可以用一個更系統的方法,並應用從維基百科的算法removing immediate left recursion

大號:: = {大號}大號 | L
L :: =< | , L L

0

首先,該語法不會接受您的第一個示例,因爲它要求逗號位於左大括號之後和大括號之前。我建議重寫它爲

L::= {L} | ,L 

這不會擺脫左遞歸,但它至少會匹配您的可接受的答案。