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 8700867
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 13, 20262026-06-13T02:16:03+00:00 2026-06-13T02:16:03+00:00

Given the following lexer: lexer grammar CodeTableLexer; @header { package ch.bsource.ice.parsers; } CodeTabHeader :

  • 0

Given the following lexer:

lexer grammar CodeTableLexer;

@header {
    package ch.bsource.ice.parsers;
}

CodeTabHeader   : OBracket Code ' ' Table ' ' Version CBracket;
CodeTable       : Code ' '* Table;
EndCodeTable    : 'end' ' '* Code ' '* Table;
Code            : 'code';
Table           : 'table';
Version         : '1.0';
Row             : 'row';
Tabdef          : 'tabdef';
Override        : 'override' | 'no_override';
Obsolete        : 'obsolete';
Substitute      : 'substitute';
Status          : 'activ' | 'inactive';
Pkg             : 'include_pkg' | 'exclude_pkg';
Ddic            : 'include_ddic' | 'exclude_ddic';
Tab             : 'tab';
Naming          : 'naming';
Dfltlang        : 'dfltlang';
Language        : 'english' | 'german' | 'french' | 'italian' | 'spanish';
Null            : 'null';
Comma           : ',';
OBracket        : '[';
CBracket        : ']';

Boolean
    : 'true' 
    | 'false'
    ;

Number
    : Int* ('.' Digit*)?
    ;

Identifier
    : ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '$' | '#' | '.' | Digit)*
    ;

String
@after {
    setText(getText().substring(1, getText().length() - 1).replaceAll("\\\\(.)", "$1"));
}
    : '"' (~('"'))* '"'
    ;

Comment
    : '--' ~('\r' | '\n')* { skip(); }
    | '/*' .* '*/' { skip(); }
    ;

Space
    : (' ' | '\t') { skip(); }
    ;

NewLine
    : ('\r' | '\n' | '\u000C') { skip(); }
    ;

fragment Int
    : '1'..'9'
    | '0'
    ;

fragment Digit 
    : '0'..'9'
    ;

… and the following parser:

parser grammar CodeTableParser;

options {
    tokenVocab = CodeTableLexer;
    backtrack = true;
    output = AST;
}

@header {
   package ch.bsource.ice.parsers;
}

parse
    : block EOF
    ;

block
    : CodeTabHeader^ codeTable endCodeTable
    ;

codeTable
    : CodeTable^ codeTableData
    ;

codeTableData
    : (Identifier^ obsolete?) (tabdef | row)*
    ;

endCodeTable
    : EndCodeTable
    ;

tabdef
    : Tabdef^ Identifier+
    ;

row
    : Row^ rowData
    ;

rowData
    : (Number^ | (Identifier^ (Comma Number)?))
        Override?
        obsolete?
        status?
        Pkg?
        Ddic?
        (tab | field)*
    ;

tab
    : Tab^ value+
    ;

field
    : (Identifier^ value) | naming
    ;

value
    : OBracket? (Identifier | String | Number | Boolean | Null) CBracket?
    ;

naming
    : Naming^ defaultNaming (l10nNaming)*
    ;

defaultNaming
    : Dfltlang^ String
    ;

l10nNaming
    : Language^ String?
    ;

obsolete
    : Obsolete^ Substitute String
    ;

status
    : Status^ Override?
    ;

… finally my class for making the parser case-insensitive:

package ch.bsource.ice.parsers;

import java.io.IOException;
import org.antlr.runtime.*;

public class ANTLRNoCaseFileStream extends ANTLRFileStream {

    public ANTLRNoCaseFileStream(String fileName) throws IOException {

        super (fileName, null);
    }

    public ANTLRNoCaseFileStream(String fileName, String encoding) throws IOException {

        super (fileName, null);
    }

    public int LA(int i) {

        if (i == 0) return 0;
        if (i < 0) i++;
        if ((p + 1 - 1) >= n) return CharStream.EOF
        return Character.toLowerCase(data[p + 1 - 1]);
    }
}

… single-line comments are skipped as expected, while multi-line comments aren’t… here is the error message I get:

codetable_1.txt line 38:0 mismatched character '<EOF>' expecting '*'
codetable_1.txt line 38:0 mismatched input '<EOF>' expecting EndCodeTable
java.lang.NullPointerException
...

Am I missing something? Is there anything I should be aware of? I’m using antlr 3.4.

Here is also the example source code I’m trying to parse:

[code table 1.0]

/*
This is a multi-line comment
*/

code table my_table

-- this is a single-line comment
row 1
    id              "my_id_1"
    name            "my_name_1"
    descn           "my_description_1"
    naming
      dfltlang      "My description 1"
      english       "My description 1"
      german        "Meine Beschreibung 1"

-- this is another single-line comment
row 2
    id              "my_id_2"
    name            "my_name_2"
    descn           "my_description_2"
    naming
      dfltlang      "My description 2"
      english       "My description 2"
      german        "Meine Beschreibung 2"

end code table

Any help would be really appreciated 🙂

Thanks,
j3d

  • 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-06-13T02:16:04+00:00Added an answer on June 13, 2026 at 2:16 am

    Bart gave me an amazing support and I think we all really appreciate him 🙂

    Anyway, the problem was a bug in the FileStream class I use to convert parsed char stream to lowercase. Here below is the correct Java source code:

    import java.io.IOException;
    import org.antlr.runtime.*;
    
    public class ANTLRNoCaseFileStream extends ANTLRFileStream {
    
        public ANTLRNoCaseFileStream(String fileName) throws IOException {
    
            super (fileName, null);
        }
    
        public ANTLRNoCaseFileStream(String fileName, String encoding) throws IOException {
    
            super (fileName, null);
        }
    
        public int LA(int i) {
    
            if (i == 0) return 0;
            if (i < 0) i++;
            if ((p + i - 1) >= n) return CharStream.EOF;
            return Character.toLowerCase(data[p + i - 1]);
        }
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have defined the following grammar. grammar Sample_1; @header { package a; } @lexer::header
Given the following code: $(.force-selection).blur(function() { var value = $('matched-item').val(); //check if the input's
Given the following code: final class retVal { int photo_id; } Gson gson =
Given the following code: function Person(firstName, lastName) { this.FirstName = firstName; this.LastName = lastName;
Given following Table select rv, mv, datetime, rawv from mytable where datetime > '2012-01-30';
suppose that there is given following matlab code function dp = derp(p) n =
Given the following code from a Microsoft example: public class EngineMeasurementCollection : Collection<EngineMeasurement> {
Given the following code. Is there any potential for the first DrawString method to
Given the following table: id category_id categorizable_id categorizable_type 66 22 67 Image 72 22
Given following code template<typename T> struct A{ struct In{}; }; template<typename T> struct Desc{

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.