diff options
32 files changed, 155 insertions, 68 deletions
@@ -16,6 +16,9 @@ /tests/benchmarks/*/*.txt /tests/fuzz/corpus/ +*.a +/cmd/*.bin + spec/grammar/clexspec.json @@ -47,6 +47,33 @@ functional-tests/lib.a = $(functional-tests/lib.go:.go=.a) fuzz-targets/lib.a = $(fuzz-targets/lib.go:.go=.a) benchmarks/lib.a = $(benchmarks/lib.go:.go=.a) +existing = \ + utf8 \ + ucd \ + error \ + compressor \ + spec/grammar \ + spec/grammar/parser \ + spec/test \ + grammar/symbol \ + grammar/lexical/parser \ + grammar/lexical/dfa \ + grammar/lexical \ + grammar \ + driver/lexer \ + driver/parser \ + tester \ + +xmains = \ + cmd/ucdgen \ + cmd/vartan \ + cmd/vartan-go \ + +existing.a = $(existing:=.a) +xmains.a = $(xmains:=.a) +xmains.bin = $(xmains:=.bin) + + sources = \ src/$(NAME).go \ src/version.go \ @@ -59,6 +86,9 @@ derived-assets = \ $(mains.a) \ $(mains.bin) \ $(NAME).bin \ + $(existing.a) \ + $(xmains.a) \ + $(xmains.bin) \ side-assets = \ tests/fuzz/corpus/ \ @@ -71,10 +101,20 @@ side-assets = \ all: $(derived-assets) +$(existing.a) $(xmains.a): Makefile deps.mk $(libs.a): Makefile deps.mk $(libs.a): src/$(NAME).go src/version.go +$(existing.a): + go tool compile -I . -o $@ -p $* $*/*.go + +$(xmains.a): + go tool compile -I . -o $@ -p main $*/*.go + +$(xmains.bin): + go tool link -L . -o $@ --extldflags '$(LDLIBS)' $*.a + $(fuzz-targets/lib.a): go tool compile $(GOCFLAGS) -o $@ -p $(NAME) -d=libfuzzer \ $*.go src/$(NAME).go src/version.go diff --git a/cmd/ucdgen/main.go b/cmd/ucdgen/main.go index 6d7d33e..aeb88e2 100644 --- a/cmd/ucdgen/main.go +++ b/cmd/ucdgen/main.go @@ -7,7 +7,7 @@ import ( "strings" "text/template" - "github.com/nihei9/vartan/ucd" + "ucd" ) func main() { diff --git a/cmd/vartan-go/generate.go b/cmd/vartan-go/generate.go index 7d95ed7..7d84da9 100644 --- a/cmd/vartan-go/generate.go +++ b/cmd/vartan-go/generate.go @@ -2,24 +2,25 @@ package main import ( "encoding/json" - "fmt" + // "fmt" "io" "os" - "github.com/nihei9/vartan/driver/lexer" - "github.com/nihei9/vartan/driver/parser" - spec "github.com/nihei9/vartan/spec/grammar" - "github.com/spf13/cobra" + // "driver/lexer" + // "driver/parser" + spec "spec/grammar" ) func Execute() error { - return generateCmd.Execute() + // return generateCmd.Execute() + return nil } var generateFlags = struct { pkgName *string }{} +/* var generateCmd = &cobra.Command{ Use: "vartan-go", Short: "Generate a parser for Go", @@ -103,6 +104,7 @@ func runGenerate(cmd *cobra.Command, args []string) error { return nil } +*/ func readCompiledGrammar(path string) (*spec.CompiledGrammar, error) { f, err := os.Open(path) diff --git a/cmd/vartan/compile.go b/cmd/vartan/compile.go index e645366..0755456 100644 --- a/cmd/vartan/compile.go +++ b/cmd/vartan/compile.go @@ -7,17 +7,17 @@ import ( "os" "path/filepath" - verr "github.com/nihei9/vartan/error" - "github.com/nihei9/vartan/grammar" - spec "github.com/nihei9/vartan/spec/grammar" - "github.com/nihei9/vartan/spec/grammar/parser" - "github.com/spf13/cobra" + verr "error" + "grammar" + spec "spec/grammar" + "spec/grammar/parser" ) var compileFlags = struct { output *string }{} +/* func init() { cmd := &cobra.Command{ Use: "compile", @@ -29,8 +29,9 @@ func init() { compileFlags.output = cmd.Flags().StringP("output", "o", "", "output file path (default stdout)") rootCmd.AddCommand(cmd) } +*/ -func runCompile(cmd *cobra.Command, args []string) (retErr error) { +func runCompile(args []string) (retErr error) { var tmpDirPath string defer func() { if tmpDirPath == "" { diff --git a/cmd/vartan/parse.go b/cmd/vartan/parse.go index 8b3e34e..50d867e 100644 --- a/cmd/vartan/parse.go +++ b/cmd/vartan/parse.go @@ -7,10 +7,9 @@ import ( "os" "strings" - driver "github.com/nihei9/vartan/driver/parser" - spec "github.com/nihei9/vartan/spec/grammar" - "github.com/nihei9/vartan/tester" - "github.com/spf13/cobra" + driver "driver/parser" + spec "spec/grammar" + "tester" ) var parseFlags = struct { @@ -27,6 +26,7 @@ const ( outputFormatJSON = "json" ) +/* func init() { cmd := &cobra.Command{ Use: "parse <grammar file path>", @@ -42,8 +42,9 @@ func init() { parseFlags.format = cmd.Flags().StringP("format", "f", "text", "output format: one of text|tree|json") rootCmd.AddCommand(cmd) } +*/ -func runParse(cmd *cobra.Command, args []string) error { +func runParse(args []string) error { if *parseFlags.onlyParse && *parseFlags.cst { return fmt.Errorf("You cannot enable --only-parse and --cst at the same time") } diff --git a/cmd/vartan/root.go b/cmd/vartan/root.go index 8d2219d..32eb3c3 100644 --- a/cmd/vartan/root.go +++ b/cmd/vartan/root.go @@ -1,9 +1,10 @@ package main import ( - "github.com/spf13/cobra" + "os" ) +/* var rootCmd = &cobra.Command{ Use: "vartan", Short: "Generate a portable LALR(1) parsing table from grammar you defined", @@ -13,7 +14,23 @@ var rootCmd = &cobra.Command{ SilenceErrors: true, SilenceUsage: true, } +*/ func Execute() error { - return rootCmd.Execute() + // return rootCmd.Execute() + + cmd := os.Args[1] + args := os.Args[2:] + + if cmd == "compile" { + return runCompile(args) + } else if cmd == "parse" { + return runParse(args) + } else if cmd == "show" { + return runShow(args) + } else if cmd == "test" { + return runTest(args) + } + + return nil // FIXME } diff --git a/cmd/vartan/show.go b/cmd/vartan/show.go index c142623..c56be1f 100644 --- a/cmd/vartan/show.go +++ b/cmd/vartan/show.go @@ -8,11 +8,11 @@ import ( "strings" "text/template" - "github.com/nihei9/vartan/grammar" - spec "github.com/nihei9/vartan/spec/grammar" - "github.com/spf13/cobra" + "grammar" + spec "spec/grammar" ) +/* func init() { cmd := &cobra.Command{ Use: "show", @@ -23,8 +23,9 @@ func init() { } rootCmd.AddCommand(cmd) } +*/ -func runShow(cmd *cobra.Command, args []string) error { +func runShow(args []string) error { report, err := readReport(args[0]) if err != nil { return err diff --git a/cmd/vartan/test.go b/cmd/vartan/test.go index 9bd88ff..73949e0 100644 --- a/cmd/vartan/test.go +++ b/cmd/vartan/test.go @@ -5,10 +5,10 @@ import ( "fmt" "os" - "github.com/nihei9/vartan/tester" - "github.com/spf13/cobra" + "tester" ) +/* func init() { cmd := &cobra.Command{ Use: "test <grammar file path> <test file path>|<test directory path>", @@ -19,8 +19,9 @@ func init() { } rootCmd.AddCommand(cmd) } +*/ -func runTest(cmd *cobra.Command, args []string) error { +func runTest(args []string) error { gram, _, err := readGrammar(args[0]) if err != nil { return fmt.Errorf("Cannot read a grammar: %w", err) @@ -73,3 +73,24 @@ tests/fuzz/api-check/main.a: tests/fuzz/api-check/$(NAME).a tests/fuzz/generated-lexer-check/main.a: tests/fuzz/generated-lexer-check/$(NAME).a tests/fuzz/generated-parser-check/main.a: tests/fuzz/generated-parser-check/$(NAME).a tests/main.a: tests/$(NAME).a + + +spec/grammar/parser.a: error.a spec/grammar.a +grammar.a: grammar/symbol.a spec/grammar/parser.a error.a grammar/lexical.a +tester.a: spec/test.a +grammar/lexical/dfa.a: grammar/lexical/parser.a utf8.a +grammar/lexical/parser.a: ucd.a spec/grammar.a +grammar/lexical.a: compressor.a grammar/lexical/dfa.a grammar/lexical/parser.a +driver/lexer.a: grammar/lexical.a +driver/parser.a: spec/grammar.a driver/lexer.a +tester.a: driver/parser.a spec/grammar.a + +cmd/ucdgen.a: ucd.a +cmd/vartan.a: error.a grammar.a spec/grammar.a spec/grammar/parser.a driver/parser.a tester.a +cmd/vartan-go.a: spec/grammar.a + + + +cmd/ucdgen.bin: cmd/ucdgen.a +cmd/vartan.bin: cmd/vartan.a +cmd/vartan-go.bin: cmd/vartan-go.a diff --git a/driver/lexer/spec.go b/driver/lexer/spec.go index 23debbf..4b1a218 100644 --- a/driver/lexer/spec.go +++ b/driver/lexer/spec.go @@ -1,6 +1,6 @@ package lexer -import spec "github.com/nihei9/vartan/spec/grammar" +import spec "spec/grammar" type lexSpec struct { spec *spec.LexicalSpec diff --git a/driver/lexer/template.go b/driver/lexer/template.go index 52f9ebd..c5d0778 100644 --- a/driver/lexer/template.go +++ b/driver/lexer/template.go @@ -11,11 +11,11 @@ import ( "strings" "text/template" - "github.com/nihei9/vartan/grammar/lexical" - spec "github.com/nihei9/vartan/spec/grammar" + "grammar/lexical" + spec "spec/grammar" ) -//go:embed lexer.go +// go:embed lexer.go var lexerCoreSrc string func GenLexer(lexSpec *spec.LexicalSpec, pkgName string) ([]byte, error) { diff --git a/driver/parser/spec.go b/driver/parser/spec.go index 1d57bae..b288f5f 100644 --- a/driver/parser/spec.go +++ b/driver/parser/spec.go @@ -1,6 +1,6 @@ package parser -import spec "github.com/nihei9/vartan/spec/grammar" +import spec "spec/grammar" type grammarImpl struct { g *spec.CompiledGrammar diff --git a/driver/parser/template.go b/driver/parser/template.go index e9620dc..3e25193 100644 --- a/driver/parser/template.go +++ b/driver/parser/template.go @@ -13,13 +13,13 @@ import ( "strings" "text/template" - spec "github.com/nihei9/vartan/spec/grammar" + spec "spec/grammar" ) -//go:embed parser.go +// go:embed parser.go var parserCoreSrc string -//go:embed semantic_action.go +// go:embed semantic_action.go var semActSrc string func GenParser(cgram *spec.CompiledGrammar, pkgName string) ([]byte, error) { diff --git a/driver/parser/token_stream.go b/driver/parser/token_stream.go index 929b733..b15e8bf 100644 --- a/driver/parser/token_stream.go +++ b/driver/parser/token_stream.go @@ -3,8 +3,8 @@ package parser import ( "io" - "github.com/nihei9/vartan/driver/lexer" - spec "github.com/nihei9/vartan/spec/grammar" + "driver/lexer" + spec "spec/grammar" ) type vToken struct { diff --git a/grammar/first.go b/grammar/first.go index 923f8ed..4f0bdcf 100644 --- a/grammar/first.go +++ b/grammar/first.go @@ -3,7 +3,7 @@ package grammar import ( "fmt" - "github.com/nihei9/vartan/grammar/symbol" + "grammar/symbol" ) type firstEntry struct { diff --git a/grammar/grammar.go b/grammar/grammar.go index 1e05289..9fb2968 100644 --- a/grammar/grammar.go +++ b/grammar/grammar.go @@ -5,11 +5,11 @@ import ( "io" "strings" - verr "github.com/nihei9/vartan/error" - "github.com/nihei9/vartan/grammar/lexical" - "github.com/nihei9/vartan/grammar/symbol" - spec "github.com/nihei9/vartan/spec/grammar" - "github.com/nihei9/vartan/spec/grammar/parser" + verr "error" + "grammar/lexical" + "grammar/symbol" + spec "spec/grammar" + "spec/grammar/parser" ) type astActionEntry struct { diff --git a/grammar/item.go b/grammar/item.go index 84c4911..aa1ecaf 100644 --- a/grammar/item.go +++ b/grammar/item.go @@ -7,7 +7,7 @@ import ( "sort" "strconv" - "github.com/nihei9/vartan/grammar/symbol" + "grammar/symbol" ) type lrItemID [32]byte diff --git a/grammar/lalr1.go b/grammar/lalr1.go index 1667d84..4c7265d 100644 --- a/grammar/lalr1.go +++ b/grammar/lalr1.go @@ -3,7 +3,7 @@ package grammar import ( "fmt" - "github.com/nihei9/vartan/grammar/symbol" + "grammar/symbol" ) type stateAndLRItem struct { diff --git a/grammar/lexical/compiler.go b/grammar/lexical/compiler.go index 61aa3f2..06e4068 100644 --- a/grammar/lexical/compiler.go +++ b/grammar/lexical/compiler.go @@ -4,10 +4,10 @@ import ( "bytes" "fmt" - "github.com/nihei9/vartan/compressor" - "github.com/nihei9/vartan/grammar/lexical/dfa" - psr "github.com/nihei9/vartan/grammar/lexical/parser" - spec "github.com/nihei9/vartan/spec/grammar" + "compressor" + "grammar/lexical/dfa" + psr "grammar/lexical/parser" + spec "spec/grammar" ) type CompileError struct { diff --git a/grammar/lexical/dfa/dfa.go b/grammar/lexical/dfa/dfa.go index 850264a..884b168 100644 --- a/grammar/lexical/dfa/dfa.go +++ b/grammar/lexical/dfa/dfa.go @@ -3,7 +3,7 @@ package dfa import ( "sort" - spec "github.com/nihei9/vartan/spec/grammar" + spec "spec/grammar" ) type symbolTable struct { diff --git a/grammar/lexical/dfa/tree.go b/grammar/lexical/dfa/tree.go index cd6081e..85061f9 100644 --- a/grammar/lexical/dfa/tree.go +++ b/grammar/lexical/dfa/tree.go @@ -5,9 +5,9 @@ import ( "io" "sort" - "github.com/nihei9/vartan/grammar/lexical/parser" - spec "github.com/nihei9/vartan/spec/grammar" - "github.com/nihei9/vartan/utf8" + "grammar/lexical/parser" + spec "spec/grammar" + "utf8" ) type byteTree interface { diff --git a/grammar/lexical/entry.go b/grammar/lexical/entry.go index c9f8691..6d2fbe3 100644 --- a/grammar/lexical/entry.go +++ b/grammar/lexical/entry.go @@ -5,7 +5,7 @@ import ( "sort" "strings" - spec "github.com/nihei9/vartan/spec/grammar" + spec "spec/grammar" ) type LexEntry struct { diff --git a/grammar/lexical/parser/fragment.go b/grammar/lexical/parser/fragment.go index fc6f16b..e51759e 100644 --- a/grammar/lexical/parser/fragment.go +++ b/grammar/lexical/parser/fragment.go @@ -3,7 +3,7 @@ package parser import ( "fmt" - spec "github.com/nihei9/vartan/spec/grammar" + spec "spec/grammar" ) type incompleteFragment struct { diff --git a/grammar/lexical/parser/parser.go b/grammar/lexical/parser/parser.go index 89362b8..d1a08a2 100644 --- a/grammar/lexical/parser/parser.go +++ b/grammar/lexical/parser/parser.go @@ -6,8 +6,8 @@ import ( "io" "strconv" - spec "github.com/nihei9/vartan/spec/grammar" - "github.com/nihei9/vartan/ucd" + spec "spec/grammar" + "ucd" ) type PatternEntry struct { diff --git a/grammar/lexical/parser/tree.go b/grammar/lexical/parser/tree.go index 3d9d197..0d64e1d 100644 --- a/grammar/lexical/parser/tree.go +++ b/grammar/lexical/parser/tree.go @@ -5,7 +5,7 @@ import ( "io" "sort" - spec "github.com/nihei9/vartan/spec/grammar" + spec "spec/grammar" ) type CPRange struct { diff --git a/grammar/lr0.go b/grammar/lr0.go index 77ad2e0..7e5929a 100644 --- a/grammar/lr0.go +++ b/grammar/lr0.go @@ -4,7 +4,7 @@ import ( "fmt" "sort" - "github.com/nihei9/vartan/grammar/symbol" + "grammar/symbol" ) type lr0Automaton struct { diff --git a/grammar/parsing_table.go b/grammar/parsing_table.go index 53f692e..fc520cc 100644 --- a/grammar/parsing_table.go +++ b/grammar/parsing_table.go @@ -4,8 +4,8 @@ import ( "fmt" "sort" - "github.com/nihei9/vartan/grammar/symbol" - spec "github.com/nihei9/vartan/spec/grammar" + "grammar/symbol" + spec "spec/grammar" ) type ActionType string diff --git a/grammar/production.go b/grammar/production.go index 1978039..1742dc6 100644 --- a/grammar/production.go +++ b/grammar/production.go @@ -5,7 +5,7 @@ import ( "encoding/hex" "fmt" - "github.com/nihei9/vartan/grammar/symbol" + "grammar/symbol" ) type productionID [32]byte diff --git a/spec/grammar/parser/lexer.go b/spec/grammar/parser/lexer.go index 1096ae9..31dcab2 100644 --- a/spec/grammar/parser/lexer.go +++ b/spec/grammar/parser/lexer.go @@ -10,7 +10,7 @@ import ( "regexp" "strings" - verr "github.com/nihei9/vartan/error" + verr "error" ) type tokenKind string diff --git a/spec/grammar/parser/parser.go b/spec/grammar/parser/parser.go index c0179a6..0ef29dd 100644 --- a/spec/grammar/parser/parser.go +++ b/spec/grammar/parser/parser.go @@ -4,8 +4,8 @@ import ( "fmt" "io" - verr "github.com/nihei9/vartan/error" - spec "github.com/nihei9/vartan/spec/grammar" + verr "error" + spec "spec/grammar" ) type RootNode struct { diff --git a/tester/tester.go b/tester/tester.go index 0fb27b9..fa9b806 100644 --- a/tester/tester.go +++ b/tester/tester.go @@ -8,9 +8,9 @@ import ( "runtime/debug" "strings" - driver "github.com/nihei9/vartan/driver/parser" - gspec "github.com/nihei9/vartan/spec/grammar" - tspec "github.com/nihei9/vartan/spec/test" + driver "driver/parser" + gspec "spec/grammar" + tspec "spec/test" ) type TestResult struct { |