Skip to content

Commit a630980

Browse files
committed
Add LinguisticDescriptor concept and apply in LinguisticPattern&Context
1 parent 162280e commit a630980

File tree

22 files changed

+149
-113
lines changed

22 files changed

+149
-113
lines changed

light-core/src/main/java/org/panda_lang/light/framework/design/architecture/linguistic/Context.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
public interface Context {
2424

25-
@Nullable LinguisticAct find(String sentence, @Nullable LinguisticCandidate<LinguisticAct> previousCandidate);
25+
@Nullable LinguisticAct find(String sentence, @Nullable LinguisticCandidate<LinguisticDescriptor> previousCandidate);
2626

2727
void importComponent(ContextComponent<?> component);
2828

light-core/src/main/java/org/panda_lang/light/framework/design/architecture/linguistic/ContextComponent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
public interface ContextComponent<T> {
2525

26-
LinguisticCandidate<LinguisticAct> recognize(Context context, String sentence, @Nullable LinguisticCandidate<LinguisticAct> previousCandidate);
26+
LinguisticCandidate<LinguisticDescriptor> recognize(Context context, String sentence, @Nullable LinguisticCandidate<LinguisticDescriptor> previousCandidate);
2727

2828
void registerElement(T element);
2929

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.panda_lang.light.framework.design.architecture.linguistic;
2+
3+
public interface LinguisticDescriptor {
4+
5+
LinguisticAct[] getActs();
6+
7+
String getIdentifier();
8+
9+
}

light-core/src/main/java/org/panda_lang/light/framework/design/architecture/linguistic/phraseme/Phraseme.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,13 @@
1616

1717
package org.panda_lang.light.framework.design.architecture.linguistic.phraseme;
1818

19-
import org.panda_lang.light.framework.design.architecture.linguistic.LinguisticAct;
19+
import org.panda_lang.light.framework.design.architecture.linguistic.LinguisticDescriptor;
2020
import org.panda_lang.light.framework.design.interpreter.pattern.linguistic.LinguisticPattern;
2121

22-
public interface Phraseme {
22+
public interface Phraseme extends LinguisticDescriptor {
2323

2424
void increaseUsages();
2525

2626
LinguisticPattern getPattern();
2727

28-
LinguisticAct getAct();
29-
3028
}

light-core/src/main/java/org/panda_lang/light/framework/design/architecture/linguistic/type/TypeResolver.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818

1919
import org.jetbrains.annotations.Nullable;
2020
import org.panda_lang.light.framework.design.architecture.linguistic.ContextComponent;
21-
import org.panda_lang.light.framework.design.architecture.linguistic.LinguisticAct;
21+
import org.panda_lang.light.framework.design.architecture.linguistic.LinguisticDescriptor;
2222

2323
public interface TypeResolver {
2424

25-
@Nullable LinguisticAct resolve(ContextComponent<Type<?>> component, String sentence);
25+
@Nullable LinguisticDescriptor resolve(ContextComponent<Type<?>> component, String sentence);
2626

2727
}

light-core/src/main/java/org/panda_lang/light/framework/design/interpreter/pattern/linguistic/LinguisticCandidate.java

Lines changed: 9 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -16,46 +16,19 @@
1616

1717
package org.panda_lang.light.framework.design.interpreter.pattern.linguistic;
1818

19-
import org.jetbrains.annotations.Nullable;
20-
2119
public class LinguisticCandidate<T> {
2220

23-
private final boolean matched;
21+
private static final LinguisticCandidate<?> NOT_MATCHED = new LinguisticCandidate<>(null, null);
22+
2423
private final T matchedElement;
2524
private final LinguisticPatternResult<T> linguisticResult;
26-
private final LinguisticCandidate<T> previousCandidate;
27-
private boolean definite;
2825

29-
public LinguisticCandidate(boolean matched, boolean definite, T matchedElement, LinguisticPatternResult<T> linguisticResult, LinguisticCandidate<T> previousCandidate) {
30-
this.matched = matched;
31-
this.definite = definite;
26+
public LinguisticCandidate(T matchedElement, LinguisticPatternResult<T> linguisticResult) {
3227
this.matchedElement = matchedElement;
3328
this.linguisticResult = linguisticResult;
34-
this.previousCandidate = previousCandidate;
35-
}
36-
37-
public LinguisticCandidate(T matchedElement, LinguisticPatternResult<T> linguisticResult, @Nullable LinguisticCandidate<T> previousCandidate) {
38-
this(true, true, matchedElement, linguisticResult, previousCandidate);
3929
}
40-
41-
public LinguisticCandidate(T matchedElement, LinguisticPatternResult<T> linguisticResult) {
42-
this(matchedElement, linguisticResult, null);
43-
}
44-
45-
public LinguisticCandidate(boolean matched) {
46-
this(matched, true, null, null, null);
47-
}
48-
49-
public boolean isDefinite() {
50-
return definite;
51-
}
52-
5330
public boolean isMatched() {
54-
return matched;
55-
}
56-
57-
public LinguisticCandidate<T> getPreviousCandidate() {
58-
return previousCandidate;
31+
return matchedElement != null;
5932
}
6033

6134
public LinguisticPatternResult<T> getLinguisticResult() {
@@ -66,4 +39,9 @@ public T getMatchedElement() {
6639
return matchedElement;
6740
}
6841

42+
@SuppressWarnings("unchecked")
43+
public static <T> LinguisticCandidate<T> notMatched() {
44+
return (LinguisticCandidate<T>) NOT_MATCHED;
45+
}
46+
6947
}

light-core/src/main/java/org/panda_lang/light/framework/design/interpreter/pattern/linguistic/LinguisticExtractor.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,27 +19,27 @@
1919
import org.jetbrains.annotations.Nullable;
2020
import org.panda_lang.light.LightException;
2121
import org.panda_lang.light.framework.design.architecture.linguistic.Context;
22-
import org.panda_lang.light.framework.design.architecture.linguistic.LinguisticAct;
22+
import org.panda_lang.light.framework.design.architecture.linguistic.LinguisticDescriptor;
2323
import org.panda_lang.panda.framework.language.interpreter.pattern.lexical.extractor.LexicalExtractor;
2424
import org.panda_lang.panda.framework.language.interpreter.pattern.lexical.extractor.LexicalExtractorResult;
2525
import org.panda_lang.panda.framework.language.interpreter.pattern.lexical.extractor.LexicalExtractorWorker;
2626
import org.panda_lang.panda.framework.language.interpreter.pattern.lexical.extractor.processed.WildcardProcessor;
2727

28-
public class LinguisticExtractor implements LexicalExtractor<LinguisticAct> {
28+
class LinguisticExtractor implements LexicalExtractor<LinguisticDescriptor> {
2929

3030
private final Context context;
3131
private final LinguisticPattern pattern;
32-
private final @Nullable LinguisticCandidate<LinguisticAct> previousCandidate;
32+
private final @Nullable LinguisticCandidate<LinguisticDescriptor> previousCandidate;
3333

34-
public LinguisticExtractor(Context context, LinguisticPattern pattern, @Nullable LinguisticCandidate<LinguisticAct> previousResult) {
34+
LinguisticExtractor(Context context, LinguisticPattern pattern, @Nullable LinguisticCandidate<LinguisticDescriptor> previousResult) {
3535
this.pattern = pattern;
3636
this.context = context;
3737
this.previousCandidate = previousResult;
3838
}
3939

4040
@Override
41-
public LexicalExtractorResult<LinguisticAct> extract(String phrase) {
42-
WildcardProcessor<LinguisticAct> wildcardProcessor = null;
41+
public LexicalExtractorResult<LinguisticDescriptor> extract(String phrase) {
42+
WildcardProcessor<LinguisticDescriptor> wildcardProcessor = null;
4343

4444
if (pattern.getWildcardProcessor() != null) {
4545
wildcardProcessor = (details, wildcard) -> {
@@ -55,7 +55,7 @@ public LexicalExtractorResult<LinguisticAct> extract(String phrase) {
5555
wildcardProcessor = pattern.getLexicalPattern().getWildcardProcessor();
5656
}
5757

58-
LexicalExtractorWorker<LinguisticAct> extractorWorker = new LexicalExtractorWorker<>(wildcardProcessor);
58+
LexicalExtractorWorker<LinguisticDescriptor> extractorWorker = new LexicalExtractorWorker<>(wildcardProcessor);
5959
return extractorWorker.extract(pattern.getLexicalPattern().getModel(), phrase);
6060
}
6161

light-core/src/main/java/org/panda_lang/light/framework/design/interpreter/pattern/linguistic/LinguisticPattern.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,28 @@
1818

1919
import org.jetbrains.annotations.Nullable;
2020
import org.panda_lang.light.framework.design.architecture.linguistic.Context;
21-
import org.panda_lang.light.framework.design.architecture.linguistic.LinguisticAct;
21+
import org.panda_lang.light.framework.design.architecture.linguistic.LinguisticDescriptor;
2222
import org.panda_lang.panda.framework.language.interpreter.pattern.lexical.LexicalPattern;
2323
import org.panda_lang.panda.framework.language.interpreter.pattern.lexical.extractor.LexicalExtractorResult;
2424

2525
public class LinguisticPattern {
2626

27-
private final LexicalPattern<LinguisticAct> lexicalPattern;
27+
private final LexicalPattern<LinguisticDescriptor> lexicalPattern;
2828
private @Nullable LinguisticWildcardProcessor wildcardProcessor;
2929

30-
public LinguisticPattern(LexicalPattern<LinguisticAct> lexicalPattern, @Nullable LinguisticWildcardProcessor wildcardProcessor) {
30+
public LinguisticPattern(LexicalPattern<LinguisticDescriptor> lexicalPattern, @Nullable LinguisticWildcardProcessor wildcardProcessor) {
3131
this.lexicalPattern = lexicalPattern;
3232
this.wildcardProcessor = wildcardProcessor;
3333
}
3434

35-
public LinguisticPatternResult<LinguisticAct> match(String sentence, Context context, @Nullable LinguisticCandidate<LinguisticAct> previousResult) {
35+
public LinguisticPatternResult<LinguisticDescriptor> match(String sentence, Context context, @Nullable LinguisticCandidate<LinguisticDescriptor> previousResult) {
3636
LinguisticExtractor extractor = new LinguisticExtractor(context, this, previousResult);
37-
LexicalExtractorResult<LinguisticAct> result = lexicalPattern.extract(extractor, sentence);
37+
LexicalExtractorResult<LinguisticDescriptor> result = lexicalPattern.extract(extractor, sentence);
3838

3939
return new LinguisticPatternResult<>(result);
4040
}
4141

42-
public void setWildcardProcessor(LinguisticWildcardProcessor wildcardProcessor) {
42+
public void setWildcardProcessor(@Nullable LinguisticWildcardProcessor wildcardProcessor) {
4343
this.wildcardProcessor = wildcardProcessor;
4444
}
4545

@@ -51,7 +51,7 @@ public boolean hasWildcardProcessor() {
5151
return wildcardProcessor;
5252
}
5353

54-
public LexicalPattern<LinguisticAct> getLexicalPattern() {
54+
public LexicalPattern<LinguisticDescriptor> getLexicalPattern() {
5555
return lexicalPattern;
5656
}
5757

light-core/src/main/java/org/panda_lang/light/framework/design/interpreter/pattern/linguistic/LinguisticPatternBuilder.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616

1717
package org.panda_lang.light.framework.design.interpreter.pattern.linguistic;
1818

19-
import org.panda_lang.light.framework.design.architecture.linguistic.LinguisticAct;
19+
import org.panda_lang.light.framework.design.architecture.linguistic.LinguisticDescriptor;
2020
import org.panda_lang.panda.framework.language.interpreter.pattern.lexical.LexicalPattern;
2121
import org.panda_lang.panda.framework.language.interpreter.pattern.lexical.extractor.processed.WildcardProcessor;
2222

2323
public class LinguisticPatternBuilder {
2424

25-
private LexicalPattern<LinguisticAct> pattern;
25+
private LexicalPattern<LinguisticDescriptor> pattern;
2626
private LinguisticWildcardProcessor wildcardProcessor;
2727

2828
public LinguisticPatternBuilder compile(String pattern) {
@@ -33,18 +33,18 @@ public LinguisticPatternBuilder compile(String pattern) {
3333
return this;
3434
}
3535

36-
public LinguisticPattern build() {
37-
return new LinguisticPattern(pattern, wildcardProcessor);
38-
}
39-
40-
public LinguisticPatternBuilder setWildcardProcessor(WildcardProcessor<LinguisticAct> wildcardProcessor) {
36+
public LinguisticPatternBuilder wildcardProcessor(WildcardProcessor<LinguisticDescriptor> wildcardProcessor) {
4137
pattern.setWildcardProcessor(wildcardProcessor);
4238
return this;
4339
}
4440

45-
public LinguisticPatternBuilder setWildcardProcessor(LinguisticWildcardProcessor wildcardProcessor) {
41+
public LinguisticPatternBuilder wildcardProcessor(LinguisticWildcardProcessor wildcardProcessor) {
4642
this.wildcardProcessor = wildcardProcessor;
4743
return this;
4844
}
4945

46+
public LinguisticPattern build() {
47+
return new LinguisticPattern(pattern, wildcardProcessor);
48+
}
49+
5050
}

light-core/src/main/java/org/panda_lang/light/framework/design/interpreter/pattern/linguistic/LinguisticPatternCompiler.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,25 @@
1616

1717
package org.panda_lang.light.framework.design.interpreter.pattern.linguistic;
1818

19-
import org.panda_lang.light.framework.design.architecture.linguistic.LinguisticAct;
19+
import org.panda_lang.light.framework.design.architecture.linguistic.LinguisticDescriptor;
2020
import org.panda_lang.panda.framework.language.interpreter.pattern.lexical.LexicalPattern;
2121

22-
public class LinguisticPatternCompiler {
22+
class LinguisticPatternCompiler {
2323

2424
private final String pattern;
25-
private LexicalPattern<LinguisticAct> lexicalPattern;
25+
private LexicalPattern<LinguisticDescriptor> lexicalPattern;
2626

27-
public LinguisticPatternCompiler(String pattern) {
27+
LinguisticPatternCompiler(String pattern) {
2828
this.pattern = pattern;
2929
}
3030

31-
public void compile() {
32-
this.lexicalPattern = LexicalPattern.<LinguisticAct> builder()
31+
protected void compile() {
32+
this.lexicalPattern = LexicalPattern.<LinguisticDescriptor> builder()
3333
.compile(pattern)
3434
.build();
3535
}
3636

37-
public LexicalPattern<LinguisticAct> getLexicalPattern() {
37+
protected LexicalPattern<LinguisticDescriptor> getLexicalPattern() {
3838
return lexicalPattern;
3939
}
4040

0 commit comments

Comments
 (0)