Skip to content

Commit 309e521

Browse files
committed
GH-527 Use new pattern api
1 parent a581b8e commit 309e521

23 files changed

+70
-138
lines changed

panda-framework/src/main/java/org/panda_lang/framework/language/interpreter/pattern/functional/FunctionalPatternBuilder.java

+10-5
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@
3434
import org.panda_lang.framework.language.interpreter.pattern.functional.elements.UnitElement;
3535
import org.panda_lang.framework.language.interpreter.pattern.functional.elements.VariantElement;
3636
import org.panda_lang.framework.language.interpreter.pattern.functional.elements.WildcardElement;
37+
import org.panda_lang.framework.language.interpreter.pattern.functional.verifiers.NextSectionVerifier;
3738
import org.panda_lang.framework.language.interpreter.pattern.functional.verifiers.NextTokenTypeVerifier;
3839
import org.panda_lang.framework.language.interpreter.pattern.functional.verifiers.TokenTypeVerifier;
39-
import org.panda_lang.framework.language.resource.syntax.TokenTypes;
4040
import org.panda_lang.framework.language.resource.syntax.keyword.Keyword;
4141
import org.panda_lang.framework.language.resource.syntax.separator.Separator;
4242
import org.panda_lang.utilities.commons.ObjectUtils;
@@ -122,13 +122,18 @@ public FunctionalPatternBuilder<B, V> verify(Verifier<V> verifier) {
122122
return this;
123123
}
124124

125-
public FunctionalPatternBuilder<B, V> verifyType(TokenType type) {
126-
current.verify(ObjectUtils.cast(new TokenTypeVerifier(type)));
125+
public FunctionalPatternBuilder<B, V> verifyType(TokenType... types) {
126+
current.verify(ObjectUtils.cast(new TokenTypeVerifier(types)));
127127
return this;
128128
}
129129

130-
public FunctionalPatternBuilder<B, V> verifyNextTypeIs(TokenType type) {
131-
current.verify(ObjectUtils.cast(new NextTokenTypeVerifier(TokenTypes.UNKNOWN)));
130+
public FunctionalPatternBuilder<B, V> verifyNextType(TokenType... types) {
131+
current.verify(ObjectUtils.cast(new NextTokenTypeVerifier(types)));
132+
return this;
133+
}
134+
135+
public FunctionalPatternBuilder<B, V> verifyNextSection(Separator separator) {
136+
current.verify(ObjectUtils.cast(new NextSectionVerifier(separator)));
132137
return this;
133138
}
134139

panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/context/BootstrapInitializer.java

+12
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
2424
import org.panda_lang.framework.language.interpreter.pattern.functional.FunctionalPatternBuilder;
2525
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Autowired;
2626
import org.panda_lang.panda.language.interpreter.parser.context.handlers.FunctionalPatternHandler;
27+
import org.panda_lang.panda.language.interpreter.parser.context.handlers.LinearPatternHandler;
2728
import org.panda_lang.panda.language.interpreter.parser.context.initializers.FunctionalPatternInitializer;
29+
import org.panda_lang.panda.language.interpreter.parser.context.initializers.LinearPatternInitializer;
2830
import org.panda_lang.utilities.commons.ReflectionUtils;
2931

3032
import java.lang.reflect.Method;
@@ -77,6 +79,16 @@ public BootstrapInitializer<T> pattern(Object pattern) {
7779
return this;
7880
}
7981

82+
public BootstrapInitializer<T> linear(String pattern) {
83+
if (handler == null) {
84+
handler(new LinearPatternHandler());
85+
}
86+
87+
initializer(new LinearPatternInitializer());
88+
this.pattern = pattern;
89+
return this;
90+
}
91+
8092
public BootstrapInitializer<T> functional(Function<FunctionalPatternBuilder<?, ?>, FunctionalPatternBuilder<?, ?>> function) {
8193
if (handler == null) {
8294
handler(new FunctionalPatternHandler());

panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/ExportParser.java

+1-8
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@
1919
import org.panda_lang.framework.design.interpreter.parser.Context;
2020
import org.panda_lang.framework.design.interpreter.parser.pipeline.Pipelines;
2121
import org.panda_lang.framework.design.interpreter.token.Snippet;
22-
import org.panda_lang.framework.language.interpreter.pattern.functional.FunctionalPattern;
2322
import org.panda_lang.framework.language.interpreter.pattern.functional.elements.QualifierElement;
24-
import org.panda_lang.framework.language.interpreter.pattern.functional.elements.KeywordElement;
2523
import org.panda_lang.framework.language.resource.syntax.keyword.Keywords;
2624
import org.panda_lang.panda.language.architecture.PandaScript;
2725
import org.panda_lang.panda.language.interpreter.parser.RegistrableParser;
@@ -31,7 +29,6 @@
3129
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Ctx;
3230
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Src;
3331
import org.panda_lang.panda.language.interpreter.parser.context.handlers.TokenHandler;
34-
import org.panda_lang.panda.language.interpreter.parser.context.initializers.FunctionalPatternInitializer;
3532

3633
@RegistrableParser(pipeline = Pipelines.HEAD_LABEL)
3734
public final class ExportParser extends ParserBootstrap<Void> {
@@ -40,11 +37,7 @@ public final class ExportParser extends ParserBootstrap<Void> {
4037
protected BootstrapInitializer<Void> initialize(Context context, BootstrapInitializer<Void> initializer) {
4138
return initializer
4239
.handler(new TokenHandler(Keywords.EXPORT))
43-
.initializer(new FunctionalPatternInitializer())
44-
.pattern(FunctionalPattern.of(
45-
KeywordElement.create(Keywords.EXPORT),
46-
QualifierElement.create("class").javaClass()
47-
));
40+
.functional(pattern -> pattern.keyword(Keywords.EXPORT).qualifier("class").consume(QualifierElement::javaClass));
4841
}
4942

5043
@Autowired(order = 1)

panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/ImportParser.java

+1-8
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@
2020
import org.panda_lang.framework.design.interpreter.parser.Context;
2121
import org.panda_lang.framework.design.interpreter.parser.pipeline.Pipelines;
2222
import org.panda_lang.framework.design.interpreter.token.Snippet;
23-
import org.panda_lang.framework.language.interpreter.pattern.functional.FunctionalPattern;
2423
import org.panda_lang.framework.language.interpreter.pattern.functional.elements.QualifierElement;
25-
import org.panda_lang.framework.language.interpreter.pattern.functional.elements.KeywordElement;
2624
import org.panda_lang.framework.language.resource.syntax.keyword.Keywords;
2725
import org.panda_lang.panda.language.interpreter.parser.RegistrableParser;
2826
import org.panda_lang.panda.language.interpreter.parser.context.BootstrapInitializer;
@@ -31,7 +29,6 @@
3129
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Ctx;
3230
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Src;
3331
import org.panda_lang.panda.language.interpreter.parser.context.handlers.TokenHandler;
34-
import org.panda_lang.panda.language.interpreter.parser.context.initializers.FunctionalPatternInitializer;
3532

3633
@RegistrableParser(pipeline = Pipelines.HEAD_LABEL)
3734
public final class ImportParser extends ParserBootstrap<Void> {
@@ -40,11 +37,7 @@ public final class ImportParser extends ParserBootstrap<Void> {
4037
protected BootstrapInitializer<Void> initialize(Context context, BootstrapInitializer<Void> initializer) {
4138
return initializer
4239
.handler(new TokenHandler(Keywords.IMPORT))
43-
.initializer(new FunctionalPatternInitializer())
44-
.pattern(FunctionalPattern.of(
45-
KeywordElement.create(Keywords.IMPORT),
46-
QualifierElement.create("class").javaClass()
47-
));
40+
.functional(pattern -> pattern.keyword(Keywords.IMPORT).qualifier("class").consume(QualifierElement::javaClass));
4841
}
4942

5043
@Autowired(order = 1)

panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/MainParser.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,13 @@
2727
import org.panda_lang.panda.language.interpreter.parser.RegistrableParser;
2828
import org.panda_lang.panda.language.interpreter.parser.ScopeParser;
2929
import org.panda_lang.panda.language.interpreter.parser.context.BootstrapInitializer;
30+
import org.panda_lang.panda.language.interpreter.parser.context.Delegation;
3031
import org.panda_lang.panda.language.interpreter.parser.context.ParserBootstrap;
3132
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Autowired;
32-
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Ctx;
3333
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Channel;
34+
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Ctx;
3435
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Src;
35-
import org.panda_lang.panda.language.interpreter.parser.context.Delegation;
3636
import org.panda_lang.panda.language.interpreter.parser.context.handlers.TokenHandler;
37-
import org.panda_lang.panda.language.interpreter.parser.context.initializers.LinearPatternInitializer;
3837

3938
@RegistrableParser(pipeline = Pipelines.HEAD_LABEL)
4039
public final class MainParser extends ParserBootstrap<Void> {
@@ -45,8 +44,7 @@ public final class MainParser extends ParserBootstrap<Void> {
4544
protected BootstrapInitializer<Void> initialize(Context context, BootstrapInitializer<Void> initializer) {
4645
return initializer
4746
.handler(new TokenHandler(Keywords.MAIN))
48-
.initializer(new LinearPatternInitializer())
49-
.pattern("main body:{~}");
47+
.linear("main body:{~}");
5048
}
5149

5250
@Autowired(order = 1, delegation = Delegation.NEXT_DEFAULT)

panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/RequireParser.java

+4-10
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,7 @@
2929
import org.panda_lang.framework.design.interpreter.token.TokenInfo;
3030
import org.panda_lang.framework.language.interpreter.parser.PandaParserFailure;
3131
import org.panda_lang.framework.language.interpreter.parser.generation.GenerationCycles;
32-
import org.panda_lang.framework.language.interpreter.pattern.functional.FunctionalPattern;
3332
import org.panda_lang.framework.language.interpreter.pattern.functional.elements.QualifierElement;
34-
import org.panda_lang.framework.language.interpreter.pattern.functional.elements.KeywordElement;
35-
import org.panda_lang.framework.language.interpreter.pattern.functional.elements.VariantElement;
3633
import org.panda_lang.framework.language.interpreter.pattern.functional.elements.WildcardElement;
3734
import org.panda_lang.framework.language.interpreter.pattern.functional.verifiers.TokenTypeVerifier;
3835
import org.panda_lang.framework.language.interpreter.source.PandaURLSource;
@@ -46,7 +43,6 @@
4643
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Ctx;
4744
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Src;
4845
import org.panda_lang.panda.language.interpreter.parser.context.handlers.TokenHandler;
49-
import org.panda_lang.panda.language.interpreter.parser.context.initializers.FunctionalPatternInitializer;
5046
import org.panda_lang.panda.manager.PackageManagerUtils;
5147
import org.slf4j.event.Level;
5248

@@ -61,14 +57,12 @@ public final class RequireParser extends ParserBootstrap<Void> {
6157
protected BootstrapInitializer<Void> initialize(Context context, BootstrapInitializer<Void> initializer) {
6258
return initializer
6359
.handler(new TokenHandler(Keywords.REQUIRE))
64-
.initializer(new FunctionalPatternInitializer())
65-
.pattern(FunctionalPattern.of(
66-
KeywordElement.create(Keywords.REQUIRE),
67-
VariantElement.create("variant").content(
60+
.functional(pattern -> pattern
61+
.keyword(Keywords.REQUIRE)
62+
.variant("variant").consume(variant -> variant.content(
6863
QualifierElement.create("required").pandaModule(),
6964
WildcardElement.create("requiredFile").verify(new TokenTypeVerifier(TokenTypes.SEQUENCE))
70-
)
71-
));
65+
)));
7266
}
7367

7468
@Autowired(order = 1, cycle = GenerationCycles.TYPES_LABEL)

panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/LateDeclarationParser.java

+6-15
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,6 @@
2323
import org.panda_lang.framework.design.interpreter.token.Snippetable;
2424
import org.panda_lang.framework.language.architecture.statement.PandaVariableDataInitializer;
2525
import org.panda_lang.framework.language.interpreter.pattern.Mappings;
26-
import org.panda_lang.framework.language.interpreter.pattern.functional.FunctionalPattern;
27-
import org.panda_lang.framework.language.interpreter.pattern.functional.elements.KeywordElement;
28-
import org.panda_lang.framework.language.interpreter.pattern.functional.elements.TypeElement;
29-
import org.panda_lang.framework.language.interpreter.pattern.functional.elements.WildcardElement;
30-
import org.panda_lang.framework.language.interpreter.pattern.functional.verifiers.NextTokenTypeVerifier;
31-
import org.panda_lang.framework.language.interpreter.pattern.functional.verifiers.TokenTypeVerifier;
3226
import org.panda_lang.framework.language.resource.syntax.TokenTypes;
3327
import org.panda_lang.framework.language.resource.syntax.keyword.Keywords;
3428
import org.panda_lang.panda.language.interpreter.parser.RegistrableParser;
@@ -39,7 +33,6 @@
3933
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Ctx;
4034
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Src;
4135
import org.panda_lang.panda.language.interpreter.parser.context.handlers.TokenHandler;
42-
import org.panda_lang.panda.language.interpreter.parser.context.initializers.FunctionalPatternInitializer;
4336
import org.panda_lang.panda.language.resource.syntax.PandaPriorities;
4437

4538
@RegistrableParser(pipeline = Pipelines.SCOPE_LABEL, priority = PandaPriorities.SCOPE_LATE_DECLARATION)
@@ -49,14 +42,12 @@ public final class LateDeclarationParser extends ParserBootstrap<Void> {
4942
protected BootstrapInitializer<Void> initialize(Context context, BootstrapInitializer<Void> initializer) {
5043
return initializer
5144
.handler(new TokenHandler(Keywords.LATE))
52-
.initializer(new FunctionalPatternInitializer())
53-
.pattern(FunctionalPattern.of(
54-
KeywordElement.create(Keywords.LATE),
55-
KeywordElement.create(Keywords.MUT).optional(),
56-
KeywordElement.create(Keywords.NIL).optional(),
57-
TypeElement.create("type").optional().verify(new NextTokenTypeVerifier(TokenTypes.UNKNOWN)),
58-
WildcardElement.create("name").verify(new TokenTypeVerifier(TokenTypes.UNKNOWN))
59-
));
45+
.functional(pattern -> pattern
46+
.keyword(Keywords.LATE).optional()
47+
.keyword(Keywords.MUT).optional()
48+
.keyword(Keywords.NIL).optional()
49+
.type("type").optional().verifyNextType(TokenTypes.UNKNOWN)
50+
.wildcard("name").verifyType(TokenTypes.UNKNOWN));
6051
}
6152

6253
@Autowired(order = 1)

panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/LogParser.java

+1-9
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,6 @@
2525
import org.panda_lang.framework.design.interpreter.parser.expression.ExpressionTransaction;
2626
import org.panda_lang.framework.design.interpreter.parser.pipeline.Pipelines;
2727
import org.panda_lang.framework.design.interpreter.source.Location;
28-
import org.panda_lang.framework.language.interpreter.pattern.functional.FunctionalPattern;
29-
import org.panda_lang.framework.language.interpreter.pattern.functional.elements.ArgumentsElement;
30-
import org.panda_lang.framework.language.interpreter.pattern.functional.elements.KeywordElement;
3128
import org.panda_lang.framework.language.resource.syntax.keyword.Keywords;
3229
import org.panda_lang.panda.language.interpreter.parser.RegistrableParser;
3330
import org.panda_lang.panda.language.interpreter.parser.context.BootstrapInitializer;
@@ -37,7 +34,6 @@
3734
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Ctx;
3835
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Src;
3936
import org.panda_lang.panda.language.interpreter.parser.context.handlers.TokenHandler;
40-
import org.panda_lang.panda.language.interpreter.parser.context.initializers.FunctionalPatternInitializer;
4137

4238
import java.util.Arrays;
4339

@@ -48,11 +44,7 @@ public final class LogParser extends ParserBootstrap<Void> {
4844
protected BootstrapInitializer<Void> initialize(Context context, BootstrapInitializer<Void> initializer) {
4945
return initializer
5046
.handler(new TokenHandler(Keywords.LOG))
51-
.initializer(new FunctionalPatternInitializer())
52-
.pattern(FunctionalPattern.of(
53-
KeywordElement.create(Keywords.LOG),
54-
ArgumentsElement.create("arguments")
55-
));
47+
.functional(pattern -> pattern.keyword(Keywords.LOG).arguments("arguments"));
5648
}
5749

5850
@Autowired(order = 1)

panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/TryCatchParser.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616

1717
package org.panda_lang.panda.language.resource.syntax.scope;
1818

19-
import org.panda_lang.framework.design.architecture.type.DynamicClass;
2019
import org.panda_lang.framework.design.architecture.statement.Scope;
2120
import org.panda_lang.framework.design.architecture.statement.Variable;
2221
import org.panda_lang.framework.design.architecture.statement.VariableData;
22+
import org.panda_lang.framework.design.architecture.type.DynamicClass;
2323
import org.panda_lang.framework.design.interpreter.parser.Context;
2424
import org.panda_lang.framework.design.interpreter.parser.LocalChannel;
2525
import org.panda_lang.framework.design.interpreter.parser.pipeline.Pipelines;
@@ -33,11 +33,10 @@
3333
import org.panda_lang.panda.language.interpreter.parser.context.BootstrapInitializer;
3434
import org.panda_lang.panda.language.interpreter.parser.context.ParserBootstrap;
3535
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Autowired;
36-
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Ctx;
3736
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Channel;
37+
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Ctx;
3838
import org.panda_lang.panda.language.interpreter.parser.context.annotations.Src;
3939
import org.panda_lang.panda.language.interpreter.parser.context.handlers.TokenHandler;
40-
import org.panda_lang.panda.language.interpreter.parser.context.initializers.LinearPatternInitializer;
4140

4241
@RegistrableParser(pipeline = Pipelines.SCOPE_LABEL)
4342
public final class TryCatchParser extends ParserBootstrap<Void> {
@@ -48,8 +47,7 @@ public final class TryCatchParser extends ParserBootstrap<Void> {
4847
protected BootstrapInitializer<Void> initialize(Context context, BootstrapInitializer<Void> initializer) {
4948
return initializer
5049
.handler(new TokenHandler(Keywords.TRY))
51-
.initializer(new LinearPatternInitializer())
52-
.pattern("try try-body:{~} catch catch-what:(~) catch-body:{~}");
50+
.linear("try try-body:{~} catch catch-what:(~) catch-body:{~}");
5351
}
5452

5553
@Autowired(order = 1)

0 commit comments

Comments
 (0)