diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml new file mode 100644 index 00000000..13723fdb --- /dev/null +++ b/.github/workflows/maven.yml @@ -0,0 +1,27 @@ +# This workflow will build a Java project with Maven +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven + +name: Java CI with Maven + +on: [push, pull_request] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Cache Maven packages + uses: actions/cache@v1 + with: + path: ~/.m2 + key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-m2 + - name: Build with Maven + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: mvn -B compile --file pom.xml diff --git a/.gitignore b/.gitignore index 415cdef9..ba136c70 100644 --- a/.gitignore +++ b/.gitignore @@ -100,7 +100,6 @@ $.* texput.* Untitled* .~lock.* -_* # Prefixes // vim: +,/^\s*$/-1!sort -u a.out @@ -148,3 +147,10 @@ out/ .classpath .project .settings/ + +# MacOS junk +.DS_Store + +# IntelliJunk +.idea/ +.iml diff --git a/pom.xml b/pom.xml index 51606fba..72074003 100644 --- a/pom.xml +++ b/pom.xml @@ -88,4 +88,4 @@ - + \ No newline at end of file diff --git a/src/test/java/il/ac/technion/cs/fling/examples/LoopOverLanguageDefinitions.java b/src/test/java/il/ac/technion/cs/fling/examples/LoopOverLanguageDefinitions.java index 8ee9ce02..82516a42 100644 --- a/src/test/java/il/ac/technion/cs/fling/examples/LoopOverLanguageDefinitions.java +++ b/src/test/java/il/ac/technion/cs/fling/examples/LoopOverLanguageDefinitions.java @@ -27,6 +27,7 @@ new RegularExpression(), // new HTMLTable(), // new SimpleArithmetic(), // + new Json(), }; private static final Map files = ((Supplier>) () -> { final Map $ = new LinkedHashMap<>(); diff --git a/src/test/java/il/ac/technion/cs/fling/examples/languages/Json.java b/src/test/java/il/ac/technion/cs/fling/examples/languages/Json.java new file mode 100644 index 00000000..9eb4307d --- /dev/null +++ b/src/test/java/il/ac/technion/cs/fling/examples/languages/Json.java @@ -0,0 +1,45 @@ +package il.ac.technion.cs.fling.examples.languages; + +import il.ac.technion.cs.fling.BNF; +import il.ac.technion.cs.fling.Terminal; +import il.ac.technion.cs.fling.Variable; +import il.ac.technion.cs.fling.examples.FluentLanguageAPI; +import il.ac.technion.cs.fling.examples.languages.Json.V; +import il.ac.technion.cs.fling.examples.languages.Json.Σ; + +import static il.ac.technion.cs.fling.Symbol.noneOrMore; +import static il.ac.technion.cs.fling.examples.languages.Json.V.*; +import static il.ac.technion.cs.fling.examples.languages.Json.Σ.*; +import static il.ac.technion.cs.fling.grammars.api.BNFAPI.bnf; + +@SuppressWarnings("NonAsciiCharacters") +public class Json implements FluentLanguageAPI<Σ, V> { + public enum Σ implements Terminal { + array, end, isSetTo, key, object, value, _null_ + } + + public enum V implements Variable { + Element, Field, Json, Value + } + + @Override public Class<Σ> Σ() { + return Σ.class; + } + @Override public Class V() { + return V.class; + } + @Override public BNF BNF() { + return bnf(). + start(Json). + derive(Json).to(Element). + derive(Element).to(object, noneOrMore(Field), end). + or(array, noneOrMore(Element), end). + or(Value). + derive(Value).to(value.with(String.class)). + or(value.with(Number.class)). + or(value.with(Boolean.class)). + or(_null_). + derive(Field).to(key.with(String.class), isSetTo, Element). + build(); + } +} diff --git a/src/test/java/il/ac/technion/cs/fling/examples/usecases/Json.java b/src/test/java/il/ac/technion/cs/fling/examples/usecases/Json.java new file mode 100644 index 00000000..890207db --- /dev/null +++ b/src/test/java/il/ac/technion/cs/fling/examples/usecases/Json.java @@ -0,0 +1,44 @@ +package il.ac.technion.cs.fling.examples.usecases; + +import static il.ac.technion.cs.fling.examples.generated.Json.value; +import static il.ac.technion.cs.fling.examples.generated.Json.array; +import static il.ac.technion.cs.fling.examples.generated.Json.object; + +// @formatter:off +public class Json { + public static void main(String[] args) { + value("f"); + value(8); + value(true); + array(); //TODO: how come this is legal? + array().end(); + array().value("f").end(); + array() + .value(8) + .value("fg") + .array().end() + .end(); + + object().end(); + + object().key("name").isSetTo().value(8).end(); + + object() + .key("name").isSetTo().value("Joe") + .key("age").isSetTo().value(8) + .end(); + + object(). + key("name").isSetTo() + .object() + .key("first").isSetTo().value("Joe") + .key("last").isSetTo()._null_() + .end(). + key("ages").isSetTo() + .array() + .value(60) + .value(70) + .end() + .end(); + } +}