2016-03-19 29 views
1

σI Basit bir bizon örneği oluşturmaya çalışıyorum. Operasyonun değerlerini .l dosyamdan tanımladım, fakat bir çek-çatışma kontrolü yapmaya çalıştığımda, expr hiçbir şekilde stmt'ye bağlı değil, bu yüzden biz de yazdığımda, ilk olarak yazdığımız ilk şey benimsendi. stmt'nin başlangıcında bir "expr SEMICOLON" var. Aynı zamanda, eyalet 0'da bir çatışmayı azaltma/azaltma alıyorum. Herhangi bir fikir var mı? expr içinBizon yararsız dönem sonu

program: state 
    |; 

state: expr SEMICOLON 
    | BREAK SEMICOLON 
    | CONTINUE SEMICOLON 
    |; 

expr: expr "+" expr 
| expr "-" expr 
| expr "*" expr 
| expr "/" expr 
| expr "%" expr 
; 

cevap

1

Tüm vakalar özyinelemeli, bu yüzden expr Hiç girişi maç için hiçbir yolu yoktur. Bir temel duruma (örneğin, NUM ve/veya ID) ihtiyacınız vardır.

Çatışmayı azaltma/azaltma, hem program hem de stmt boş bir kasaya sahip olmasından kaynaklanır. stmt da program durumlarından biri olduğundan, boş dizeyi program (program -> stmt -> "" ve program -> "") türetmek için iki olası yol vardır. Yani boş durumlardan birini kaldırmanız gerekiyor.

+0

Görüyorum, ikisini de sabitledim, büyük yardım için teşekkürler, 45 dakikadır burada takılıyorum, ama hiçbir şey yapmam. Bence bugünlerde daha fazla soruyla geri döneceğim, ama şimdilik, teşekkürler. – CnewbieWannabePro