Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6893565
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 27, 20262026-05-27T06:40:28+00:00 2026-05-27T06:40:28+00:00

I want to build a parser for analyzing a large input file, but I

  • 0

I want to build a parser for analyzing a large input file, but I don’t need the entire input file, only some parts of it.

For exmaple, the input file may look like this:

bla bla bla bla bla ...

EVENT: e1
type: t1
version: 1
additional-info: abc

EVENT: e2
type: t2
version: 1
uninteresting-info: def

blu blu blu blu blu ...

From this file, all I want is to have a map of event to type (e1=>t1, e2=>t2). All other information is of no interest for me.

How can I build a simple ANTLR grammar that does this?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-27T06:40:29+00:00Added an answer on May 27, 2026 at 6:40 am

    You can do that by introducing a boolean flag inside your lexer that keeps track whether an event– or type-keyword has been encountered. If it has been encountered, the lexer should not skip the word, all other words should be skipped.

    A small demo:

    grammar T;
    
    @lexer::members {
      private boolean ignoreWord = true;
    }
    
    parse
      :  event* EOF
      ;
    
    event
      :  Event w1=Word Type w2=Word 
         {System.out.println("event=" + $w1.text + ", type=" + $w2.text);}
      ;  
    
    Event 
      :  'EVENT:' {ignoreWord=false;}
      ;
    
    Type
      :  'type:' {ignoreWord=false;}
      ;
    
    Word
      :  ('a'..'z' | 'A'..'Z' | '0'..'9')+ {if(ignoreWord) skip();}
      ;
    
    NewLine
      :  ('\r'? '\n' | '\r') {ignoreWord=true; skip();}
      ;
    
    Other
      :  . {skip();}
      ;
    

    You can test the parser with the following class:

    import org.antlr.runtime.*;
    
    public class Main {
      public static void main(String[] args) throws Exception {
        String src = 
            "bla bla bla bla bla ...  \n" +
            "                         \n" +
            "prEVENT: ...             \n" +
            "EVENTs: ...              \n" +
            "                         \n" +
            "EVENT: e1                \n" +
            "type: t1                 \n" +
            "version: 1               \n" +
            "additional-info: abc     \n" +
            "                         \n" +
            "EVENT: e2                \n" +
            "type: t2                 \n" +
            "version: 1               \n" +
            "uninteresting-info: def  \n" +
            "                         \n" +
            "blu blu blu blu blu ...  \n";
        TLexer lexer = new TLexer(new ANTLRStringStream(src));
        TParser parser = new TParser(new CommonTokenStream(lexer));
        parser.parse();
      }
    }
    

    which will produce the following output:

    java -cp antlr-3.3.jar org.antlr.Tool T.g
    javac -cp antlr-3.3.jar *.java
    java -cp .:antlr-3.3.jar Main
    
    event=e1, type=t1
    event=e2, type=t2
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I would like to use Parsec's makeTokenParser to build my parser, but I want
I'm trying to build a bbcode parser, but I'm having quite some problems figuring
I created a website but i have a problem. i want to build once
I want to build simple parse tree/but it's not working. I think that strlen
i try to build an application with xml parser. ex : http://www.androidpeople.com/android-xml-parsing-tutorial-using-saxparser but i
I am trying to build a Standalone VoiceXML parser which accepts the input as
i want build a photography app with effects . e.g. old images with brown
I want build a sketch pad app on iPhone, I assume that this type
I want to build a lightweight linux configuration to use for development. The first
I want to build a bot that asks someone a few simple questions and

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.