खोज…
परिचय
श्रोता और आगंतुक के बीच क्या अंतर है? श्रोता और आगंतुक तंत्र के बीच का अंतर श्रोता तरीके हैं जिन्हें एएनटीएलआर द्वारा प्रदान की गई वॉकर ऑब्जेक्ट कहा जाता है, जबकि आगंतुक विधियों को स्पष्ट यात्रा कॉल के साथ अपने बच्चों को चलना चाहिए। एक नोड के बच्चों पर यात्रा () का आह्वान करने का मतलब है कि उन उपप्रकारों का दौरा न करना। आगंतुक में हम पेड़ पर चलने की क्षमता रखते हैं जबकि श्रोता आप केवल पेड़ के चलने वाले पर प्रतिक्रिया कर रहे हैं।
उदाहरण
व्याकरण उदाहरण (Expr.g4)
grammar Expr;
prog: (expr NEWLINE)* ;
expr: expr ('*'|'/') expr
| expr ('+'|'-') expr
| INT
| '(' expr ')'
;
NEWLINE : [\r\n]+ ;
INT : [0-9]+ ;
आगंतुक उत्पन्न करना
एक विज़िटर उत्पन्न करने के लिए, या अपने व्याकरण के लिए किसी विज़िटर को अक्षम करने के लिए आप निम्नलिखित झंडे का उपयोग करते हैं:
-visitor generate parse tree visitor
-no-visitor don't generate parse tree visitor (default)
विज़िटर के साथ अपने व्याकरण का निर्माण करने के लिए कमांडलाइन / टर्मिनल कमांड को नीचे दिखाए गए प्रारूप के अनुसार प्रारूपित किया जाएगा, जिसमें चुने गए और संभावित उपनामों के बारे में बताया जाएगा:
java - jar antlr-4.5.3-complete.jar Expr.g4 -visitor
java - jar antlr-4.5.3-complete.jar Expr.g4 -no-visitor
आउटपुट क्रमशः एक आगंतुक या कोई आगंतुक के साथ एक पार्सर / लेसर होगा।
आउटपुट इस उदाहरण के लिए आउटपुट ExprBaseVisitor.java और ExprVisitor.java होगा। ये आपके लिए विज़ुअल फंक्शनलिटी को लागू करने के लिए प्रासंगिक जावा फाइल हैं। यह अक्सर एक नई कक्षा बनाने और प्रत्येक विधि के लिए नई आगंतुक कार्यक्षमता को लागू करने के लिए ExprBaseVisitor का विस्तार करने के लिए आदर्श है।
// Generated from Expr.g4 by ANTLR 4.5.3
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
/**
* This class provides an empty implementation of {@link ExprVisitor},
* which can be extended to create a visitor which only needs to handle a subset
* of the available methods.
*
* @param <T> The return type of the visit operation. Use {@link Void} for
* operations with no return type.
*/
public class ExprBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements ExprVisitor<T> {
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitProg(ExprParser.ProgContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitExpr(ExprParser.ExprContext ctx) { return visitChildren(ctx); }
}
Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow