Skip to content

Commit

Permalink
refactor: let Marlin.java use a custom constructor method of Preproce…
Browse files Browse the repository at this point in the history
…ssorAnnotationParser
  • Loading branch information
AlexanderSchultheiss committed Feb 21, 2024
1 parent 50c1d8a commit 16c6586
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@
*/
public class Marlin {
public static final PreprocessorAnnotationParser ANNOTATION_PARSER =
new PreprocessorAnnotationParser(
PreprocessorAnnotationParser.CPP_PATTERN,
PreprocessorAnnotationParser.CreateCppAnnotationParser(
PropositionalFormulaParser.Default,
new MarlinCPPDiffLineFormulaExtractor()
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class PreprocessorAnnotationParser implements AnnotationParser {
* <p>
* Note that this pattern doesn't handle comments between {@code #} and the macro name.
*/
public final static Pattern CPP_PATTERN =
protected final static Pattern CPP_PATTERN =
Pattern.compile("^[+-]?\\s*#\\s*(if|elif|else|endif)");

/**
Expand All @@ -29,7 +29,7 @@ public class PreprocessorAnnotationParser implements AnnotationParser {
* matched and only {@code "if"} is captured.
* <p>
*/
public final static Pattern JPP_PATTERN =
protected final static Pattern JPP_PATTERN =
Pattern.compile("^[+-]?\\s*//\\s*#\\s*(if|elif|else|endif)");

/**
Expand Down Expand Up @@ -74,6 +74,26 @@ public PreprocessorAnnotationParser(final Pattern annotationPattern, final Propo
this.extractor = formulaExtractor;
}

/**
* Creates a new preprocessor annotation parser for C preprocessor annotations.
*
* @param formulaParser Parser that is used to parse propositional formulas in conditional annotations (e.g., the formula <code>f</code> in <code>#if f</code>).
* @param formulaExtractor An extractor that extracts the formula part of a preprocessor annotation that is then given to the formulaParser.
*/
public static PreprocessorAnnotationParser CreateCppAnnotationParser(final PropositionalFormulaParser formulaParser, DiffLineFormulaExtractor formulaExtractor) {
return new PreprocessorAnnotationParser(CPP_PATTERN, formulaParser, formulaExtractor);
}

/**
* Creates a new preprocessor annotation parser for <a href="https://www.slashdev.ca/javapp/">JavaPP (Java PreProcessor)</a> annotations.
*
* @param formulaParser Parser that is used to parse propositional formulas in conditional annotations (e.g., the formula <code>f</code> in <code>#if f</code>).
* @param formulaExtractor An extractor that extracts the formula part of a preprocessor annotation that is then given to the formulaParser.
*/
public static PreprocessorAnnotationParser CreateJppAnnotationParser(final PropositionalFormulaParser formulaParser, DiffLineFormulaExtractor formulaExtractor) {
return new PreprocessorAnnotationParser(JPP_PATTERN, formulaParser, formulaExtractor);
}

/**
* Parses the condition of the given line of source code that contains a preprocessor macro (i.e., IF, IFDEF, ELIF).
*
Expand Down

0 comments on commit 16c6586

Please sign in to comment.