2016-03-24 48 views
1

parametrelerle BNF'un herhangi bir değişiklik, biz, tanımlarla Öyle</p> <pre><code>LISTOF(EL) := "[" EL ("," EL)* "]" LISTNUM := LISTOF(NUMBER) LISTID := LISTOF(IDENT) </code></pre> <p>gibi bir şey demek

[435,657,44] aşağıdakilere sahip

NUMBER := ('0'-'9')* 
IDENT := ('a'-'z'|'A'-'Z')* 

LISTNUM örneği var mı

[dsf,thg,ewre],örneğidir.

Veya başka bir örnek (e boş bir dize demektir)

A(0) := e 
A(n) := "a" A(n-1) | e 

böylece, A (5) bütün dizeleri ayarlanır

5'ten fazla herhangi bir bilim var mıdır değil 'a' ile uzunluğunda oluşur buna benzer bir şeyi açıklayan işler? Dilbilgilerimizi böyle bir şekilde tarif edebilir miyiz ve yine de kabul edilebilir bir zamanda ayrıştırabilir miyiz?

+1

Elbette bunu * yapabilirsin. Basit bir yol, parametreli BNF kurallarınızı makro olarak ele almak ve bunları geleneksel BNF'ye genişletmektir. Soru şu: * yapmalısın * Ek açıklık, pratikte size herhangi bir şey satın alıyor mu? Çok fazla dilbilgisi yapıyorum; Ben öyle düşünmüyorum. YMMV. –

cevap

0

Bnf, Abnf ve Ebnf gibi yaygın olarak kullanılan meta sözdizimlerinin parametreli kuralları yoktur. Ancak Iso Ebnf standartlara göre genişletilebilir. Doğru olarak hatırlarsam, standart aslında parametrelerin tanıtımı için bir örnek gösterir.

here standardını ücretsiz olarak alabilirsiniz.