aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--Makefile40
-rw-r--r--cmd/ucdgen/main.go2
-rw-r--r--cmd/vartan-go/generate.go14
-rw-r--r--cmd/vartan/compile.go13
-rw-r--r--cmd/vartan/parse.go11
-rw-r--r--cmd/vartan/root.go21
-rw-r--r--cmd/vartan/show.go9
-rw-r--r--cmd/vartan/test.go7
-rw-r--r--deps.mk21
-rw-r--r--driver/lexer/spec.go2
-rw-r--r--driver/lexer/template.go6
-rw-r--r--driver/parser/spec.go2
-rw-r--r--driver/parser/template.go6
-rw-r--r--driver/parser/token_stream.go4
-rw-r--r--grammar/first.go2
-rw-r--r--grammar/grammar.go10
-rw-r--r--grammar/item.go2
-rw-r--r--grammar/lalr1.go2
-rw-r--r--grammar/lexical/compiler.go8
-rw-r--r--grammar/lexical/dfa/dfa.go2
-rw-r--r--grammar/lexical/dfa/tree.go6
-rw-r--r--grammar/lexical/entry.go2
-rw-r--r--grammar/lexical/parser/fragment.go2
-rw-r--r--grammar/lexical/parser/parser.go4
-rw-r--r--grammar/lexical/parser/tree.go2
-rw-r--r--grammar/lr0.go2
-rw-r--r--grammar/parsing_table.go4
-rw-r--r--grammar/production.go2
-rw-r--r--spec/grammar/parser/lexer.go2
-rw-r--r--spec/grammar/parser/parser.go4
-rw-r--r--tester/tester.go6
32 files changed, 155 insertions, 68 deletions
diff --git a/.gitignore b/.gitignore
index fb07bbc..292c283 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,6 +16,9 @@
/tests/benchmarks/*/*.txt
/tests/fuzz/corpus/
+*.a
+/cmd/*.bin
+
spec/grammar/clexspec.json
diff --git a/Makefile b/Makefile
index 11096d1..b5643ed 100644
--- a/Makefile
+++ b/Makefile
@@ -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)
diff --git a/deps.mk b/deps.mk
index 5cace88..a993f70 100644
--- a/deps.mk
+++ b/deps.mk
@@ -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 {