2011-02-01 11 views
8

क्या अन्य बीएनएफ वाक्यविन्यासों से और एएनटीएलआर व्याकरण वाक्यविन्यास को बदलने के लिए कोई उपकरण हैं? विनिर्देश के साथ बैकस-नौर फॉर्म (बीएनएफ, ईबीएनएफ, एबीएनएफ, डब्ल्यू 3 सी-बीएनएफ, एक्सबीएनएफ ...) के कई रूप हैं। see this list। एएनटीएलआर व्याकरण वाक्यविन्यास केवल described by examples लगता है। मुझे पता है कि एएनटीएलआर व्याकरण फाइलें संदर्भ-मुक्त वाक्यविन्यास के विनिर्देशन से अधिक होती हैं, लेकिन आप कम से कम सामान्य सबसेट को परिवर्तित करने में सक्षम होना चाहिए - क्या किसी ने अभी तक स्वचालित रूप से किया है?क्या एएनटीएलआर और बीएनएफ के अन्य रूपों के बीच कनवर्ट करने के लिए उपकरण हैं?

उत्तर

2

जेकब ने लिखा है:

ANTLR व्याकरण वाक्य रचना केवल उदाहरण द्वारा वर्णित किया जा रहा है।

ANTLR (v3) लिखा है "अपने स्वयं के शब्दों में" (टेरेंस पार खुद डाल के रूप में) यह व्याकरण में:

http://www.antlr.org/grammar/ANTLR/ANTLRv3.g


जेकब ने लिखा है:

लेकिन आप कम से कम सी को परिवर्तित करने में सक्षम होना चाहिए ommon सबसेट - क्या किसी ने अभी तक स्वचालित रूप से किया है?

मुझे पता नहीं है। और यदि यह अस्तित्व में है, तो मैंने कभी भी इस उपकरण को एएनटीएलआर मेलिंग सूची पर चर्चा नहीं की है जिसे मैंने नियमित आधार पर पढ़ा है।

यह भी ध्यान दें कि कई बीएनएफ-वेरिएंट left-recursive नियमों के लिए अनुमति देते हैं, कुछ ऐसा जो एलएल-पार्सर जेनरेटर जैसे एएनटीएलआर का सामना नहीं कर सकता है। बाएं रिकर्सिव नियमों को निश्चित रूप से उपकरण द्वारा फिर से पहचाना जा सकता है, लेकिन यह मुश्किल हो सकता है, और शायद इसके परिणामस्वरूप मैन्युअल रूप से ऐसा करने से एक बहुत कम "पठनीय" व्याकरण होगा।

एएनटीएलआर व्याकरण को बीएनएफ-जैसे रूप में परिवर्तित करने के रूप में मुझे लगता है कि यह केवल आसान होगा, हालांकि केवल सबसे छोटे व्याकरण के साथ। जैसे ही विभिन्न प्रकार के भविष्यवाणियों को एएनटीएलआर व्याकरण में रखा जाता है, रूपांतरण फिर से मुश्किल हो सकता है।

+0

धन्यवाद, एएनटीएलआर में लिखित एएनटीएलआर व्याकरण एक चीज थी जिसे मैं ढूंढ रहा था। जहां तक ​​मैं एएनटीएलआर समझता हूं * आप * बाएं-रिकर्सिव व्याकरण लिख सकते हैं, लेकिन फिर आपको उन्हें हाथ से दोबारा प्रतिक्रिया देना चाहिए। अन्य बीएनएफ-फॉर्म और एएनटीएलआर से कनवर्टर कम से कम बीएनएफ-सिंटैक्स वेरिएंट के विराम चिह्न और अन्य मामूली पहलुओं में मतभेदों को मैन्युअल रूप से अपनाने की आवश्यकता को कम करेगा। – Jakob

+0

ऐसा लगता है कि एएनटीएलआर बेसिक बहुभाषी विमान के ऊपर यूनिकोड वर्णों का सामना नहीं कर सकता है: ईएससी: '\\' (... | 'यू' एक्सडिजिट एक्सडिजिट एक्सडिजिट एक्सडीआईजीआईटी) ऊपर दिए गए कोडपॉइंट्स से मेल नहीं खा सकता \ uFFFF। – Jakob

+0

@ जैकोब, सही, समर्थित सीमा '\ u0000'..' \ uFFFF' है। –

5
# Grammar Syntax 

|        | BNF       | ISO EBNF      | ABNF       | ANTLR       | 
|:-----------------------------:|:-----------------------------:|:-----------------------------:|:-----------------------------:|:-----------------------------:| 
| rule definition    | `<name> ::= ...`    | `name = ... ;`    | `name = ...`     | `name : ... ;`    | 
| terminal items    | `...`       | `'...'` or `"..."`   | integer or `"..."`   | `'...'`      | 
| non-terminal items   | `<...>`      | `...`       | `...` or `<...>`    | `...`       | 
| concatenation     | (space)      | `,`       | (space)      | (space)      | 
| choice      | `|`       | `|`       | `/`       | `|`       | 
| optional      | requires choice syntax[^1] | `[...]`      | `*1...` or `[...]`   | `...?`      | 
| 0 or more repititions   | requires choice syntax[^2] | `{...}`      | `*...`      | `...*`      | 
| 1 or more repititions   | requires choice syntax[^3] | `{...}-`      | `1*...`      | `...+`      | 
| n repititions     |        | `n*...`      | `n*n...`      |        | 
| n to m repititions   |        |        | `n*m...`      |        | 
| grouping      |        | `(...)`      | `(...)`      | `(...)`      | 
| comment      |        | `(*...*)`      | `;...`      | `// ...` or `/* ... */`  | 


[^1]: `optionalb ::= a b c d | a c d` 

[^2]: `list ::= | listitem list` 

[^3]: `list ::= listitem | listitem list` 
+0

अगर मैं गलत हूं तो कृपया मुझे सही करें। मैं इसके लिए नया हूँ।^_^बी – Travis

+0

हां, आप कम से कम सरल व्याकरण के लिए कम से कम वाक्यविन्यास के बीच मानचित्र कर सकते हैं। मैं एक उपकरण की तलाश में था जो इस रूपांतरण (बीएनएफ, आईएसओ ईबीएनएफ, एबीएनएफ, एएनटीएलआर ...) करता है। निश्चित रूप से अपना स्वयं का टूल बनाना संभव है ;-) – Jakob

संबंधित मुद्दे