Skip to content

Commit 56f1872

Browse files
committed
[WIP] SimaiParser重写 Part 2
1 parent 59073f2 commit 56f1872

5 files changed

Lines changed: 102 additions & 147 deletions

File tree

parser/simai/ErrorStrategy.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,8 @@ protected override IToken SingleTokenDeletion(Parser recognizer)
108108

109109
private HashSet<int> insertionForbidden = [
110110
SimaiLexer.COMMA, SimaiLexer.KEY, SimaiLexer.SLIDE_TYPE, SimaiLexer.TOUCH_AREA, SimaiLexer.INT,
111-
SimaiLexer.CHART_END, SimaiLexer.MODIFIER, SimaiLexer.FALSE_EACH
111+
SimaiLexer.CHART_END, SimaiLexer.FALSE_EACH,
112+
SimaiLexer.MODIFIER, SimaiLexer.NO_STAR, SimaiLexer.STAR_TO_TAP, SimaiLexer.TAP_TO_STAR
112113
]; // 逗号,和不确定的可能引起歧义的符号,一律不允许补充
113114

114115
protected override IToken GetMissingSymbol(Parser recognizer)

parser/simai/Simai.g4

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@ number: int ('.' int)?;
3131
CHART_END: 'E';// 谱面结束那个E
3232

3333
MODIFIER: [bxf]; // 语法层不去检查modifier和tap/hold的搭配和合理性,都丢给语义层去搞
34-
35-
modifiers: (MODIFIER | TAP_TO_STAR)*;
34+
modifiers: (MODIFIER | TAP_TO_STAR | STAR_TO_TAP | NO_STAR)*;
3635

3736
// ---------------------------------------------------------------------------
3837
// 语法
@@ -76,7 +75,7 @@ slideDuration: '[' (
7675
waitTime: number;
7776
asBpm: number;
7877

79-
slide: tap (NO_STAR | STAR_TO_TAP)? slideBody;
78+
slide: tap slideBody;
8079
sharedHeadSlide: '*' slideBody;
8180

8281
slideBody // 根据Simai文档规定,分为两种情况

0 commit comments

Comments
 (0)