MCPcopy Create free account
hub / github.com/cschanck/single-file-java / firstOf

Method firstOf

src/main/java/org/sfj/PegLegParser.java:787–818  ·  view source on GitHub ↗

Core PEG rule "Choice", here called firstOf. Tries each sub rule in turn, return first match. @param objs rules/string literals/char literals/execs @return rule

(Object... objs)

Source from the content-addressed store, hash-verified

785 * @return rule
786 */
787 public ParentRule firstOf(Object... objs) {
788 List<Step> steps = asSteps(objs);
789 PegLegRule<V> rule;
790 if (steps.size() == 1 && steps.get(0).isRule()) {
791 rule = steps.get(0).asRule();
792 } else {
793 rule = () -> {
794 get().pushFrame("firstOf()");
795 SingleNode<V> values = get().saveValues();
796 int cnt = get().frameDepth();
797 for (Step r : steps) {
798 if (r.isRule()) {
799 get().pushFrame();
800 RuleReturn<V> ret = r.asRule().rule();
801 if (ret.matched()) {
802 get().trimFramesTo(cnt);
803 return get().ruleReturn(true, true);
804 }
805 get().resetToLastFrame();
806 } else {
807 if (!r.asExec().exec()) {
808 get().rollback(cnt, values);
809 return get().ruleReturn(false, false);
810 }
811 }
812 }
813 get().rollback(cnt, values);
814 return get().ruleReturn(false, false);
815 };
816 }
817 return new ParentRule(rule);
818 }
819
820 /**
821 * Core PEG Rule, "Test" returns true if sequence of rules matches, but does not consume input.

Callers 15

orabcdMethod · 0.80
factorMethod · 0.80
stepsMethod · 0.80
singleStepMethod · 0.80
angleStepMethod · 0.80
simpleStringMethod · 0.80
arrSpecMethod · 0.80
charsMethod · 0.80
escapedCharMethod · 0.80
hexMethod · 0.80
argMethod · 0.80
jsonMethod · 0.80

Calls 15

asStepsMethod · 0.95
getMethod · 0.95
isRuleMethod · 0.80
asRuleMethod · 0.80
pushFrameMethod · 0.80
saveValuesMethod · 0.80
frameDepthMethod · 0.80
matchedMethod · 0.80
trimFramesToMethod · 0.80
ruleReturnMethod · 0.80
resetToLastFrameMethod · 0.80
execMethod · 0.80

Tested by 11

orabcdMethod · 0.64
factorMethod · 0.64
stepsMethod · 0.64
singleStepMethod · 0.64
angleStepMethod · 0.64
simpleStringMethod · 0.64
arrSpecMethod · 0.64
charsMethod · 0.64
escapedCharMethod · 0.64
hexMethod · 0.64
argMethod · 0.64