mirror of
https://github.com/DanilaFe/abacus
synced 2024-12-22 07:20:09 -08:00
Implement a few nodes for the pattern matching.
This commit is contained in:
parent
3b91304175
commit
2374c167a4
10
src/org/nwapw/abacus/lexing/pattern/AnyNode.java
Normal file
10
src/org/nwapw/abacus/lexing/pattern/AnyNode.java
Normal file
|
@ -0,0 +1,10 @@
|
|||
package org.nwapw.abacus.lexing.pattern;
|
||||
|
||||
public class AnyNode<T> extends PatternNode<T> {
|
||||
|
||||
@Override
|
||||
public boolean matches(char other) {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
15
src/org/nwapw/abacus/lexing/pattern/EndNode.java
Normal file
15
src/org/nwapw/abacus/lexing/pattern/EndNode.java
Normal file
|
@ -0,0 +1,15 @@
|
|||
package org.nwapw.abacus.lexing.pattern;
|
||||
|
||||
public class EndNode<T> extends PatternNode<T> {
|
||||
|
||||
private T patternId;
|
||||
|
||||
public EndNode(T patternId){
|
||||
this.patternId = patternId;
|
||||
}
|
||||
|
||||
public T getPatternId(){
|
||||
return patternId;
|
||||
}
|
||||
|
||||
}
|
14
src/org/nwapw/abacus/lexing/pattern/LinkNode.java
Normal file
14
src/org/nwapw/abacus/lexing/pattern/LinkNode.java
Normal file
|
@ -0,0 +1,14 @@
|
|||
package org.nwapw.abacus.lexing.pattern;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class LinkNode<T> extends PatternNode<T> {
|
||||
|
||||
@Override
|
||||
public void addInto(ArrayList<PatternNode<T>> into) {
|
||||
for(PatternNode<T> node : outputStates){
|
||||
node.addInto(into);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
25
src/org/nwapw/abacus/lexing/pattern/PatternNode.java
Normal file
25
src/org/nwapw/abacus/lexing/pattern/PatternNode.java
Normal file
|
@ -0,0 +1,25 @@
|
|||
package org.nwapw.abacus.lexing.pattern;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class PatternNode<T> {
|
||||
|
||||
protected ArrayList<PatternNode<T>> outputStates;
|
||||
|
||||
public PatternNode(){
|
||||
outputStates = new ArrayList<>();
|
||||
}
|
||||
|
||||
public boolean matches(char other){
|
||||
return false;
|
||||
}
|
||||
|
||||
public char range(){
|
||||
return '\0';
|
||||
}
|
||||
|
||||
public void addInto(ArrayList<PatternNode<T>> into){
|
||||
into.add(this);
|
||||
}
|
||||
|
||||
}
|
18
src/org/nwapw/abacus/lexing/pattern/RangeNode.java
Normal file
18
src/org/nwapw/abacus/lexing/pattern/RangeNode.java
Normal file
|
@ -0,0 +1,18 @@
|
|||
package org.nwapw.abacus.lexing.pattern;
|
||||
|
||||
public class RangeNode<T> extends PatternNode<T> {
|
||||
|
||||
private char from;
|
||||
private char to;
|
||||
|
||||
public RangeNode(char from, char to){
|
||||
this.from = from;
|
||||
this.to = to;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(char other) {
|
||||
return other >= from && other <= to;
|
||||
}
|
||||
|
||||
}
|
20
src/org/nwapw/abacus/lexing/pattern/ValueNode.java
Normal file
20
src/org/nwapw/abacus/lexing/pattern/ValueNode.java
Normal file
|
@ -0,0 +1,20 @@
|
|||
package org.nwapw.abacus.lexing.pattern;
|
||||
|
||||
public class ValueNode<T> extends PatternNode<T> {
|
||||
|
||||
private char value;
|
||||
|
||||
public ValueNode(char value){
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(char other) {
|
||||
return other == value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public char range() {
|
||||
return value;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user