Java Antlr 4语法问题

Java Antlr 4语法问题,java,parsing,markdown,antlr4,Java,Parsing,Markdown,Antlr4,我正在试着写一个降价语法。 但是我对ANTLR语法有一个问题 我想在夏普中忽略夏普,但我不知道该怎么办 这是我的密码 MarkdownLexer.g4 lexer grammar MarkdownLexer; Title1 : (SPACE|TAB)* ATX_START (SPACE|TAB) .*? NEWLINE ; Codeblock : BACKQUOTE BACKQUOTE BACKQUOTE .*? BACKQUOTE BACKQUOTE BACKQUO

我正在试着写一个降价语法。 但是我对ANTLR语法有一个问题

我想在夏普中忽略夏普,但我不知道该怎么办

这是我的密码

MarkdownLexer.g4

lexer grammar MarkdownLexer;

Title1
    : (SPACE|TAB)* ATX_START (SPACE|TAB) .*? NEWLINE
    ;

Codeblock
    : BACKQUOTE BACKQUOTE BACKQUOTE .*? BACKQUOTE BACKQUOTE BACKQUOTE
    ;


BACKQUOTE : '`' ;

ATX_START: ( '######' | '#####' | '####' | '###' | '##' | '#' ) {_tokenStartCharPositionInLine == 0}?;

SHARP: '#';

Text
    : ~[#`]*;

WS  : [ \t\r\n]+;

NEWLINE : '\n';

/* Single chars used by the parser.   */
SPACE: ' ';
TAB: '\t';
MarkdownParser.g4

parser grammar MarkdownParser;

options { tokenVocab=MarkdownLexer; }

@members {
    public void reportErrorsAsExceptions() {
        addErrorListener(new ExceptionThrowingErrorListener());
    }

    private static class ExceptionThrowingErrorListener extends BaseErrorListener {
        @Override
        public void syntaxError(Recognizer<?, ?> recognizer,
                Object offendingSymbol, int line, int charPositionInLine,
                String msg, RecognitionException e) {
            throw new RuntimeException(msg);
        }
    }
}

markDocument
    :
       ( Title1 | Codeblock | Text)* EOF
    ;
MarkdownParserWalker.java

public class MarkdownParserWalker extends MarkdownParserBaseListener{
    @Override
    public void enterMarkDocument(MarkdownParser.MarkDocumentContext ctx) {
        System.out.println(ctx.Title1());
        System.out.println(ctx.Text());
        System.out.println(ctx.Codeblock());
        super.enterMarkDocument(ctx);
    }

    @Override
    public void exitMarkDocument(MarkdownParser.MarkDocumentContext ctx) {
        super.exitMarkDocument(ctx);
    }
}
Run.java

import org.antlr.v4.runtime.ANTLRFileStream;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.ParseTreeWalker;

import java.io.File;
import java.io.FileInputStream;

public class Run {
    public static void main(String[] args) throws Exception {
        MarkdownLexer lexer = new MarkdownLexer( new ANTLRFileStream("src/main/resources/hello.txt"));
        CommonTokenStream tokens = new CommonTokenStream( lexer );
        MarkdownParser parser = new MarkdownParser( tokens );
        ParseTree tree = parser.markDocument();
        ParseTreeWalker walker = new ParseTreeWalker();
        walker.walk( new MarkdownParserWalker(), tree );
    }
}
结果:

[    # hello # ㅋㅋㅋㅋㅋ
, # bye
]
[

hi  , hi
, 
ㅋㅋㅋ

, 

zzz]
[```
hello world !!! 한글 (korean)

```]
我希望结果是:

[# hello # ㅋㅋㅋㅋㅋ
, # bye
]
[


hi  #hi
, 

ㅋㅋㅋ

, 

zzz]
[```
hello world !!! 한글 (korean)

```]
对不起,我英语说得不好


谢谢阅读。

你的语法看起来模棱两可
可以减少到
ATX\u START
SHARP
。我也这么认为。但我不知道如何修复它。
[# hello # ㅋㅋㅋㅋㅋ
, # bye
]
[


hi  #hi
, 

ㅋㅋㅋ

, 

zzz]
[```
hello world !!! 한글 (korean)

```]