Java Antlr 4语法问题
我正在试着写一个降价语法。 但是我对ANTLR语法有一个问题 我想在夏普中忽略夏普,但我不知道该怎么办 这是我的密码 MarkdownLexer.g4Java 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
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)
```]