commit 79b939217300a451892162d024878b0d2635f9ab Author: Glen Whitney Date: Tue Dec 15 00:24:59 2020 -0800 init: Spoofax language project as generated diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d0d8774 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +/.cache +/bin +/src-gen +/target + +/.classpath +/.project +/.settings +/.factorypath + +/.polyglot.metaborg.yaml diff --git a/.mvn/extensions.xml b/.mvn/extensions.xml new file mode 100644 index 0000000..220fdd9 --- /dev/null +++ b/.mvn/extensions.xml @@ -0,0 +1,8 @@ + + + + org.metaborg + spoofax-maven-plugin-pomless + 2.5.13 + + diff --git a/.mvn/jvm.config b/.mvn/jvm.config new file mode 100644 index 0000000..67bd169 --- /dev/null +++ b/.mvn/jvm.config @@ -0,0 +1 @@ +-Xmx512m diff --git a/.mvn/maven.config b/.mvn/maven.config new file mode 100644 index 0000000..6998b70 --- /dev/null +++ b/.mvn/maven.config @@ -0,0 +1 @@ +--global-settings .mvn/settings.xml diff --git a/.mvn/settings.xml b/.mvn/settings.xml new file mode 100644 index 0000000..9a31c2a --- /dev/null +++ b/.mvn/settings.xml @@ -0,0 +1,69 @@ + + + + + add-metaborg-release-repos + + + metaborg-release-repo + https://artifacts.metaborg.org/content/repositories/releases/ + + true + + + false + + + + + + metaborg-release-repo + https://artifacts.metaborg.org/content/repositories/releases/ + + true + + + false + + + + + + + add-metaborg-snapshot-repos + + + metaborg-snapshot-repo + https://artifacts.metaborg.org/content/repositories/snapshots/ + + false + + + true + + + + + + metaborg-snapshot-repo + https://artifacts.metaborg.org/content/repositories/snapshots/ + + false + + + true + + + + + + + + add-metaborg-release-repos + add-metaborg-snapshot-repos + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..1f46858 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# Spoofax-Propositional-Language Language Specification + diff --git a/editor/Analysis.esv b/editor/Analysis.esv new file mode 100644 index 0000000..4bd2bbe --- /dev/null +++ b/editor/Analysis.esv @@ -0,0 +1,10 @@ +module Analysis + +imports + + nabl2/Menus + nabl2/References + +language + + observer : editor-analyze (constraint) diff --git a/editor/Main.esv b/editor/Main.esv new file mode 100644 index 0000000..82989d9 --- /dev/null +++ b/editor/Main.esv @@ -0,0 +1,13 @@ +module Main + +imports + + Syntax + Analysis + +language + + extensions : spl + + provider : target/metaborg/stratego.ctree + provider : target/metaborg/stratego.jar diff --git a/editor/Syntax.esv b/editor/Syntax.esv new file mode 100644 index 0000000..38f1bc9 --- /dev/null +++ b/editor/Syntax.esv @@ -0,0 +1,27 @@ +module Syntax + +imports + + libspoofax/color/default + completion/colorer/Spoofax-Propositional-Language-cc-esv + +language + + table : target/metaborg/sdf.tbl + start symbols : Start + + line comment : "//" + block comment : "/*" * "*/" + fences : [ ] ( ) { } + +menus + + menu: "Syntax" (openeditor) + + action: "Format" = editor-format (source) + action: "Show parsed AST" = debug-show-aterm (source) + +views + + outline view: editor-outline (source) + expand to level: 3 diff --git a/metaborg.yaml b/metaborg.yaml new file mode 100644 index 0000000..4ee399c --- /dev/null +++ b/metaborg.yaml @@ -0,0 +1,41 @@ +--- +id: org.studioinfinity:spoofax_prop:0.1.0-SNAPSHOT +name: Spoofax-Propositional-Language +dependencies: + compile: + - org.metaborg:org.metaborg.meta.lang.esv:${metaborgVersion} + - org.metaborg:org.metaborg.meta.lang.template:${metaborgVersion} + - org.metaborg:org.metaborg.meta.nabl2.lang:${metaborgVersion} + - org.metaborg:dynsem:${metaborgVersion} + source: + - org.metaborg:meta.lib.spoofax:${metaborgVersion} + - org.metaborg:org.metaborg.meta.nabl2.shared:${metaborgVersion} + - org.metaborg:org.metaborg.meta.nabl2.runtime:${metaborgVersion} +pardonedLanguages: +- EditorService +- Stratego-Sugar +- SDF +language: + sdf: + pretty-print: Spoofax-Propositional-Language + sdf2table: java + placeholder: + prefix: "$" + stratego: + format: ctree + args: + - -la + - stratego-lib + - -la + - stratego-sglr + - -la + - stratego-gpp + - -la + - stratego-xtc + - -la + - stratego-aterm + - -la + - stratego-sdf + - -la + - strc +exports: diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..ec9a2fe --- /dev/null +++ b/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + org.studioinfinity + spoofax_prop + 0.1.0-SNAPSHOT + spoofax-language + + + org.metaborg + parent.language + 2.5.13 + + + + + metaborg-release-repo + https://artifacts.metaborg.org/content/repositories/releases/ + + true + + + false + + + + metaborg-snapshot-repo + https://artifacts.metaborg.org/content/repositories/snapshots/ + + false + + + true + + + + + + + metaborg-release-repo + https://artifacts.metaborg.org/content/repositories/releases/ + + true + + + false + + + + metaborg-snapshot-repo + https://artifacts.metaborg.org/content/repositories/snapshots/ + + false + + + true + + + + diff --git a/src/main/strategies/spoofax_prop/strategies/InteropRegisterer.java b/src/main/strategies/spoofax_prop/strategies/InteropRegisterer.java new file mode 100644 index 0000000..fe42778 --- /dev/null +++ b/src/main/strategies/spoofax_prop/strategies/InteropRegisterer.java @@ -0,0 +1,10 @@ +package spoofax_prop.strategies; + +import org.strategoxt.lang.JavaInteropRegisterer; +import org.strategoxt.lang.Strategy; + +public class InteropRegisterer extends JavaInteropRegisterer { + public InteropRegisterer() { + super(new Strategy[] { }); + } +} diff --git a/src/main/strategies/spoofax_prop/strategies/Main.java b/src/main/strategies/spoofax_prop/strategies/Main.java new file mode 100644 index 0000000..69be45b --- /dev/null +++ b/src/main/strategies/spoofax_prop/strategies/Main.java @@ -0,0 +1,9 @@ +package spoofax_prop.strategies; + +import org.strategoxt.lang.Context; + +public class Main { + public static void init(Context context) { + + } +} diff --git a/syntax/Common.sdf3 b/syntax/Common.sdf3 new file mode 100644 index 0000000..fb86b72 --- /dev/null +++ b/syntax/Common.sdf3 @@ -0,0 +1,50 @@ +module Common + +lexical sorts + ID INT STRING + STRING_CHAR BACKSLASH_CHAR + COMMENT_CHAR INSIDE_COMMENT + NEWLINE_EOF EOF + +lexical syntax + + ID = [a-zA-Z] [a-zA-Z0-9]* + INT = "-"? [0-9]+ + STRING = "\"" STRING_CHAR* "\"" + STRING_CHAR = ~[\"\n] + STRING_CHAR = "\\\"" + STRING_CHAR = BACKSLASH_CHAR + BACKSLASH_CHAR = "\\" + LAYOUT = [\ \t\n\r] + COMMENT_CHAR = [\*] + LAYOUT = "/*" INSIDE_COMMENT* "*/" + INSIDE_COMMENT = ~[\*] + INSIDE_COMMENT = COMMENT_CHAR + LAYOUT = "//" ~[\n\r]* NEWLINE_EOF + NEWLINE_EOF = [\n\r] + NEWLINE_EOF = EOF + EOF = + +lexical restrictions + + // Ensure greedy matching for lexicals + + COMMENT_CHAR -/- [\/] + INT -/- [0-9] + ID -/- [a-zA-Z0-9\_] + + // EOF may not be followed by any char + + EOF -/- ~[] + + // Backslash chars in strings may not be followed by " + + BACKSLASH_CHAR -/- [\"] + +context-free restrictions + + // Ensure greedy matching for comments + + LAYOUT? -/- [\ \t\n\r] + LAYOUT? -/- [\/].[\/] + LAYOUT? -/- [\/].[\*] diff --git a/syntax/Spoofax-Propositional-Language.sdf3 b/syntax/Spoofax-Propositional-Language.sdf3 new file mode 100644 index 0000000..29f5b91 --- /dev/null +++ b/syntax/Spoofax-Propositional-Language.sdf3 @@ -0,0 +1,17 @@ +module Spoofax-Propositional-Language + +imports + + Common + +context-free start-symbols + + Start + +context-free sorts + + Start + +context-free syntax + + Start.Empty = <> diff --git a/trans/analysis.str b/trans/analysis.str new file mode 100644 index 0000000..a1f424c --- /dev/null +++ b/trans/analysis.str @@ -0,0 +1,26 @@ +module analysis + +imports + + nabl2/api + nabl2/runtime + + statics + + pp + +rules // Analysis + + editor-analyze = nabl2-analyze(id) + +rules // Debugging + + // Prints the abstract syntax ATerm of a selection. + debug-show-aterm: (selected, _, _, path, project-path) -> (filename, result) + with filename := path + ; result := selected + + // Prints the analyzed annotated abstract syntax ATerm of a selection. + debug-show-analyzed: (selected, _, _, path, project-path) -> (filename, result) + with filename := path + ; result := selected diff --git a/trans/outline.str b/trans/outline.str new file mode 100644 index 0000000..43828b6 --- /dev/null +++ b/trans/outline.str @@ -0,0 +1,15 @@ +module outline + +imports + + signatures/Spoofax-Propositional-Language-sig + libspoofax/editor/outline + +rules + + editor-outline: + (_, _, ast, path, project-path) -> outline + where + outline := ast + + to-outline-label = fail diff --git a/trans/pp.str b/trans/pp.str new file mode 100644 index 0000000..70e42dd --- /dev/null +++ b/trans/pp.str @@ -0,0 +1,49 @@ +module pp + +imports + + libstratego-gpp + libspoofax/sdf/pp + libspoofax/editor/refactoring/- + pp/Spoofax-Propositional-Language-parenthesize + pp/Spoofax-Propositional-Language-pp + +rules + + editor-format: + (node, _, ast, path, project-path) -> (filename, result) + with + ext := path + ; filename := path + ; result := node + +rules + + pp-Spoofax-Propositional-Language-string = + parenthesize-Spoofax-Propositional-Language + ; prettyprint-Spoofax-Propositional-Language-start-symbols + ; !V([], ) + ; box2text-string(|120) + + pp-partial-Spoofax-Propositional-Language-string = + parenthesize-Spoofax-Propositional-Language + ; prettyprint-Spoofax-Propositional-Language + ; !V([], ) + ; box2text-string(|120) + + pp-partial-Spoofax-Propositional-Language-string(|sort) = + parenthesize-Spoofax-Propositional-Language + ; prettyprint-Spoofax-Propositional-Language(|sort) + ; !V([], ) + ; box2text-string(|120) + + pp-debug : + ast -> result + with + result := ast + <+ ast + ; result := "" + +rules + + construct-textual-change = construct-textual-change(pp-partial-Spoofax-Propositional-Language-string, parenthesize, override-reconstruction, resugar) diff --git a/trans/spoofax_propositional_language.str b/trans/spoofax_propositional_language.str new file mode 100644 index 0000000..08b5603 --- /dev/null +++ b/trans/spoofax_propositional_language.str @@ -0,0 +1,16 @@ +module spoofax_propositional_language + +imports + + completion/completion + pp + outline + analysis + +rules // Debugging + + debug-show-aterm: + (node, _, _, path, project-path) -> (filename, result) + with + filename := path + ; result := node diff --git a/trans/statics.nabl2 b/trans/statics.nabl2 new file mode 100644 index 0000000..08e640a --- /dev/null +++ b/trans/statics.nabl2 @@ -0,0 +1,13 @@ +module statics + +imports + + signatures/- + +rules + + init ^ (s) := new s. + + [[ Empty() ^ (s) ]] := + false | note "Specify name binding and typing rules in statics.nabl2". +