diff --git a/EnvLangFile.g4 b/EnvLangFile.g4 index 7a22475..10025b2 100644 --- a/EnvLangFile.g4 +++ b/EnvLangFile.g4 @@ -1,17 +1,43 @@ grammar EnvLangFile; -envFile: NL* (entry NL*)+ ; +envFile + : CRLF* (entry CRLF*)+ + ; -entry : identifier (ASSIGN value | ASSIGN)? (NL* | EOF) ; +entry + : identifier (ASSIGN value | ASSIGN)? (SPACE* CRLF* | EOF) + ; -identifier : TEXT; +identifier + : TEXT + ; -value : op=(DQSTRING | SQSTRING | TEXT) ; +value + : str=(DQSTRING | SQSTRING | TEXT) + ; -ASSIGN : '='; -NL : '\r'? '\n'; -TEXT : ~[=,\r\n"' ]~[=,\r\n"']* ; -DQSTRING : '"' ('""'|~'"')* '"' ; -SQSTRING : '\'' ('\'\''|~'\'')* '\'' ; +ASSIGN + : '=' + ; -SPACE : ' ' -> skip; +CRLF + : '\r'? '\n' + | '\r' + ; + +TEXT + : ~[=,\r\n"' ]~[=,\r\n"']* + ; + +DQSTRING + : '"' ('""' | ~'"')* '"' + ; + +SQSTRING + : '\'' ('\'\'' | ~'\'')* '\'' + ; + +SPACE + : + ' ' -> skip + ; diff --git a/EnvLangValue.g4 b/EnvLangValue.g4 index e60a35a..bbe2b30 100644 --- a/EnvLangValue.g4 +++ b/EnvLangValue.g4 @@ -1,36 +1,58 @@ grammar EnvLangValue; -dqstring : content* (CRLF* | EOF) ; +dqstring + : content* (SPACE* | CRLF* | EOF) + ; -strictVar : '${' TEXT_NO_SPACE+ '}'; -simpleVar : '$' TEXT_NO_SPACE+ ; +variable + : var=(STRICT_VAR | SIMPLE_VAR) + ; -variable : strictVar | simpleVar ; +content + : variable + | STR + | SPACE + | CRLF + ; -TEXT_NO_SPACE : [a-zA-Z0-9_] ; -TEXT_ANY : [a-zA-Z0-9_\n] ; +STRICT_VAR + : '${' SPACE* VAR_ID SPACE* '}' + ; -text : TEXT_NO_SPACE TEXT_ANY* ; +SIMPLE_VAR + : '$' VAR_ID + ; -space : ' '; +STR + : FIRST_CHAR REST_OF_STRING* + ; -dQEscape : '""' ; +SPACE + : ' ' + | '\t' + ; -special - : '{' - | '}' - | '$' - ; +CRLF + : '\r'? '\n' + | '\r' + ; -content - : dQEscape - | variable - | space - | special - | text - ; +fragment FIRST_CHAR + : ~[,\\."'\r\n ] + ; + +fragment REST_OF_STRING + : ~[\\'"$\r\n ] + ; + +fragment VAR_ID + : [0-9]+ // Only numbers + | [a-zA-Z_][a-zA-Z_0-9]* // Start with letters, then letters, numbers and underscores + ; + +// Catch all rule. +// This is used to avoid the error message "no viable alternative at input ''". Just for debugging. +ANY + : . + ; -CRLF - : '\r'? '\n' - | '\r' - ; diff --git a/Makefile b/Makefile index a9c3d6a..e1f84b6 100644 --- a/Makefile +++ b/Makefile @@ -2,14 +2,19 @@ all: clean gen test @echo "All done!" test: - @gotestsum --format testname ./... + @gotestsum --format testname -- -failfast ./... gen: - @antlr -Dlanguage=Go -o gen/fileparser -package fileparser EnvLangFile.g4 - @antlr -Dlanguage=Go -o gen/valueparser -package valueparser EnvLangValue.g4 + @antlr4 -Dlanguage=Go -o gen/fileparser -package fileparser EnvLangFile.g4 + @antlr4 -Dlanguage=Go -o gen/valueparser -package valueparser EnvLangValue.g4 clean: @rm -rf gen setup: go install gotest.tools/gotestsum@v1.11.0 + +grun: + antlr4 EnvLangValue.g4 + javac -cp "/usr/share/java/antlr-4.13.1-complete.jar:$CLASSPATH" EnvLangValue*.java + java -Xmx500M -cp "/usr/share/java/antlr-4.13.1-complete.jar:$CLASSPATH" org.antlr.v4.gui.TestRig EnvLangValue dqstrings -tokens diff --git a/dao/default_dao.go b/dao/default_dao.go index 63c81c1..7ffafce 100644 --- a/dao/default_dao.go +++ b/dao/default_dao.go @@ -10,12 +10,37 @@ var _ EnvLangDao = &DefaultDao{} type DefaultDao struct { sync.RWMutex - m map[string]*string + env map[string]*string + m map[string]*string } func NewDefaultDao() EnvLangDao { return &DefaultDao{ - m: make(map[string]*string), + m: make(map[string]*string), + env: make(map[string]*string), + } +} + +func NewDefaultDaoFromEnv(env []string) EnvLangDao { + d := &DefaultDao{ + m: make(map[string]*string), + env: make(map[string]*string), + } + for _, e := range env { + splitEnv := strings.SplitN(e, "=", 2) + v := splitEnv[1] + d.env[splitEnv[0]] = &v + } + return d +} + +func NewDefaultDaoFromMap(env map[string]*string) EnvLangDao { + if env == nil { + env = make(map[string]*string) + } + return &DefaultDao{ + m: make(map[string]*string), + env: env, } } @@ -48,6 +73,9 @@ func (d *DefaultDao) Get(k string) (*string, bool) { defer d.RUnlock() v, ok := d.m[k] + if !ok { + v, ok = d.env[k] + } return v, ok } diff --git a/facade_test.go b/facade_test.go index 4f0be79..2ed49a3 100644 --- a/facade_test.go +++ b/facade_test.go @@ -9,6 +9,179 @@ import ( "github.com/ulyssessouza/envlang/dao" ) +func init() { + log.SetLevel(log.DebugLevel) +} + +func TestGetValue(t *testing.T) { + tests := []struct { + name string + input string + expected map[string]*string + envState map[string]*string + }{ + { + "Simple", + `A=aaa`, + map[string]*string{"A": strPtr("aaa")}, + nil, + }, + { + "SimpleWithSpaceBeforeAssign", + `A =aaa`, + map[string]*string{"A": strPtr("aaa")}, + nil, + }, + { + "SimpleWithSpaceAfterAssign", + `A= aaa`, + map[string]*string{"A": strPtr("aaa")}, + nil, + }, + { + "SimpleWithDoubleQuotes", + `A="aaa"`, + map[string]*string{"A": strPtr("aaa")}, + nil, + }, + { + "SimpleWithSingleQuotes", + `A='aaa'`, + map[string]*string{"A": strPtr("aaa")}, + nil, + }, + { + "SimpleWithDoubleQuotesAndSpaces", + `A=aaa bbb ccc`, + map[string]*string{"A": strPtr("aaa bbb ccc")}, + nil, + }, + { + "SimpleWithSingleQuotesAndSpaces", + `A='aaa bbb ccc'`, + map[string]*string{"A": strPtr("aaa bbb ccc")}, + nil, + }, + { + "SimpleWithDoubleQuotesAndSpaces", + `A="aaa bbb ccc"`, + map[string]*string{"A": strPtr("aaa bbb ccc")}, + nil, + }, + { + "MultiLine", + ` +A="my +multi +line +entry" +`, + map[string]*string{"A": strPtr("my\nmulti\nline\nentry")}, + nil, + }, + { + "VariableWithEquals", + `A=`, + map[string]*string{"A": strPtr("")}, + nil, + }, + { + "VariableOnly", + `A`, + map[string]*string{"A": nil}, + nil, + }, + { + "SimpleWithSpaces", + ` +A = aaa +`, + map[string]*string{"A": strPtr("aaa")}, + nil, + }, + { + "SimpleWithSimpleVariable", + ` +A=$VAR_FROM_DAO +`, + map[string]*string{ + "A": strPtr("aaa"), + }, + map[string]*string{ + "VAR_FROM_DAO": strPtr("aaa"), + }, + }, + { + "SimpleWithSimpleVariableWithSpaces", + ` +A = $VAR_FROM_DAO + `, + map[string]*string{ + "A": strPtr("aaa"), + }, + map[string]*string{ + "VAR_FROM_DAO": strPtr("aaa"), + }, + }, + { + "SimpleWithStrictVariable", + ` +A=${VAR_FROM_DAO} +`, + map[string]*string{ + "A": strPtr("aaa"), + }, + map[string]*string{ + "VAR_FROM_DAO": strPtr("aaa"), + }, + }, + { + "SimpleWithStrictVariableWithSpaces", + ` +A = ${VAR_FROM_DAO} +`, + map[string]*string{ + "A": strPtr("aaa"), + }, + map[string]*string{ + "VAR_FROM_DAO": strPtr("aaa"), + }, + }, + { + "SimpleWithStrictVariableWithSpacesAndInternalSpaces", + ` +A = ${ VAR_FROM_DAO } +`, + map[string]*string{ + "A": strPtr("aaa"), + }, + map[string]*string{ + "VAR_FROM_DAO": strPtr("aaa"), + }, + }, + + { + "DoubleQuotedWithMixedValue", + ` +A = "aaa ${B} ccc " +`, + map[string]*string{ + "A": strPtr("aaa bbb ccc "), + }, + map[string]*string{ + "B": strPtr("bbb "), + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + d := dao.NewDefaultDaoFromMap(tt.envState) + assert.DeepEqual(t, tt.expected, GetVariables(d, tt.input)) + }) + + } +} + func TestFull(t *testing.T) { log.SetLevel(log.DebugLevel) is := ` @@ -62,7 +235,7 @@ SPECIAL6 = "{{{ $$$ }}}" "B": strPtr("bbb"), "C": strPtr("ccc"), "D": strPtr("ddd"), - "E": strPtr("'eee'"), + "E": strPtr("eee"), "F": strPtr(""), "G": nil, "H": strPtr("my_value"), diff --git a/gen/fileparser/EnvLangFile.interp b/gen/fileparser/EnvLangFile.interp index 596f177..3809bae 100644 --- a/gen/fileparser/EnvLangFile.interp +++ b/gen/fileparser/EnvLangFile.interp @@ -10,7 +10,7 @@ null token symbolic names: null ASSIGN -NL +CRLF TEXT DQSTRING SQSTRING @@ -24,4 +24,4 @@ value atn: -[4, 1, 6, 45, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 1, 0, 5, 0, 10, 8, 0, 10, 0, 12, 0, 13, 9, 0, 1, 0, 1, 0, 5, 0, 17, 8, 0, 10, 0, 12, 0, 20, 9, 0, 4, 0, 22, 8, 0, 11, 0, 12, 0, 23, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 30, 8, 1, 1, 1, 5, 1, 33, 8, 1, 10, 1, 12, 1, 36, 9, 1, 1, 1, 3, 1, 39, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 0, 0, 4, 0, 2, 4, 6, 0, 1, 1, 0, 3, 5, 47, 0, 11, 1, 0, 0, 0, 2, 25, 1, 0, 0, 0, 4, 40, 1, 0, 0, 0, 6, 42, 1, 0, 0, 0, 8, 10, 5, 2, 0, 0, 9, 8, 1, 0, 0, 0, 10, 13, 1, 0, 0, 0, 11, 9, 1, 0, 0, 0, 11, 12, 1, 0, 0, 0, 12, 21, 1, 0, 0, 0, 13, 11, 1, 0, 0, 0, 14, 18, 3, 2, 1, 0, 15, 17, 5, 2, 0, 0, 16, 15, 1, 0, 0, 0, 17, 20, 1, 0, 0, 0, 18, 16, 1, 0, 0, 0, 18, 19, 1, 0, 0, 0, 19, 22, 1, 0, 0, 0, 20, 18, 1, 0, 0, 0, 21, 14, 1, 0, 0, 0, 22, 23, 1, 0, 0, 0, 23, 21, 1, 0, 0, 0, 23, 24, 1, 0, 0, 0, 24, 1, 1, 0, 0, 0, 25, 29, 3, 4, 2, 0, 26, 27, 5, 1, 0, 0, 27, 30, 3, 6, 3, 0, 28, 30, 5, 1, 0, 0, 29, 26, 1, 0, 0, 0, 29, 28, 1, 0, 0, 0, 29, 30, 1, 0, 0, 0, 30, 38, 1, 0, 0, 0, 31, 33, 5, 2, 0, 0, 32, 31, 1, 0, 0, 0, 33, 36, 1, 0, 0, 0, 34, 32, 1, 0, 0, 0, 34, 35, 1, 0, 0, 0, 35, 39, 1, 0, 0, 0, 36, 34, 1, 0, 0, 0, 37, 39, 5, 0, 0, 1, 38, 34, 1, 0, 0, 0, 38, 37, 1, 0, 0, 0, 39, 3, 1, 0, 0, 0, 40, 41, 5, 3, 0, 0, 41, 5, 1, 0, 0, 0, 42, 43, 7, 0, 0, 0, 43, 7, 1, 0, 0, 0, 6, 11, 18, 23, 29, 34, 38] \ No newline at end of file +[4, 1, 6, 51, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 1, 0, 5, 0, 10, 8, 0, 10, 0, 12, 0, 13, 9, 0, 1, 0, 1, 0, 5, 0, 17, 8, 0, 10, 0, 12, 0, 20, 9, 0, 4, 0, 22, 8, 0, 11, 0, 12, 0, 23, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 30, 8, 1, 1, 1, 5, 1, 33, 8, 1, 10, 1, 12, 1, 36, 9, 1, 1, 1, 5, 1, 39, 8, 1, 10, 1, 12, 1, 42, 9, 1, 1, 1, 3, 1, 45, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 0, 0, 4, 0, 2, 4, 6, 0, 1, 1, 0, 3, 5, 54, 0, 11, 1, 0, 0, 0, 2, 25, 1, 0, 0, 0, 4, 46, 1, 0, 0, 0, 6, 48, 1, 0, 0, 0, 8, 10, 5, 2, 0, 0, 9, 8, 1, 0, 0, 0, 10, 13, 1, 0, 0, 0, 11, 9, 1, 0, 0, 0, 11, 12, 1, 0, 0, 0, 12, 21, 1, 0, 0, 0, 13, 11, 1, 0, 0, 0, 14, 18, 3, 2, 1, 0, 15, 17, 5, 2, 0, 0, 16, 15, 1, 0, 0, 0, 17, 20, 1, 0, 0, 0, 18, 16, 1, 0, 0, 0, 18, 19, 1, 0, 0, 0, 19, 22, 1, 0, 0, 0, 20, 18, 1, 0, 0, 0, 21, 14, 1, 0, 0, 0, 22, 23, 1, 0, 0, 0, 23, 21, 1, 0, 0, 0, 23, 24, 1, 0, 0, 0, 24, 1, 1, 0, 0, 0, 25, 29, 3, 4, 2, 0, 26, 27, 5, 1, 0, 0, 27, 30, 3, 6, 3, 0, 28, 30, 5, 1, 0, 0, 29, 26, 1, 0, 0, 0, 29, 28, 1, 0, 0, 0, 29, 30, 1, 0, 0, 0, 30, 44, 1, 0, 0, 0, 31, 33, 5, 6, 0, 0, 32, 31, 1, 0, 0, 0, 33, 36, 1, 0, 0, 0, 34, 32, 1, 0, 0, 0, 34, 35, 1, 0, 0, 0, 35, 40, 1, 0, 0, 0, 36, 34, 1, 0, 0, 0, 37, 39, 5, 2, 0, 0, 38, 37, 1, 0, 0, 0, 39, 42, 1, 0, 0, 0, 40, 38, 1, 0, 0, 0, 40, 41, 1, 0, 0, 0, 41, 45, 1, 0, 0, 0, 42, 40, 1, 0, 0, 0, 43, 45, 5, 0, 0, 1, 44, 34, 1, 0, 0, 0, 44, 43, 1, 0, 0, 0, 45, 3, 1, 0, 0, 0, 46, 47, 5, 3, 0, 0, 47, 5, 1, 0, 0, 0, 48, 49, 7, 0, 0, 0, 49, 7, 1, 0, 0, 0, 7, 11, 18, 23, 29, 34, 40, 44] \ No newline at end of file diff --git a/gen/fileparser/EnvLangFile.tokens b/gen/fileparser/EnvLangFile.tokens index 2e1e818..b2dd4b9 100644 --- a/gen/fileparser/EnvLangFile.tokens +++ b/gen/fileparser/EnvLangFile.tokens @@ -1,5 +1,5 @@ ASSIGN=1 -NL=2 +CRLF=2 TEXT=3 DQSTRING=4 SQSTRING=5 diff --git a/gen/fileparser/EnvLangFileLexer.interp b/gen/fileparser/EnvLangFileLexer.interp index 7b58f26..9bded90 100644 --- a/gen/fileparser/EnvLangFileLexer.interp +++ b/gen/fileparser/EnvLangFileLexer.interp @@ -10,7 +10,7 @@ null token symbolic names: null ASSIGN -NL +CRLF TEXT DQSTRING SQSTRING @@ -18,7 +18,7 @@ SPACE rule names: ASSIGN -NL +CRLF TEXT DQSTRING SQSTRING @@ -32,4 +32,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 6, 53, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 1, 0, 1, 0, 1, 1, 3, 1, 17, 8, 1, 1, 1, 1, 1, 1, 2, 1, 2, 5, 2, 23, 8, 2, 10, 2, 12, 2, 26, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 32, 8, 3, 10, 3, 12, 3, 35, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 43, 8, 4, 10, 4, 12, 4, 46, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 0, 0, 6, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 1, 0, 4, 7, 0, 10, 10, 13, 13, 32, 32, 34, 34, 39, 39, 44, 44, 61, 61, 6, 0, 10, 10, 13, 13, 34, 34, 39, 39, 44, 44, 61, 61, 1, 0, 34, 34, 1, 0, 39, 39, 58, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 1, 13, 1, 0, 0, 0, 3, 16, 1, 0, 0, 0, 5, 20, 1, 0, 0, 0, 7, 27, 1, 0, 0, 0, 9, 38, 1, 0, 0, 0, 11, 49, 1, 0, 0, 0, 13, 14, 5, 61, 0, 0, 14, 2, 1, 0, 0, 0, 15, 17, 5, 13, 0, 0, 16, 15, 1, 0, 0, 0, 16, 17, 1, 0, 0, 0, 17, 18, 1, 0, 0, 0, 18, 19, 5, 10, 0, 0, 19, 4, 1, 0, 0, 0, 20, 24, 8, 0, 0, 0, 21, 23, 8, 1, 0, 0, 22, 21, 1, 0, 0, 0, 23, 26, 1, 0, 0, 0, 24, 22, 1, 0, 0, 0, 24, 25, 1, 0, 0, 0, 25, 6, 1, 0, 0, 0, 26, 24, 1, 0, 0, 0, 27, 33, 5, 34, 0, 0, 28, 29, 5, 34, 0, 0, 29, 32, 5, 34, 0, 0, 30, 32, 8, 2, 0, 0, 31, 28, 1, 0, 0, 0, 31, 30, 1, 0, 0, 0, 32, 35, 1, 0, 0, 0, 33, 31, 1, 0, 0, 0, 33, 34, 1, 0, 0, 0, 34, 36, 1, 0, 0, 0, 35, 33, 1, 0, 0, 0, 36, 37, 5, 34, 0, 0, 37, 8, 1, 0, 0, 0, 38, 44, 5, 39, 0, 0, 39, 40, 5, 39, 0, 0, 40, 43, 5, 39, 0, 0, 41, 43, 8, 3, 0, 0, 42, 39, 1, 0, 0, 0, 42, 41, 1, 0, 0, 0, 43, 46, 1, 0, 0, 0, 44, 42, 1, 0, 0, 0, 44, 45, 1, 0, 0, 0, 45, 47, 1, 0, 0, 0, 46, 44, 1, 0, 0, 0, 47, 48, 5, 39, 0, 0, 48, 10, 1, 0, 0, 0, 49, 50, 5, 32, 0, 0, 50, 51, 1, 0, 0, 0, 51, 52, 6, 5, 0, 0, 52, 12, 1, 0, 0, 0, 7, 0, 16, 24, 31, 33, 42, 44, 1, 6, 0, 0] \ No newline at end of file +[4, 0, 6, 55, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 1, 0, 1, 0, 1, 1, 3, 1, 17, 8, 1, 1, 1, 1, 1, 3, 1, 21, 8, 1, 1, 2, 1, 2, 5, 2, 25, 8, 2, 10, 2, 12, 2, 28, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 34, 8, 3, 10, 3, 12, 3, 37, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 45, 8, 4, 10, 4, 12, 4, 48, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 0, 0, 6, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 1, 0, 4, 7, 0, 10, 10, 13, 13, 32, 32, 34, 34, 39, 39, 44, 44, 61, 61, 6, 0, 10, 10, 13, 13, 34, 34, 39, 39, 44, 44, 61, 61, 1, 0, 34, 34, 1, 0, 39, 39, 61, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 1, 13, 1, 0, 0, 0, 3, 20, 1, 0, 0, 0, 5, 22, 1, 0, 0, 0, 7, 29, 1, 0, 0, 0, 9, 40, 1, 0, 0, 0, 11, 51, 1, 0, 0, 0, 13, 14, 5, 61, 0, 0, 14, 2, 1, 0, 0, 0, 15, 17, 5, 13, 0, 0, 16, 15, 1, 0, 0, 0, 16, 17, 1, 0, 0, 0, 17, 18, 1, 0, 0, 0, 18, 21, 5, 10, 0, 0, 19, 21, 5, 13, 0, 0, 20, 16, 1, 0, 0, 0, 20, 19, 1, 0, 0, 0, 21, 4, 1, 0, 0, 0, 22, 26, 8, 0, 0, 0, 23, 25, 8, 1, 0, 0, 24, 23, 1, 0, 0, 0, 25, 28, 1, 0, 0, 0, 26, 24, 1, 0, 0, 0, 26, 27, 1, 0, 0, 0, 27, 6, 1, 0, 0, 0, 28, 26, 1, 0, 0, 0, 29, 35, 5, 34, 0, 0, 30, 31, 5, 34, 0, 0, 31, 34, 5, 34, 0, 0, 32, 34, 8, 2, 0, 0, 33, 30, 1, 0, 0, 0, 33, 32, 1, 0, 0, 0, 34, 37, 1, 0, 0, 0, 35, 33, 1, 0, 0, 0, 35, 36, 1, 0, 0, 0, 36, 38, 1, 0, 0, 0, 37, 35, 1, 0, 0, 0, 38, 39, 5, 34, 0, 0, 39, 8, 1, 0, 0, 0, 40, 46, 5, 39, 0, 0, 41, 42, 5, 39, 0, 0, 42, 45, 5, 39, 0, 0, 43, 45, 8, 3, 0, 0, 44, 41, 1, 0, 0, 0, 44, 43, 1, 0, 0, 0, 45, 48, 1, 0, 0, 0, 46, 44, 1, 0, 0, 0, 46, 47, 1, 0, 0, 0, 47, 49, 1, 0, 0, 0, 48, 46, 1, 0, 0, 0, 49, 50, 5, 39, 0, 0, 50, 10, 1, 0, 0, 0, 51, 52, 5, 32, 0, 0, 52, 53, 1, 0, 0, 0, 53, 54, 6, 5, 0, 0, 54, 12, 1, 0, 0, 0, 8, 0, 16, 20, 26, 33, 35, 44, 46, 1, 6, 0, 0] \ No newline at end of file diff --git a/gen/fileparser/EnvLangFileLexer.tokens b/gen/fileparser/EnvLangFileLexer.tokens index 2e1e818..b2dd4b9 100644 --- a/gen/fileparser/EnvLangFileLexer.tokens +++ b/gen/fileparser/EnvLangFileLexer.tokens @@ -1,5 +1,5 @@ ASSIGN=1 -NL=2 +CRLF=2 TEXT=3 DQSTRING=4 SQSTRING=5 diff --git a/gen/fileparser/envlangfile_lexer.go b/gen/fileparser/envlangfile_lexer.go index cc8069b..fc632a3 100644 --- a/gen/fileparser/envlangfile_lexer.go +++ b/gen/fileparser/envlangfile_lexer.go @@ -46,38 +46,39 @@ func envlangfilelexerLexerInit() { "", "'='", "", "", "", "", "' '", } staticData.SymbolicNames = []string{ - "", "ASSIGN", "NL", "TEXT", "DQSTRING", "SQSTRING", "SPACE", + "", "ASSIGN", "CRLF", "TEXT", "DQSTRING", "SQSTRING", "SPACE", } staticData.RuleNames = []string{ - "ASSIGN", "NL", "TEXT", "DQSTRING", "SQSTRING", "SPACE", + "ASSIGN", "CRLF", "TEXT", "DQSTRING", "SQSTRING", "SPACE", } staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 0, 6, 53, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, - 4, 7, 4, 2, 5, 7, 5, 1, 0, 1, 0, 1, 1, 3, 1, 17, 8, 1, 1, 1, 1, 1, 1, 2, - 1, 2, 5, 2, 23, 8, 2, 10, 2, 12, 2, 26, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 5, - 3, 32, 8, 3, 10, 3, 12, 3, 35, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, - 5, 4, 43, 8, 4, 10, 4, 12, 4, 46, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, - 5, 0, 0, 6, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 1, 0, 4, 7, 0, 10, 10, - 13, 13, 32, 32, 34, 34, 39, 39, 44, 44, 61, 61, 6, 0, 10, 10, 13, 13, 34, - 34, 39, 39, 44, 44, 61, 61, 1, 0, 34, 34, 1, 0, 39, 39, 58, 0, 1, 1, 0, - 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, - 0, 0, 0, 11, 1, 0, 0, 0, 1, 13, 1, 0, 0, 0, 3, 16, 1, 0, 0, 0, 5, 20, 1, - 0, 0, 0, 7, 27, 1, 0, 0, 0, 9, 38, 1, 0, 0, 0, 11, 49, 1, 0, 0, 0, 13, - 14, 5, 61, 0, 0, 14, 2, 1, 0, 0, 0, 15, 17, 5, 13, 0, 0, 16, 15, 1, 0, - 0, 0, 16, 17, 1, 0, 0, 0, 17, 18, 1, 0, 0, 0, 18, 19, 5, 10, 0, 0, 19, - 4, 1, 0, 0, 0, 20, 24, 8, 0, 0, 0, 21, 23, 8, 1, 0, 0, 22, 21, 1, 0, 0, - 0, 23, 26, 1, 0, 0, 0, 24, 22, 1, 0, 0, 0, 24, 25, 1, 0, 0, 0, 25, 6, 1, - 0, 0, 0, 26, 24, 1, 0, 0, 0, 27, 33, 5, 34, 0, 0, 28, 29, 5, 34, 0, 0, - 29, 32, 5, 34, 0, 0, 30, 32, 8, 2, 0, 0, 31, 28, 1, 0, 0, 0, 31, 30, 1, - 0, 0, 0, 32, 35, 1, 0, 0, 0, 33, 31, 1, 0, 0, 0, 33, 34, 1, 0, 0, 0, 34, - 36, 1, 0, 0, 0, 35, 33, 1, 0, 0, 0, 36, 37, 5, 34, 0, 0, 37, 8, 1, 0, 0, - 0, 38, 44, 5, 39, 0, 0, 39, 40, 5, 39, 0, 0, 40, 43, 5, 39, 0, 0, 41, 43, - 8, 3, 0, 0, 42, 39, 1, 0, 0, 0, 42, 41, 1, 0, 0, 0, 43, 46, 1, 0, 0, 0, - 44, 42, 1, 0, 0, 0, 44, 45, 1, 0, 0, 0, 45, 47, 1, 0, 0, 0, 46, 44, 1, - 0, 0, 0, 47, 48, 5, 39, 0, 0, 48, 10, 1, 0, 0, 0, 49, 50, 5, 32, 0, 0, - 50, 51, 1, 0, 0, 0, 51, 52, 6, 5, 0, 0, 52, 12, 1, 0, 0, 0, 7, 0, 16, 24, - 31, 33, 42, 44, 1, 6, 0, 0, + 4, 0, 6, 55, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, + 4, 7, 4, 2, 5, 7, 5, 1, 0, 1, 0, 1, 1, 3, 1, 17, 8, 1, 1, 1, 1, 1, 3, 1, + 21, 8, 1, 1, 2, 1, 2, 5, 2, 25, 8, 2, 10, 2, 12, 2, 28, 9, 2, 1, 3, 1, + 3, 1, 3, 1, 3, 5, 3, 34, 8, 3, 10, 3, 12, 3, 37, 9, 3, 1, 3, 1, 3, 1, 4, + 1, 4, 1, 4, 1, 4, 5, 4, 45, 8, 4, 10, 4, 12, 4, 48, 9, 4, 1, 4, 1, 4, 1, + 5, 1, 5, 1, 5, 1, 5, 0, 0, 6, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 1, 0, + 4, 7, 0, 10, 10, 13, 13, 32, 32, 34, 34, 39, 39, 44, 44, 61, 61, 6, 0, + 10, 10, 13, 13, 34, 34, 39, 39, 44, 44, 61, 61, 1, 0, 34, 34, 1, 0, 39, + 39, 61, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, + 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 1, 13, 1, 0, 0, 0, 3, 20, + 1, 0, 0, 0, 5, 22, 1, 0, 0, 0, 7, 29, 1, 0, 0, 0, 9, 40, 1, 0, 0, 0, 11, + 51, 1, 0, 0, 0, 13, 14, 5, 61, 0, 0, 14, 2, 1, 0, 0, 0, 15, 17, 5, 13, + 0, 0, 16, 15, 1, 0, 0, 0, 16, 17, 1, 0, 0, 0, 17, 18, 1, 0, 0, 0, 18, 21, + 5, 10, 0, 0, 19, 21, 5, 13, 0, 0, 20, 16, 1, 0, 0, 0, 20, 19, 1, 0, 0, + 0, 21, 4, 1, 0, 0, 0, 22, 26, 8, 0, 0, 0, 23, 25, 8, 1, 0, 0, 24, 23, 1, + 0, 0, 0, 25, 28, 1, 0, 0, 0, 26, 24, 1, 0, 0, 0, 26, 27, 1, 0, 0, 0, 27, + 6, 1, 0, 0, 0, 28, 26, 1, 0, 0, 0, 29, 35, 5, 34, 0, 0, 30, 31, 5, 34, + 0, 0, 31, 34, 5, 34, 0, 0, 32, 34, 8, 2, 0, 0, 33, 30, 1, 0, 0, 0, 33, + 32, 1, 0, 0, 0, 34, 37, 1, 0, 0, 0, 35, 33, 1, 0, 0, 0, 35, 36, 1, 0, 0, + 0, 36, 38, 1, 0, 0, 0, 37, 35, 1, 0, 0, 0, 38, 39, 5, 34, 0, 0, 39, 8, + 1, 0, 0, 0, 40, 46, 5, 39, 0, 0, 41, 42, 5, 39, 0, 0, 42, 45, 5, 39, 0, + 0, 43, 45, 8, 3, 0, 0, 44, 41, 1, 0, 0, 0, 44, 43, 1, 0, 0, 0, 45, 48, + 1, 0, 0, 0, 46, 44, 1, 0, 0, 0, 46, 47, 1, 0, 0, 0, 47, 49, 1, 0, 0, 0, + 48, 46, 1, 0, 0, 0, 49, 50, 5, 39, 0, 0, 50, 10, 1, 0, 0, 0, 51, 52, 5, + 32, 0, 0, 52, 53, 1, 0, 0, 0, 53, 54, 6, 5, 0, 0, 54, 12, 1, 0, 0, 0, 8, + 0, 16, 20, 26, 33, 35, 44, 46, 1, 6, 0, 0, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -119,7 +120,7 @@ func NewEnvLangFileLexer(input antlr.CharStream) *EnvLangFileLexer { // EnvLangFileLexer tokens. const ( EnvLangFileLexerASSIGN = 1 - EnvLangFileLexerNL = 2 + EnvLangFileLexerCRLF = 2 EnvLangFileLexerTEXT = 3 EnvLangFileLexerDQSTRING = 4 EnvLangFileLexerSQSTRING = 5 diff --git a/gen/fileparser/envlangfile_parser.go b/gen/fileparser/envlangfile_parser.go index c7a5fdf..583732a 100644 --- a/gen/fileparser/envlangfile_parser.go +++ b/gen/fileparser/envlangfile_parser.go @@ -35,32 +35,35 @@ func envlangfileParserInit() { "", "'='", "", "", "", "", "' '", } staticData.SymbolicNames = []string{ - "", "ASSIGN", "NL", "TEXT", "DQSTRING", "SQSTRING", "SPACE", + "", "ASSIGN", "CRLF", "TEXT", "DQSTRING", "SQSTRING", "SPACE", } staticData.RuleNames = []string{ "envFile", "entry", "identifier", "value", } staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 1, 6, 45, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 1, 0, 5, 0, + 4, 1, 6, 51, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 1, 0, 5, 0, 10, 8, 0, 10, 0, 12, 0, 13, 9, 0, 1, 0, 1, 0, 5, 0, 17, 8, 0, 10, 0, 12, 0, 20, 9, 0, 4, 0, 22, 8, 0, 11, 0, 12, 0, 23, 1, 1, 1, 1, 1, 1, 1, 1, - 3, 1, 30, 8, 1, 1, 1, 5, 1, 33, 8, 1, 10, 1, 12, 1, 36, 9, 1, 1, 1, 3, - 1, 39, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 0, 0, 4, 0, 2, 4, 6, 0, 1, 1, - 0, 3, 5, 47, 0, 11, 1, 0, 0, 0, 2, 25, 1, 0, 0, 0, 4, 40, 1, 0, 0, 0, 6, - 42, 1, 0, 0, 0, 8, 10, 5, 2, 0, 0, 9, 8, 1, 0, 0, 0, 10, 13, 1, 0, 0, 0, - 11, 9, 1, 0, 0, 0, 11, 12, 1, 0, 0, 0, 12, 21, 1, 0, 0, 0, 13, 11, 1, 0, - 0, 0, 14, 18, 3, 2, 1, 0, 15, 17, 5, 2, 0, 0, 16, 15, 1, 0, 0, 0, 17, 20, - 1, 0, 0, 0, 18, 16, 1, 0, 0, 0, 18, 19, 1, 0, 0, 0, 19, 22, 1, 0, 0, 0, - 20, 18, 1, 0, 0, 0, 21, 14, 1, 0, 0, 0, 22, 23, 1, 0, 0, 0, 23, 21, 1, - 0, 0, 0, 23, 24, 1, 0, 0, 0, 24, 1, 1, 0, 0, 0, 25, 29, 3, 4, 2, 0, 26, - 27, 5, 1, 0, 0, 27, 30, 3, 6, 3, 0, 28, 30, 5, 1, 0, 0, 29, 26, 1, 0, 0, - 0, 29, 28, 1, 0, 0, 0, 29, 30, 1, 0, 0, 0, 30, 38, 1, 0, 0, 0, 31, 33, - 5, 2, 0, 0, 32, 31, 1, 0, 0, 0, 33, 36, 1, 0, 0, 0, 34, 32, 1, 0, 0, 0, - 34, 35, 1, 0, 0, 0, 35, 39, 1, 0, 0, 0, 36, 34, 1, 0, 0, 0, 37, 39, 5, - 0, 0, 1, 38, 34, 1, 0, 0, 0, 38, 37, 1, 0, 0, 0, 39, 3, 1, 0, 0, 0, 40, - 41, 5, 3, 0, 0, 41, 5, 1, 0, 0, 0, 42, 43, 7, 0, 0, 0, 43, 7, 1, 0, 0, - 0, 6, 11, 18, 23, 29, 34, 38, + 3, 1, 30, 8, 1, 1, 1, 5, 1, 33, 8, 1, 10, 1, 12, 1, 36, 9, 1, 1, 1, 5, + 1, 39, 8, 1, 10, 1, 12, 1, 42, 9, 1, 1, 1, 3, 1, 45, 8, 1, 1, 2, 1, 2, + 1, 3, 1, 3, 1, 3, 0, 0, 4, 0, 2, 4, 6, 0, 1, 1, 0, 3, 5, 54, 0, 11, 1, + 0, 0, 0, 2, 25, 1, 0, 0, 0, 4, 46, 1, 0, 0, 0, 6, 48, 1, 0, 0, 0, 8, 10, + 5, 2, 0, 0, 9, 8, 1, 0, 0, 0, 10, 13, 1, 0, 0, 0, 11, 9, 1, 0, 0, 0, 11, + 12, 1, 0, 0, 0, 12, 21, 1, 0, 0, 0, 13, 11, 1, 0, 0, 0, 14, 18, 3, 2, 1, + 0, 15, 17, 5, 2, 0, 0, 16, 15, 1, 0, 0, 0, 17, 20, 1, 0, 0, 0, 18, 16, + 1, 0, 0, 0, 18, 19, 1, 0, 0, 0, 19, 22, 1, 0, 0, 0, 20, 18, 1, 0, 0, 0, + 21, 14, 1, 0, 0, 0, 22, 23, 1, 0, 0, 0, 23, 21, 1, 0, 0, 0, 23, 24, 1, + 0, 0, 0, 24, 1, 1, 0, 0, 0, 25, 29, 3, 4, 2, 0, 26, 27, 5, 1, 0, 0, 27, + 30, 3, 6, 3, 0, 28, 30, 5, 1, 0, 0, 29, 26, 1, 0, 0, 0, 29, 28, 1, 0, 0, + 0, 29, 30, 1, 0, 0, 0, 30, 44, 1, 0, 0, 0, 31, 33, 5, 6, 0, 0, 32, 31, + 1, 0, 0, 0, 33, 36, 1, 0, 0, 0, 34, 32, 1, 0, 0, 0, 34, 35, 1, 0, 0, 0, + 35, 40, 1, 0, 0, 0, 36, 34, 1, 0, 0, 0, 37, 39, 5, 2, 0, 0, 38, 37, 1, + 0, 0, 0, 39, 42, 1, 0, 0, 0, 40, 38, 1, 0, 0, 0, 40, 41, 1, 0, 0, 0, 41, + 45, 1, 0, 0, 0, 42, 40, 1, 0, 0, 0, 43, 45, 5, 0, 0, 1, 44, 34, 1, 0, 0, + 0, 44, 43, 1, 0, 0, 0, 45, 3, 1, 0, 0, 0, 46, 47, 5, 3, 0, 0, 47, 5, 1, + 0, 0, 0, 48, 49, 7, 0, 0, 0, 49, 7, 1, 0, 0, 0, 7, 11, 18, 23, 29, 34, + 40, 44, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -100,7 +103,7 @@ func NewEnvLangFileParser(input antlr.TokenStream) *EnvLangFileParser { const ( EnvLangFileParserEOF = antlr.TokenEOF EnvLangFileParserASSIGN = 1 - EnvLangFileParserNL = 2 + EnvLangFileParserCRLF = 2 EnvLangFileParserTEXT = 3 EnvLangFileParserDQSTRING = 4 EnvLangFileParserSQSTRING = 5 @@ -123,8 +126,8 @@ type IEnvFileContext interface { GetParser() antlr.Parser // Getter signatures - AllNL() []antlr.TerminalNode - NL(i int) antlr.TerminalNode + AllCRLF() []antlr.TerminalNode + CRLF(i int) antlr.TerminalNode AllEntry() []IEntryContext Entry(i int) IEntryContext @@ -164,12 +167,12 @@ func NewEnvFileContext(parser antlr.Parser, parent antlr.ParserRuleContext, invo func (s *EnvFileContext) GetParser() antlr.Parser { return s.parser } -func (s *EnvFileContext) AllNL() []antlr.TerminalNode { - return s.GetTokens(EnvLangFileParserNL) +func (s *EnvFileContext) AllCRLF() []antlr.TerminalNode { + return s.GetTokens(EnvLangFileParserCRLF) } -func (s *EnvFileContext) NL(i int) antlr.TerminalNode { - return s.GetToken(EnvLangFileParserNL, i) +func (s *EnvFileContext) CRLF(i int) antlr.TerminalNode { + return s.GetToken(EnvLangFileParserCRLF, i) } func (s *EnvFileContext) AllEntry() []IEntryContext { @@ -246,10 +249,10 @@ func (p *EnvLangFileParser) EnvFile() (localctx IEnvFileContext) { } _la = p.GetTokenStream().LA(1) - for _la == EnvLangFileParserNL { + for _la == EnvLangFileParserCRLF { { p.SetState(8) - p.Match(EnvLangFileParserNL) + p.Match(EnvLangFileParserCRLF) if p.HasError() { // Recognition error - abort rule goto errorExit @@ -282,10 +285,10 @@ func (p *EnvLangFileParser) EnvFile() (localctx IEnvFileContext) { } _la = p.GetTokenStream().LA(1) - for _la == EnvLangFileParserNL { + for _la == EnvLangFileParserCRLF { { p.SetState(15) - p.Match(EnvLangFileParserNL) + p.Match(EnvLangFileParserCRLF) if p.HasError() { // Recognition error - abort rule goto errorExit @@ -333,8 +336,10 @@ type IEntryContext interface { EOF() antlr.TerminalNode ASSIGN() antlr.TerminalNode Value() IValueContext - AllNL() []antlr.TerminalNode - NL(i int) antlr.TerminalNode + AllSPACE() []antlr.TerminalNode + SPACE(i int) antlr.TerminalNode + AllCRLF() []antlr.TerminalNode + CRLF(i int) antlr.TerminalNode // IsEntryContext differentiates from other interfaces. IsEntryContext() @@ -412,12 +417,20 @@ func (s *EntryContext) Value() IValueContext { return t.(IValueContext) } -func (s *EntryContext) AllNL() []antlr.TerminalNode { - return s.GetTokens(EnvLangFileParserNL) +func (s *EntryContext) AllSPACE() []antlr.TerminalNode { + return s.GetTokens(EnvLangFileParserSPACE) } -func (s *EntryContext) NL(i int) antlr.TerminalNode { - return s.GetToken(EnvLangFileParserNL, i) +func (s *EntryContext) SPACE(i int) antlr.TerminalNode { + return s.GetToken(EnvLangFileParserSPACE, i) +} + +func (s *EntryContext) AllCRLF() []antlr.TerminalNode { + return s.GetTokens(EnvLangFileParserCRLF) +} + +func (s *EntryContext) CRLF(i int) antlr.TerminalNode { + return s.GetToken(EnvLangFileParserCRLF, i) } func (s *EntryContext) GetRuleContext() antlr.RuleContext { @@ -443,6 +456,8 @@ func (s *EntryContext) ExitRule(listener antlr.ParseTreeListener) { func (p *EnvLangFileParser) Entry() (localctx IEntryContext) { localctx = NewEntryContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 2, EnvLangFileParserRULE_entry) + var _la int + var _alt int p.EnterOuterAlt(localctx, 1) @@ -482,28 +497,52 @@ func (p *EnvLangFileParser) Entry() (localctx IEntryContext) { } else if p.HasError() { // JIM goto errorExit } - p.SetState(38) + p.SetState(44) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 5, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 6, p.GetParserRuleContext()) { case 1: p.SetState(34) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 4, p.GetParserRuleContext()) + _la = p.GetTokenStream().LA(1) + + for _la == EnvLangFileParserSPACE { + { + p.SetState(31) + p.Match(EnvLangFileParserSPACE) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + + p.SetState(36) + p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } + _la = p.GetTokenStream().LA(1) + } + p.SetState(40) + p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 5, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(31) - p.Match(EnvLangFileParserNL) + p.SetState(37) + p.Match(EnvLangFileParserCRLF) if p.HasError() { // Recognition error - abort rule goto errorExit @@ -511,12 +550,12 @@ func (p *EnvLangFileParser) Entry() (localctx IEntryContext) { } } - p.SetState(36) + p.SetState(42) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 4, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 5, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -524,7 +563,7 @@ func (p *EnvLangFileParser) Entry() (localctx IEntryContext) { case 2: { - p.SetState(37) + p.SetState(43) p.Match(EnvLangFileParserEOF) if p.HasError() { // Recognition error - abort rule @@ -624,7 +663,7 @@ func (p *EnvLangFileParser) Identifier() (localctx IIdentifierContext) { p.EnterRule(localctx, 4, EnvLangFileParserRULE_identifier) p.EnterOuterAlt(localctx, 1) { - p.SetState(40) + p.SetState(46) p.Match(EnvLangFileParserTEXT) if p.HasError() { // Recognition error - abort rule @@ -652,11 +691,11 @@ type IValueContext interface { // GetParser returns the parser. GetParser() antlr.Parser - // GetOp returns the op token. - GetOp() antlr.Token + // GetStr returns the str token. + GetStr() antlr.Token - // SetOp sets the op token. - SetOp(antlr.Token) + // SetStr sets the str token. + SetStr(antlr.Token) // Getter signatures DQSTRING() antlr.TerminalNode @@ -670,7 +709,7 @@ type IValueContext interface { type ValueContext struct { antlr.BaseParserRuleContext parser antlr.Parser - op antlr.Token + str antlr.Token } func NewEmptyValueContext() *ValueContext { @@ -700,9 +739,9 @@ func NewValueContext(parser antlr.Parser, parent antlr.ParserRuleContext, invoki func (s *ValueContext) GetParser() antlr.Parser { return s.parser } -func (s *ValueContext) GetOp() antlr.Token { return s.op } +func (s *ValueContext) GetStr() antlr.Token { return s.str } -func (s *ValueContext) SetOp(v antlr.Token) { s.op = v } +func (s *ValueContext) SetStr(v antlr.Token) { s.str = v } func (s *ValueContext) DQSTRING() antlr.TerminalNode { return s.GetToken(EnvLangFileParserDQSTRING, 0) @@ -743,18 +782,18 @@ func (p *EnvLangFileParser) Value() (localctx IValueContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(42) + p.SetState(48) var _lt = p.GetTokenStream().LT(1) - localctx.(*ValueContext).op = _lt + localctx.(*ValueContext).str = _lt _la = p.GetTokenStream().LA(1) if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&56) != 0) { var _ri = p.GetErrorHandler().RecoverInline(p) - localctx.(*ValueContext).op = _ri + localctx.(*ValueContext).str = _ri } else { p.GetErrorHandler().ReportMatch(p) p.Consume() diff --git a/gen/valueparser/EnvLangValue.interp b/gen/valueparser/EnvLangValue.interp index c4b6e44..57ffcc9 100644 --- a/gen/valueparser/EnvLangValue.interp +++ b/gen/valueparser/EnvLangValue.interp @@ -1,38 +1,26 @@ token literal names: null -'${' -'}' -'$' -' ' -'""' -'{' -null -null -null - -token symbolic names: null null null null null null + +token symbolic names: null -TEXT_NO_SPACE -TEXT_ANY +STRICT_VAR +SIMPLE_VAR +STR +SPACE CRLF +ANY rule names: dqstring -strictVar -simpleVar variable -text -space -dQEscape -special content atn: -[4, 1, 9, 72, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 1, 0, 5, 0, 20, 8, 0, 10, 0, 12, 0, 23, 9, 0, 1, 0, 5, 0, 26, 8, 0, 10, 0, 12, 0, 29, 9, 0, 1, 0, 3, 0, 32, 8, 0, 1, 1, 1, 1, 4, 1, 36, 8, 1, 11, 1, 12, 1, 37, 1, 1, 1, 1, 1, 2, 1, 2, 4, 2, 44, 8, 2, 11, 2, 12, 2, 45, 1, 3, 1, 3, 3, 3, 50, 8, 3, 1, 4, 1, 4, 5, 4, 54, 8, 4, 10, 4, 12, 4, 57, 9, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 70, 8, 8, 1, 8, 0, 0, 9, 0, 2, 4, 6, 8, 10, 12, 14, 16, 0, 1, 2, 0, 2, 3, 6, 6, 73, 0, 21, 1, 0, 0, 0, 2, 33, 1, 0, 0, 0, 4, 41, 1, 0, 0, 0, 6, 49, 1, 0, 0, 0, 8, 51, 1, 0, 0, 0, 10, 58, 1, 0, 0, 0, 12, 60, 1, 0, 0, 0, 14, 62, 1, 0, 0, 0, 16, 69, 1, 0, 0, 0, 18, 20, 3, 16, 8, 0, 19, 18, 1, 0, 0, 0, 20, 23, 1, 0, 0, 0, 21, 19, 1, 0, 0, 0, 21, 22, 1, 0, 0, 0, 22, 31, 1, 0, 0, 0, 23, 21, 1, 0, 0, 0, 24, 26, 5, 9, 0, 0, 25, 24, 1, 0, 0, 0, 26, 29, 1, 0, 0, 0, 27, 25, 1, 0, 0, 0, 27, 28, 1, 0, 0, 0, 28, 32, 1, 0, 0, 0, 29, 27, 1, 0, 0, 0, 30, 32, 5, 0, 0, 1, 31, 27, 1, 0, 0, 0, 31, 30, 1, 0, 0, 0, 32, 1, 1, 0, 0, 0, 33, 35, 5, 1, 0, 0, 34, 36, 5, 7, 0, 0, 35, 34, 1, 0, 0, 0, 36, 37, 1, 0, 0, 0, 37, 35, 1, 0, 0, 0, 37, 38, 1, 0, 0, 0, 38, 39, 1, 0, 0, 0, 39, 40, 5, 2, 0, 0, 40, 3, 1, 0, 0, 0, 41, 43, 5, 3, 0, 0, 42, 44, 5, 7, 0, 0, 43, 42, 1, 0, 0, 0, 44, 45, 1, 0, 0, 0, 45, 43, 1, 0, 0, 0, 45, 46, 1, 0, 0, 0, 46, 5, 1, 0, 0, 0, 47, 50, 3, 2, 1, 0, 48, 50, 3, 4, 2, 0, 49, 47, 1, 0, 0, 0, 49, 48, 1, 0, 0, 0, 50, 7, 1, 0, 0, 0, 51, 55, 5, 7, 0, 0, 52, 54, 5, 8, 0, 0, 53, 52, 1, 0, 0, 0, 54, 57, 1, 0, 0, 0, 55, 53, 1, 0, 0, 0, 55, 56, 1, 0, 0, 0, 56, 9, 1, 0, 0, 0, 57, 55, 1, 0, 0, 0, 58, 59, 5, 4, 0, 0, 59, 11, 1, 0, 0, 0, 60, 61, 5, 5, 0, 0, 61, 13, 1, 0, 0, 0, 62, 63, 7, 0, 0, 0, 63, 15, 1, 0, 0, 0, 64, 70, 3, 12, 6, 0, 65, 70, 3, 6, 3, 0, 66, 70, 3, 10, 5, 0, 67, 70, 3, 14, 7, 0, 68, 70, 3, 8, 4, 0, 69, 64, 1, 0, 0, 0, 69, 65, 1, 0, 0, 0, 69, 66, 1, 0, 0, 0, 69, 67, 1, 0, 0, 0, 69, 68, 1, 0, 0, 0, 70, 17, 1, 0, 0, 0, 8, 21, 27, 31, 37, 45, 49, 55, 69] \ No newline at end of file +[4, 1, 6, 36, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 1, 0, 5, 0, 8, 8, 0, 10, 0, 12, 0, 11, 9, 0, 1, 0, 5, 0, 14, 8, 0, 10, 0, 12, 0, 17, 9, 0, 1, 0, 5, 0, 20, 8, 0, 10, 0, 12, 0, 23, 9, 0, 1, 0, 3, 0, 26, 8, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 34, 8, 2, 1, 2, 0, 0, 3, 0, 2, 4, 0, 1, 1, 0, 1, 2, 40, 0, 9, 1, 0, 0, 0, 2, 27, 1, 0, 0, 0, 4, 33, 1, 0, 0, 0, 6, 8, 3, 4, 2, 0, 7, 6, 1, 0, 0, 0, 8, 11, 1, 0, 0, 0, 9, 7, 1, 0, 0, 0, 9, 10, 1, 0, 0, 0, 10, 25, 1, 0, 0, 0, 11, 9, 1, 0, 0, 0, 12, 14, 5, 4, 0, 0, 13, 12, 1, 0, 0, 0, 14, 17, 1, 0, 0, 0, 15, 13, 1, 0, 0, 0, 15, 16, 1, 0, 0, 0, 16, 26, 1, 0, 0, 0, 17, 15, 1, 0, 0, 0, 18, 20, 5, 5, 0, 0, 19, 18, 1, 0, 0, 0, 20, 23, 1, 0, 0, 0, 21, 19, 1, 0, 0, 0, 21, 22, 1, 0, 0, 0, 22, 26, 1, 0, 0, 0, 23, 21, 1, 0, 0, 0, 24, 26, 5, 0, 0, 1, 25, 15, 1, 0, 0, 0, 25, 21, 1, 0, 0, 0, 25, 24, 1, 0, 0, 0, 26, 1, 1, 0, 0, 0, 27, 28, 7, 0, 0, 0, 28, 3, 1, 0, 0, 0, 29, 34, 3, 2, 1, 0, 30, 34, 5, 3, 0, 0, 31, 34, 5, 4, 0, 0, 32, 34, 5, 5, 0, 0, 33, 29, 1, 0, 0, 0, 33, 30, 1, 0, 0, 0, 33, 31, 1, 0, 0, 0, 33, 32, 1, 0, 0, 0, 34, 5, 1, 0, 0, 0, 5, 9, 15, 21, 25, 33] \ No newline at end of file diff --git a/gen/valueparser/EnvLangValue.tokens b/gen/valueparser/EnvLangValue.tokens index c748fb2..6513adf 100644 --- a/gen/valueparser/EnvLangValue.tokens +++ b/gen/valueparser/EnvLangValue.tokens @@ -1,15 +1,6 @@ -T__0=1 -T__1=2 -T__2=3 -T__3=4 -T__4=5 -T__5=6 -TEXT_NO_SPACE=7 -TEXT_ANY=8 -CRLF=9 -'${'=1 -'}'=2 -'$'=3 -' '=4 -'""'=5 -'{'=6 +STRICT_VAR=1 +SIMPLE_VAR=2 +STR=3 +SPACE=4 +CRLF=5 +ANY=6 diff --git a/gen/valueparser/EnvLangValueLexer.interp b/gen/valueparser/EnvLangValueLexer.interp index 88c02e7..76365b1 100644 --- a/gen/valueparser/EnvLangValueLexer.interp +++ b/gen/valueparser/EnvLangValueLexer.interp @@ -1,37 +1,31 @@ token literal names: null -'${' -'}' -'$' -' ' -'""' -'{' -null -null -null - -token symbolic names: null null null null null null + +token symbolic names: null -TEXT_NO_SPACE -TEXT_ANY +STRICT_VAR +SIMPLE_VAR +STR +SPACE CRLF +ANY rule names: -T__0 -T__1 -T__2 -T__3 -T__4 -T__5 -TEXT_NO_SPACE -TEXT_ANY +STRICT_VAR +SIMPLE_VAR +STR +SPACE CRLF +FIRST_CHAR +REST_OF_STRING +VAR_ID +ANY channel names: DEFAULT_TOKEN_CHANNEL @@ -41,4 +35,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 9, 44, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 3, 8, 39, 8, 8, 1, 8, 1, 8, 3, 8, 43, 8, 8, 0, 0, 9, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 1, 0, 2, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 5, 0, 10, 10, 48, 57, 65, 90, 95, 95, 97, 122, 45, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 1, 19, 1, 0, 0, 0, 3, 22, 1, 0, 0, 0, 5, 24, 1, 0, 0, 0, 7, 26, 1, 0, 0, 0, 9, 28, 1, 0, 0, 0, 11, 31, 1, 0, 0, 0, 13, 33, 1, 0, 0, 0, 15, 35, 1, 0, 0, 0, 17, 42, 1, 0, 0, 0, 19, 20, 5, 36, 0, 0, 20, 21, 5, 123, 0, 0, 21, 2, 1, 0, 0, 0, 22, 23, 5, 125, 0, 0, 23, 4, 1, 0, 0, 0, 24, 25, 5, 36, 0, 0, 25, 6, 1, 0, 0, 0, 26, 27, 5, 32, 0, 0, 27, 8, 1, 0, 0, 0, 28, 29, 5, 34, 0, 0, 29, 30, 5, 34, 0, 0, 30, 10, 1, 0, 0, 0, 31, 32, 5, 123, 0, 0, 32, 12, 1, 0, 0, 0, 33, 34, 7, 0, 0, 0, 34, 14, 1, 0, 0, 0, 35, 36, 7, 1, 0, 0, 36, 16, 1, 0, 0, 0, 37, 39, 5, 13, 0, 0, 38, 37, 1, 0, 0, 0, 38, 39, 1, 0, 0, 0, 39, 40, 1, 0, 0, 0, 40, 43, 5, 10, 0, 0, 41, 43, 5, 13, 0, 0, 42, 38, 1, 0, 0, 0, 42, 41, 1, 0, 0, 0, 43, 18, 1, 0, 0, 0, 3, 0, 38, 42, 0] \ No newline at end of file +[4, 0, 6, 76, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 24, 8, 0, 10, 0, 12, 0, 27, 9, 0, 1, 0, 1, 0, 5, 0, 31, 8, 0, 10, 0, 12, 0, 34, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 5, 2, 43, 8, 2, 10, 2, 12, 2, 46, 9, 2, 1, 3, 1, 3, 1, 4, 3, 4, 51, 8, 4, 1, 4, 1, 4, 3, 4, 55, 8, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 4, 7, 62, 8, 7, 11, 7, 12, 7, 63, 1, 7, 1, 7, 5, 7, 68, 8, 7, 10, 7, 12, 7, 71, 9, 7, 3, 7, 73, 8, 7, 1, 8, 1, 8, 0, 0, 9, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 0, 13, 0, 15, 0, 17, 6, 1, 0, 6, 2, 0, 9, 9, 32, 32, 8, 0, 10, 10, 13, 13, 32, 32, 34, 34, 39, 39, 44, 44, 46, 46, 92, 92, 7, 0, 10, 10, 13, 13, 32, 32, 34, 34, 36, 36, 39, 39, 92, 92, 1, 0, 48, 57, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 80, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 1, 19, 1, 0, 0, 0, 3, 37, 1, 0, 0, 0, 5, 40, 1, 0, 0, 0, 7, 47, 1, 0, 0, 0, 9, 54, 1, 0, 0, 0, 11, 56, 1, 0, 0, 0, 13, 58, 1, 0, 0, 0, 15, 72, 1, 0, 0, 0, 17, 74, 1, 0, 0, 0, 19, 20, 5, 36, 0, 0, 20, 21, 5, 123, 0, 0, 21, 25, 1, 0, 0, 0, 22, 24, 3, 7, 3, 0, 23, 22, 1, 0, 0, 0, 24, 27, 1, 0, 0, 0, 25, 23, 1, 0, 0, 0, 25, 26, 1, 0, 0, 0, 26, 28, 1, 0, 0, 0, 27, 25, 1, 0, 0, 0, 28, 32, 3, 15, 7, 0, 29, 31, 3, 7, 3, 0, 30, 29, 1, 0, 0, 0, 31, 34, 1, 0, 0, 0, 32, 30, 1, 0, 0, 0, 32, 33, 1, 0, 0, 0, 33, 35, 1, 0, 0, 0, 34, 32, 1, 0, 0, 0, 35, 36, 5, 125, 0, 0, 36, 2, 1, 0, 0, 0, 37, 38, 5, 36, 0, 0, 38, 39, 3, 15, 7, 0, 39, 4, 1, 0, 0, 0, 40, 44, 3, 11, 5, 0, 41, 43, 3, 13, 6, 0, 42, 41, 1, 0, 0, 0, 43, 46, 1, 0, 0, 0, 44, 42, 1, 0, 0, 0, 44, 45, 1, 0, 0, 0, 45, 6, 1, 0, 0, 0, 46, 44, 1, 0, 0, 0, 47, 48, 7, 0, 0, 0, 48, 8, 1, 0, 0, 0, 49, 51, 5, 13, 0, 0, 50, 49, 1, 0, 0, 0, 50, 51, 1, 0, 0, 0, 51, 52, 1, 0, 0, 0, 52, 55, 5, 10, 0, 0, 53, 55, 5, 13, 0, 0, 54, 50, 1, 0, 0, 0, 54, 53, 1, 0, 0, 0, 55, 10, 1, 0, 0, 0, 56, 57, 8, 1, 0, 0, 57, 12, 1, 0, 0, 0, 58, 59, 8, 2, 0, 0, 59, 14, 1, 0, 0, 0, 60, 62, 7, 3, 0, 0, 61, 60, 1, 0, 0, 0, 62, 63, 1, 0, 0, 0, 63, 61, 1, 0, 0, 0, 63, 64, 1, 0, 0, 0, 64, 73, 1, 0, 0, 0, 65, 69, 7, 4, 0, 0, 66, 68, 7, 5, 0, 0, 67, 66, 1, 0, 0, 0, 68, 71, 1, 0, 0, 0, 69, 67, 1, 0, 0, 0, 69, 70, 1, 0, 0, 0, 70, 73, 1, 0, 0, 0, 71, 69, 1, 0, 0, 0, 72, 61, 1, 0, 0, 0, 72, 65, 1, 0, 0, 0, 73, 16, 1, 0, 0, 0, 74, 75, 9, 0, 0, 0, 75, 18, 1, 0, 0, 0, 9, 0, 25, 32, 44, 50, 54, 63, 69, 72, 0] \ No newline at end of file diff --git a/gen/valueparser/EnvLangValueLexer.tokens b/gen/valueparser/EnvLangValueLexer.tokens index c748fb2..6513adf 100644 --- a/gen/valueparser/EnvLangValueLexer.tokens +++ b/gen/valueparser/EnvLangValueLexer.tokens @@ -1,15 +1,6 @@ -T__0=1 -T__1=2 -T__2=3 -T__3=4 -T__4=5 -T__5=6 -TEXT_NO_SPACE=7 -TEXT_ANY=8 -CRLF=9 -'${'=1 -'}'=2 -'$'=3 -' '=4 -'""'=5 -'{'=6 +STRICT_VAR=1 +SIMPLE_VAR=2 +STR=3 +SPACE=4 +CRLF=5 +ANY=6 diff --git a/gen/valueparser/envlangvalue_base_listener.go b/gen/valueparser/envlangvalue_base_listener.go index 9bbb1c6..52aab0c 100644 --- a/gen/valueparser/envlangvalue_base_listener.go +++ b/gen/valueparser/envlangvalue_base_listener.go @@ -26,48 +26,12 @@ func (s *BaseEnvLangValueListener) EnterDqstring(ctx *DqstringContext) {} // ExitDqstring is called when production dqstring is exited. func (s *BaseEnvLangValueListener) ExitDqstring(ctx *DqstringContext) {} -// EnterStrictVar is called when production strictVar is entered. -func (s *BaseEnvLangValueListener) EnterStrictVar(ctx *StrictVarContext) {} - -// ExitStrictVar is called when production strictVar is exited. -func (s *BaseEnvLangValueListener) ExitStrictVar(ctx *StrictVarContext) {} - -// EnterSimpleVar is called when production simpleVar is entered. -func (s *BaseEnvLangValueListener) EnterSimpleVar(ctx *SimpleVarContext) {} - -// ExitSimpleVar is called when production simpleVar is exited. -func (s *BaseEnvLangValueListener) ExitSimpleVar(ctx *SimpleVarContext) {} - // EnterVariable is called when production variable is entered. func (s *BaseEnvLangValueListener) EnterVariable(ctx *VariableContext) {} // ExitVariable is called when production variable is exited. func (s *BaseEnvLangValueListener) ExitVariable(ctx *VariableContext) {} -// EnterText is called when production text is entered. -func (s *BaseEnvLangValueListener) EnterText(ctx *TextContext) {} - -// ExitText is called when production text is exited. -func (s *BaseEnvLangValueListener) ExitText(ctx *TextContext) {} - -// EnterSpace is called when production space is entered. -func (s *BaseEnvLangValueListener) EnterSpace(ctx *SpaceContext) {} - -// ExitSpace is called when production space is exited. -func (s *BaseEnvLangValueListener) ExitSpace(ctx *SpaceContext) {} - -// EnterDQEscape is called when production dQEscape is entered. -func (s *BaseEnvLangValueListener) EnterDQEscape(ctx *DQEscapeContext) {} - -// ExitDQEscape is called when production dQEscape is exited. -func (s *BaseEnvLangValueListener) ExitDQEscape(ctx *DQEscapeContext) {} - -// EnterSpecial is called when production special is entered. -func (s *BaseEnvLangValueListener) EnterSpecial(ctx *SpecialContext) {} - -// ExitSpecial is called when production special is exited. -func (s *BaseEnvLangValueListener) ExitSpecial(ctx *SpecialContext) {} - // EnterContent is called when production content is entered. func (s *BaseEnvLangValueListener) EnterContent(ctx *ContentContext) {} diff --git a/gen/valueparser/envlangvalue_lexer.go b/gen/valueparser/envlangvalue_lexer.go index 788525a..45e72c0 100644 --- a/gen/valueparser/envlangvalue_lexer.go +++ b/gen/valueparser/envlangvalue_lexer.go @@ -42,37 +42,50 @@ func envlangvaluelexerLexerInit() { staticData.ModeNames = []string{ "DEFAULT_MODE", } - staticData.LiteralNames = []string{ - "", "'${'", "'}'", "'$'", "' '", "'\"\"'", "'{'", - } staticData.SymbolicNames = []string{ - "", "", "", "", "", "", "", "TEXT_NO_SPACE", "TEXT_ANY", "CRLF", + "", "STRICT_VAR", "SIMPLE_VAR", "STR", "SPACE", "CRLF", "ANY", } staticData.RuleNames = []string{ - "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "TEXT_NO_SPACE", "TEXT_ANY", - "CRLF", + "STRICT_VAR", "SIMPLE_VAR", "STR", "SPACE", "CRLF", "FIRST_CHAR", "REST_OF_STRING", + "VAR_ID", "ANY", } staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 0, 9, 44, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, + 4, 0, 6, 76, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 1, 0, 1, 0, 1, - 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, - 6, 1, 6, 1, 7, 1, 7, 1, 8, 3, 8, 39, 8, 8, 1, 8, 1, 8, 3, 8, 43, 8, 8, - 0, 0, 9, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 1, 0, - 2, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 5, 0, 10, 10, 48, 57, 65, 90, - 95, 95, 97, 122, 45, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, - 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, - 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 1, 19, 1, 0, 0, 0, 3, 22, 1, - 0, 0, 0, 5, 24, 1, 0, 0, 0, 7, 26, 1, 0, 0, 0, 9, 28, 1, 0, 0, 0, 11, 31, - 1, 0, 0, 0, 13, 33, 1, 0, 0, 0, 15, 35, 1, 0, 0, 0, 17, 42, 1, 0, 0, 0, - 19, 20, 5, 36, 0, 0, 20, 21, 5, 123, 0, 0, 21, 2, 1, 0, 0, 0, 22, 23, 5, - 125, 0, 0, 23, 4, 1, 0, 0, 0, 24, 25, 5, 36, 0, 0, 25, 6, 1, 0, 0, 0, 26, - 27, 5, 32, 0, 0, 27, 8, 1, 0, 0, 0, 28, 29, 5, 34, 0, 0, 29, 30, 5, 34, - 0, 0, 30, 10, 1, 0, 0, 0, 31, 32, 5, 123, 0, 0, 32, 12, 1, 0, 0, 0, 33, - 34, 7, 0, 0, 0, 34, 14, 1, 0, 0, 0, 35, 36, 7, 1, 0, 0, 36, 16, 1, 0, 0, - 0, 37, 39, 5, 13, 0, 0, 38, 37, 1, 0, 0, 0, 38, 39, 1, 0, 0, 0, 39, 40, - 1, 0, 0, 0, 40, 43, 5, 10, 0, 0, 41, 43, 5, 13, 0, 0, 42, 38, 1, 0, 0, - 0, 42, 41, 1, 0, 0, 0, 43, 18, 1, 0, 0, 0, 3, 0, 38, 42, 0, + 0, 1, 0, 5, 0, 24, 8, 0, 10, 0, 12, 0, 27, 9, 0, 1, 0, 1, 0, 5, 0, 31, + 8, 0, 10, 0, 12, 0, 34, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, + 5, 2, 43, 8, 2, 10, 2, 12, 2, 46, 9, 2, 1, 3, 1, 3, 1, 4, 3, 4, 51, 8, + 4, 1, 4, 1, 4, 3, 4, 55, 8, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 4, 7, 62, + 8, 7, 11, 7, 12, 7, 63, 1, 7, 1, 7, 5, 7, 68, 8, 7, 10, 7, 12, 7, 71, 9, + 7, 3, 7, 73, 8, 7, 1, 8, 1, 8, 0, 0, 9, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, + 0, 13, 0, 15, 0, 17, 6, 1, 0, 6, 2, 0, 9, 9, 32, 32, 8, 0, 10, 10, 13, + 13, 32, 32, 34, 34, 39, 39, 44, 44, 46, 46, 92, 92, 7, 0, 10, 10, 13, 13, + 32, 32, 34, 34, 36, 36, 39, 39, 92, 92, 1, 0, 48, 57, 3, 0, 65, 90, 95, + 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 80, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, + 0, 0, 17, 1, 0, 0, 0, 1, 19, 1, 0, 0, 0, 3, 37, 1, 0, 0, 0, 5, 40, 1, 0, + 0, 0, 7, 47, 1, 0, 0, 0, 9, 54, 1, 0, 0, 0, 11, 56, 1, 0, 0, 0, 13, 58, + 1, 0, 0, 0, 15, 72, 1, 0, 0, 0, 17, 74, 1, 0, 0, 0, 19, 20, 5, 36, 0, 0, + 20, 21, 5, 123, 0, 0, 21, 25, 1, 0, 0, 0, 22, 24, 3, 7, 3, 0, 23, 22, 1, + 0, 0, 0, 24, 27, 1, 0, 0, 0, 25, 23, 1, 0, 0, 0, 25, 26, 1, 0, 0, 0, 26, + 28, 1, 0, 0, 0, 27, 25, 1, 0, 0, 0, 28, 32, 3, 15, 7, 0, 29, 31, 3, 7, + 3, 0, 30, 29, 1, 0, 0, 0, 31, 34, 1, 0, 0, 0, 32, 30, 1, 0, 0, 0, 32, 33, + 1, 0, 0, 0, 33, 35, 1, 0, 0, 0, 34, 32, 1, 0, 0, 0, 35, 36, 5, 125, 0, + 0, 36, 2, 1, 0, 0, 0, 37, 38, 5, 36, 0, 0, 38, 39, 3, 15, 7, 0, 39, 4, + 1, 0, 0, 0, 40, 44, 3, 11, 5, 0, 41, 43, 3, 13, 6, 0, 42, 41, 1, 0, 0, + 0, 43, 46, 1, 0, 0, 0, 44, 42, 1, 0, 0, 0, 44, 45, 1, 0, 0, 0, 45, 6, 1, + 0, 0, 0, 46, 44, 1, 0, 0, 0, 47, 48, 7, 0, 0, 0, 48, 8, 1, 0, 0, 0, 49, + 51, 5, 13, 0, 0, 50, 49, 1, 0, 0, 0, 50, 51, 1, 0, 0, 0, 51, 52, 1, 0, + 0, 0, 52, 55, 5, 10, 0, 0, 53, 55, 5, 13, 0, 0, 54, 50, 1, 0, 0, 0, 54, + 53, 1, 0, 0, 0, 55, 10, 1, 0, 0, 0, 56, 57, 8, 1, 0, 0, 57, 12, 1, 0, 0, + 0, 58, 59, 8, 2, 0, 0, 59, 14, 1, 0, 0, 0, 60, 62, 7, 3, 0, 0, 61, 60, + 1, 0, 0, 0, 62, 63, 1, 0, 0, 0, 63, 61, 1, 0, 0, 0, 63, 64, 1, 0, 0, 0, + 64, 73, 1, 0, 0, 0, 65, 69, 7, 4, 0, 0, 66, 68, 7, 5, 0, 0, 67, 66, 1, + 0, 0, 0, 68, 71, 1, 0, 0, 0, 69, 67, 1, 0, 0, 0, 69, 70, 1, 0, 0, 0, 70, + 73, 1, 0, 0, 0, 71, 69, 1, 0, 0, 0, 72, 61, 1, 0, 0, 0, 72, 65, 1, 0, 0, + 0, 73, 16, 1, 0, 0, 0, 74, 75, 9, 0, 0, 0, 75, 18, 1, 0, 0, 0, 9, 0, 25, + 32, 44, 50, 54, 63, 69, 72, 0, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -113,13 +126,10 @@ func NewEnvLangValueLexer(input antlr.CharStream) *EnvLangValueLexer { // EnvLangValueLexer tokens. const ( - EnvLangValueLexerT__0 = 1 - EnvLangValueLexerT__1 = 2 - EnvLangValueLexerT__2 = 3 - EnvLangValueLexerT__3 = 4 - EnvLangValueLexerT__4 = 5 - EnvLangValueLexerT__5 = 6 - EnvLangValueLexerTEXT_NO_SPACE = 7 - EnvLangValueLexerTEXT_ANY = 8 - EnvLangValueLexerCRLF = 9 + EnvLangValueLexerSTRICT_VAR = 1 + EnvLangValueLexerSIMPLE_VAR = 2 + EnvLangValueLexerSTR = 3 + EnvLangValueLexerSPACE = 4 + EnvLangValueLexerCRLF = 5 + EnvLangValueLexerANY = 6 ) diff --git a/gen/valueparser/envlangvalue_listener.go b/gen/valueparser/envlangvalue_listener.go index cf1c030..62ff0b2 100644 --- a/gen/valueparser/envlangvalue_listener.go +++ b/gen/valueparser/envlangvalue_listener.go @@ -10,54 +10,18 @@ type EnvLangValueListener interface { // EnterDqstring is called when entering the dqstring production. EnterDqstring(c *DqstringContext) - // EnterStrictVar is called when entering the strictVar production. - EnterStrictVar(c *StrictVarContext) - - // EnterSimpleVar is called when entering the simpleVar production. - EnterSimpleVar(c *SimpleVarContext) - // EnterVariable is called when entering the variable production. EnterVariable(c *VariableContext) - // EnterText is called when entering the text production. - EnterText(c *TextContext) - - // EnterSpace is called when entering the space production. - EnterSpace(c *SpaceContext) - - // EnterDQEscape is called when entering the dQEscape production. - EnterDQEscape(c *DQEscapeContext) - - // EnterSpecial is called when entering the special production. - EnterSpecial(c *SpecialContext) - // EnterContent is called when entering the content production. EnterContent(c *ContentContext) // ExitDqstring is called when exiting the dqstring production. ExitDqstring(c *DqstringContext) - // ExitStrictVar is called when exiting the strictVar production. - ExitStrictVar(c *StrictVarContext) - - // ExitSimpleVar is called when exiting the simpleVar production. - ExitSimpleVar(c *SimpleVarContext) - // ExitVariable is called when exiting the variable production. ExitVariable(c *VariableContext) - // ExitText is called when exiting the text production. - ExitText(c *TextContext) - - // ExitSpace is called when exiting the space production. - ExitSpace(c *SpaceContext) - - // ExitDQEscape is called when exiting the dQEscape production. - ExitDQEscape(c *DQEscapeContext) - - // ExitSpecial is called when exiting the special production. - ExitSpecial(c *SpecialContext) - // ExitContent is called when exiting the content production. ExitContent(c *ContentContext) } diff --git a/gen/valueparser/envlangvalue_parser.go b/gen/valueparser/envlangvalue_parser.go index fa6915e..3796c4a 100644 --- a/gen/valueparser/envlangvalue_parser.go +++ b/gen/valueparser/envlangvalue_parser.go @@ -31,47 +31,30 @@ var EnvLangValueParserStaticData struct { func envlangvalueParserInit() { staticData := &EnvLangValueParserStaticData - staticData.LiteralNames = []string{ - "", "'${'", "'}'", "'$'", "' '", "'\"\"'", "'{'", - } staticData.SymbolicNames = []string{ - "", "", "", "", "", "", "", "TEXT_NO_SPACE", "TEXT_ANY", "CRLF", + "", "STRICT_VAR", "SIMPLE_VAR", "STR", "SPACE", "CRLF", "ANY", } staticData.RuleNames = []string{ - "dqstring", "strictVar", "simpleVar", "variable", "text", "space", "dQEscape", - "special", "content", + "dqstring", "variable", "content", } staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 1, 9, 72, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, - 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 1, 0, 5, 0, 20, 8, 0, 10, - 0, 12, 0, 23, 9, 0, 1, 0, 5, 0, 26, 8, 0, 10, 0, 12, 0, 29, 9, 0, 1, 0, - 3, 0, 32, 8, 0, 1, 1, 1, 1, 4, 1, 36, 8, 1, 11, 1, 12, 1, 37, 1, 1, 1, - 1, 1, 2, 1, 2, 4, 2, 44, 8, 2, 11, 2, 12, 2, 45, 1, 3, 1, 3, 3, 3, 50, - 8, 3, 1, 4, 1, 4, 5, 4, 54, 8, 4, 10, 4, 12, 4, 57, 9, 4, 1, 5, 1, 5, 1, - 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 70, 8, 8, 1, 8, - 0, 0, 9, 0, 2, 4, 6, 8, 10, 12, 14, 16, 0, 1, 2, 0, 2, 3, 6, 6, 73, 0, - 21, 1, 0, 0, 0, 2, 33, 1, 0, 0, 0, 4, 41, 1, 0, 0, 0, 6, 49, 1, 0, 0, 0, - 8, 51, 1, 0, 0, 0, 10, 58, 1, 0, 0, 0, 12, 60, 1, 0, 0, 0, 14, 62, 1, 0, - 0, 0, 16, 69, 1, 0, 0, 0, 18, 20, 3, 16, 8, 0, 19, 18, 1, 0, 0, 0, 20, - 23, 1, 0, 0, 0, 21, 19, 1, 0, 0, 0, 21, 22, 1, 0, 0, 0, 22, 31, 1, 0, 0, - 0, 23, 21, 1, 0, 0, 0, 24, 26, 5, 9, 0, 0, 25, 24, 1, 0, 0, 0, 26, 29, - 1, 0, 0, 0, 27, 25, 1, 0, 0, 0, 27, 28, 1, 0, 0, 0, 28, 32, 1, 0, 0, 0, - 29, 27, 1, 0, 0, 0, 30, 32, 5, 0, 0, 1, 31, 27, 1, 0, 0, 0, 31, 30, 1, - 0, 0, 0, 32, 1, 1, 0, 0, 0, 33, 35, 5, 1, 0, 0, 34, 36, 5, 7, 0, 0, 35, - 34, 1, 0, 0, 0, 36, 37, 1, 0, 0, 0, 37, 35, 1, 0, 0, 0, 37, 38, 1, 0, 0, - 0, 38, 39, 1, 0, 0, 0, 39, 40, 5, 2, 0, 0, 40, 3, 1, 0, 0, 0, 41, 43, 5, - 3, 0, 0, 42, 44, 5, 7, 0, 0, 43, 42, 1, 0, 0, 0, 44, 45, 1, 0, 0, 0, 45, - 43, 1, 0, 0, 0, 45, 46, 1, 0, 0, 0, 46, 5, 1, 0, 0, 0, 47, 50, 3, 2, 1, - 0, 48, 50, 3, 4, 2, 0, 49, 47, 1, 0, 0, 0, 49, 48, 1, 0, 0, 0, 50, 7, 1, - 0, 0, 0, 51, 55, 5, 7, 0, 0, 52, 54, 5, 8, 0, 0, 53, 52, 1, 0, 0, 0, 54, - 57, 1, 0, 0, 0, 55, 53, 1, 0, 0, 0, 55, 56, 1, 0, 0, 0, 56, 9, 1, 0, 0, - 0, 57, 55, 1, 0, 0, 0, 58, 59, 5, 4, 0, 0, 59, 11, 1, 0, 0, 0, 60, 61, - 5, 5, 0, 0, 61, 13, 1, 0, 0, 0, 62, 63, 7, 0, 0, 0, 63, 15, 1, 0, 0, 0, - 64, 70, 3, 12, 6, 0, 65, 70, 3, 6, 3, 0, 66, 70, 3, 10, 5, 0, 67, 70, 3, - 14, 7, 0, 68, 70, 3, 8, 4, 0, 69, 64, 1, 0, 0, 0, 69, 65, 1, 0, 0, 0, 69, - 66, 1, 0, 0, 0, 69, 67, 1, 0, 0, 0, 69, 68, 1, 0, 0, 0, 70, 17, 1, 0, 0, - 0, 8, 21, 27, 31, 37, 45, 49, 55, 69, + 4, 1, 6, 36, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 1, 0, 5, 0, 8, 8, 0, 10, + 0, 12, 0, 11, 9, 0, 1, 0, 5, 0, 14, 8, 0, 10, 0, 12, 0, 17, 9, 0, 1, 0, + 5, 0, 20, 8, 0, 10, 0, 12, 0, 23, 9, 0, 1, 0, 3, 0, 26, 8, 0, 1, 1, 1, + 1, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 34, 8, 2, 1, 2, 0, 0, 3, 0, 2, 4, 0, 1, + 1, 0, 1, 2, 40, 0, 9, 1, 0, 0, 0, 2, 27, 1, 0, 0, 0, 4, 33, 1, 0, 0, 0, + 6, 8, 3, 4, 2, 0, 7, 6, 1, 0, 0, 0, 8, 11, 1, 0, 0, 0, 9, 7, 1, 0, 0, 0, + 9, 10, 1, 0, 0, 0, 10, 25, 1, 0, 0, 0, 11, 9, 1, 0, 0, 0, 12, 14, 5, 4, + 0, 0, 13, 12, 1, 0, 0, 0, 14, 17, 1, 0, 0, 0, 15, 13, 1, 0, 0, 0, 15, 16, + 1, 0, 0, 0, 16, 26, 1, 0, 0, 0, 17, 15, 1, 0, 0, 0, 18, 20, 5, 5, 0, 0, + 19, 18, 1, 0, 0, 0, 20, 23, 1, 0, 0, 0, 21, 19, 1, 0, 0, 0, 21, 22, 1, + 0, 0, 0, 22, 26, 1, 0, 0, 0, 23, 21, 1, 0, 0, 0, 24, 26, 5, 0, 0, 1, 25, + 15, 1, 0, 0, 0, 25, 21, 1, 0, 0, 0, 25, 24, 1, 0, 0, 0, 26, 1, 1, 0, 0, + 0, 27, 28, 7, 0, 0, 0, 28, 3, 1, 0, 0, 0, 29, 34, 3, 2, 1, 0, 30, 34, 5, + 3, 0, 0, 31, 34, 5, 4, 0, 0, 32, 34, 5, 5, 0, 0, 33, 29, 1, 0, 0, 0, 33, + 30, 1, 0, 0, 0, 33, 31, 1, 0, 0, 0, 33, 32, 1, 0, 0, 0, 34, 5, 1, 0, 0, + 0, 5, 9, 15, 21, 25, 33, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -109,29 +92,20 @@ func NewEnvLangValueParser(input antlr.TokenStream) *EnvLangValueParser { // EnvLangValueParser tokens. const ( - EnvLangValueParserEOF = antlr.TokenEOF - EnvLangValueParserT__0 = 1 - EnvLangValueParserT__1 = 2 - EnvLangValueParserT__2 = 3 - EnvLangValueParserT__3 = 4 - EnvLangValueParserT__4 = 5 - EnvLangValueParserT__5 = 6 - EnvLangValueParserTEXT_NO_SPACE = 7 - EnvLangValueParserTEXT_ANY = 8 - EnvLangValueParserCRLF = 9 + EnvLangValueParserEOF = antlr.TokenEOF + EnvLangValueParserSTRICT_VAR = 1 + EnvLangValueParserSIMPLE_VAR = 2 + EnvLangValueParserSTR = 3 + EnvLangValueParserSPACE = 4 + EnvLangValueParserCRLF = 5 + EnvLangValueParserANY = 6 ) // EnvLangValueParser rules. const ( - EnvLangValueParserRULE_dqstring = 0 - EnvLangValueParserRULE_strictVar = 1 - EnvLangValueParserRULE_simpleVar = 2 - EnvLangValueParserRULE_variable = 3 - EnvLangValueParserRULE_text = 4 - EnvLangValueParserRULE_space = 5 - EnvLangValueParserRULE_dQEscape = 6 - EnvLangValueParserRULE_special = 7 - EnvLangValueParserRULE_content = 8 + EnvLangValueParserRULE_dqstring = 0 + EnvLangValueParserRULE_variable = 1 + EnvLangValueParserRULE_content = 2 ) // IDqstringContext is an interface to support dynamic dispatch. @@ -145,6 +119,8 @@ type IDqstringContext interface { EOF() antlr.TerminalNode AllContent() []IContentContext Content(i int) IContentContext + AllSPACE() []antlr.TerminalNode + SPACE(i int) antlr.TerminalNode AllCRLF() []antlr.TerminalNode CRLF(i int) antlr.TerminalNode @@ -229,6 +205,14 @@ func (s *DqstringContext) Content(i int) IContentContext { return t.(IContentContext) } +func (s *DqstringContext) AllSPACE() []antlr.TerminalNode { + return s.GetTokens(EnvLangValueParserSPACE) +} + +func (s *DqstringContext) SPACE(i int) antlr.TerminalNode { + return s.GetToken(EnvLangValueParserSPACE, i) +} + func (s *DqstringContext) AllCRLF() []antlr.TerminalNode { return s.GetTokens(EnvLangValueParserCRLF) } @@ -262,36 +246,71 @@ func (p *EnvLangValueParser) Dqstring() (localctx IDqstringContext) { p.EnterRule(localctx, 0, EnvLangValueParserRULE_dqstring) var _la int + var _alt int + p.EnterOuterAlt(localctx, 1) - p.SetState(21) + p.SetState(9) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _la = p.GetTokenStream().LA(1) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 0, p.GetParserRuleContext()) + if p.HasError() { + goto errorExit + } + for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { + if _alt == 1 { + { + p.SetState(6) + p.Content() + } - for (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&254) != 0 { - { - p.SetState(18) - p.Content() } - - p.SetState(23) + p.SetState(11) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _la = p.GetTokenStream().LA(1) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 0, p.GetParserRuleContext()) + if p.HasError() { + goto errorExit + } } - p.SetState(31) + p.SetState(25) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 2, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 3, p.GetParserRuleContext()) { case 1: - p.SetState(27) + p.SetState(15) + p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } + _la = p.GetTokenStream().LA(1) + + for _la == EnvLangValueParserSPACE { + { + p.SetState(12) + p.Match(EnvLangValueParserSPACE) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + + p.SetState(17) + p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } + _la = p.GetTokenStream().LA(1) + } + + case 2: + p.SetState(21) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -300,7 +319,7 @@ func (p *EnvLangValueParser) Dqstring() (localctx IDqstringContext) { for _la == EnvLangValueParserCRLF { { - p.SetState(24) + p.SetState(18) p.Match(EnvLangValueParserCRLF) if p.HasError() { // Recognition error - abort rule @@ -308,7 +327,7 @@ func (p *EnvLangValueParser) Dqstring() (localctx IDqstringContext) { } } - p.SetState(29) + p.SetState(23) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -316,9 +335,9 @@ func (p *EnvLangValueParser) Dqstring() (localctx IDqstringContext) { _la = p.GetTokenStream().LA(1) } - case 2: + case 3: { - p.SetState(30) + p.SetState(24) p.Match(EnvLangValueParserEOF) if p.HasError() { // Recognition error - abort rule @@ -343,258 +362,114 @@ errorExit: goto errorExit // Trick to prevent compiler error if the label is not used } -// IStrictVarContext is an interface to support dynamic dispatch. -type IStrictVarContext interface { +// IVariableContext is an interface to support dynamic dispatch. +type IVariableContext interface { antlr.ParserRuleContext // GetParser returns the parser. GetParser() antlr.Parser + // GetVar_ returns the var_ token. + GetVar_() antlr.Token + + // SetVar_ sets the var_ token. + SetVar_(antlr.Token) + // Getter signatures - AllTEXT_NO_SPACE() []antlr.TerminalNode - TEXT_NO_SPACE(i int) antlr.TerminalNode + STRICT_VAR() antlr.TerminalNode + SIMPLE_VAR() antlr.TerminalNode - // IsStrictVarContext differentiates from other interfaces. - IsStrictVarContext() + // IsVariableContext differentiates from other interfaces. + IsVariableContext() } -type StrictVarContext struct { +type VariableContext struct { antlr.BaseParserRuleContext parser antlr.Parser + var_ antlr.Token } -func NewEmptyStrictVarContext() *StrictVarContext { - var p = new(StrictVarContext) +func NewEmptyVariableContext() *VariableContext { + var p = new(VariableContext) antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) - p.RuleIndex = EnvLangValueParserRULE_strictVar + p.RuleIndex = EnvLangValueParserRULE_variable return p } -func InitEmptyStrictVarContext(p *StrictVarContext) { +func InitEmptyVariableContext(p *VariableContext) { antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) - p.RuleIndex = EnvLangValueParserRULE_strictVar + p.RuleIndex = EnvLangValueParserRULE_variable } -func (*StrictVarContext) IsStrictVarContext() {} +func (*VariableContext) IsVariableContext() {} -func NewStrictVarContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *StrictVarContext { - var p = new(StrictVarContext) +func NewVariableContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *VariableContext { + var p = new(VariableContext) antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) p.parser = parser - p.RuleIndex = EnvLangValueParserRULE_strictVar + p.RuleIndex = EnvLangValueParserRULE_variable return p } -func (s *StrictVarContext) GetParser() antlr.Parser { return s.parser } +func (s *VariableContext) GetParser() antlr.Parser { return s.parser } + +func (s *VariableContext) GetVar_() antlr.Token { return s.var_ } -func (s *StrictVarContext) AllTEXT_NO_SPACE() []antlr.TerminalNode { - return s.GetTokens(EnvLangValueParserTEXT_NO_SPACE) +func (s *VariableContext) SetVar_(v antlr.Token) { s.var_ = v } + +func (s *VariableContext) STRICT_VAR() antlr.TerminalNode { + return s.GetToken(EnvLangValueParserSTRICT_VAR, 0) } -func (s *StrictVarContext) TEXT_NO_SPACE(i int) antlr.TerminalNode { - return s.GetToken(EnvLangValueParserTEXT_NO_SPACE, i) +func (s *VariableContext) SIMPLE_VAR() antlr.TerminalNode { + return s.GetToken(EnvLangValueParserSIMPLE_VAR, 0) } -func (s *StrictVarContext) GetRuleContext() antlr.RuleContext { +func (s *VariableContext) GetRuleContext() antlr.RuleContext { return s } -func (s *StrictVarContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { +func (s *VariableContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { return antlr.TreesStringTree(s, ruleNames, recog) } -func (s *StrictVarContext) EnterRule(listener antlr.ParseTreeListener) { +func (s *VariableContext) EnterRule(listener antlr.ParseTreeListener) { if listenerT, ok := listener.(EnvLangValueListener); ok { - listenerT.EnterStrictVar(s) + listenerT.EnterVariable(s) } } -func (s *StrictVarContext) ExitRule(listener antlr.ParseTreeListener) { +func (s *VariableContext) ExitRule(listener antlr.ParseTreeListener) { if listenerT, ok := listener.(EnvLangValueListener); ok { - listenerT.ExitStrictVar(s) + listenerT.ExitVariable(s) } } -func (p *EnvLangValueParser) StrictVar() (localctx IStrictVarContext) { - localctx = NewStrictVarContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 2, EnvLangValueParserRULE_strictVar) +func (p *EnvLangValueParser) Variable() (localctx IVariableContext) { + localctx = NewVariableContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 2, EnvLangValueParserRULE_variable) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(33) - p.Match(EnvLangValueParserT__0) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - p.SetState(35) - p.GetErrorHandler().Sync(p) - if p.HasError() { - goto errorExit - } - _la = p.GetTokenStream().LA(1) - - for ok := true; ok; ok = _la == EnvLangValueParserTEXT_NO_SPACE { - { - p.SetState(34) - p.Match(EnvLangValueParserTEXT_NO_SPACE) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - - p.SetState(37) - p.GetErrorHandler().Sync(p) - if p.HasError() { - goto errorExit - } - _la = p.GetTokenStream().LA(1) - } - { - p.SetState(39) - p.Match(EnvLangValueParserT__1) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - -errorExit: - if p.HasError() { - v := p.GetError() - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - p.SetError(nil) - } - p.ExitRule() - return localctx - goto errorExit // Trick to prevent compiler error if the label is not used -} - -// ISimpleVarContext is an interface to support dynamic dispatch. -type ISimpleVarContext interface { - antlr.ParserRuleContext - - // GetParser returns the parser. - GetParser() antlr.Parser - - // Getter signatures - AllTEXT_NO_SPACE() []antlr.TerminalNode - TEXT_NO_SPACE(i int) antlr.TerminalNode - - // IsSimpleVarContext differentiates from other interfaces. - IsSimpleVarContext() -} - -type SimpleVarContext struct { - antlr.BaseParserRuleContext - parser antlr.Parser -} - -func NewEmptySimpleVarContext() *SimpleVarContext { - var p = new(SimpleVarContext) - antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) - p.RuleIndex = EnvLangValueParserRULE_simpleVar - return p -} - -func InitEmptySimpleVarContext(p *SimpleVarContext) { - antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) - p.RuleIndex = EnvLangValueParserRULE_simpleVar -} - -func (*SimpleVarContext) IsSimpleVarContext() {} - -func NewSimpleVarContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *SimpleVarContext { - var p = new(SimpleVarContext) - - antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) - - p.parser = parser - p.RuleIndex = EnvLangValueParserRULE_simpleVar - - return p -} - -func (s *SimpleVarContext) GetParser() antlr.Parser { return s.parser } - -func (s *SimpleVarContext) AllTEXT_NO_SPACE() []antlr.TerminalNode { - return s.GetTokens(EnvLangValueParserTEXT_NO_SPACE) -} - -func (s *SimpleVarContext) TEXT_NO_SPACE(i int) antlr.TerminalNode { - return s.GetToken(EnvLangValueParserTEXT_NO_SPACE, i) -} - -func (s *SimpleVarContext) GetRuleContext() antlr.RuleContext { - return s -} - -func (s *SimpleVarContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { - return antlr.TreesStringTree(s, ruleNames, recog) -} - -func (s *SimpleVarContext) EnterRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(EnvLangValueListener); ok { - listenerT.EnterSimpleVar(s) - } -} + p.SetState(27) -func (s *SimpleVarContext) ExitRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(EnvLangValueListener); ok { - listenerT.ExitSimpleVar(s) - } -} + var _lt = p.GetTokenStream().LT(1) -func (p *EnvLangValueParser) SimpleVar() (localctx ISimpleVarContext) { - localctx = NewSimpleVarContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 4, EnvLangValueParserRULE_simpleVar) - var _alt int + localctx.(*VariableContext).var_ = _lt - p.EnterOuterAlt(localctx, 1) - { - p.SetState(41) - p.Match(EnvLangValueParserT__2) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - p.SetState(43) - p.GetErrorHandler().Sync(p) - if p.HasError() { - goto errorExit - } - _alt = 1 - for ok := true; ok; ok = _alt != 2 && _alt != antlr.ATNInvalidAltNumber { - switch _alt { - case 1: - { - p.SetState(42) - p.Match(EnvLangValueParserTEXT_NO_SPACE) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } + _la = p.GetTokenStream().LA(1) - default: - p.SetError(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) - goto errorExit - } + if !(_la == EnvLangValueParserSTRICT_VAR || _la == EnvLangValueParserSIMPLE_VAR) { + var _ri = p.GetErrorHandler().RecoverInline(p) - p.SetState(45) - p.GetErrorHandler().Sync(p) - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 4, p.GetParserRuleContext()) - if p.HasError() { - goto errorExit + localctx.(*VariableContext).var_ = _ri + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() } } @@ -611,57 +486,59 @@ errorExit: goto errorExit // Trick to prevent compiler error if the label is not used } -// IVariableContext is an interface to support dynamic dispatch. -type IVariableContext interface { +// IContentContext is an interface to support dynamic dispatch. +type IContentContext interface { antlr.ParserRuleContext // GetParser returns the parser. GetParser() antlr.Parser // Getter signatures - StrictVar() IStrictVarContext - SimpleVar() ISimpleVarContext + Variable() IVariableContext + STR() antlr.TerminalNode + SPACE() antlr.TerminalNode + CRLF() antlr.TerminalNode - // IsVariableContext differentiates from other interfaces. - IsVariableContext() + // IsContentContext differentiates from other interfaces. + IsContentContext() } -type VariableContext struct { +type ContentContext struct { antlr.BaseParserRuleContext parser antlr.Parser } -func NewEmptyVariableContext() *VariableContext { - var p = new(VariableContext) +func NewEmptyContentContext() *ContentContext { + var p = new(ContentContext) antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) - p.RuleIndex = EnvLangValueParserRULE_variable + p.RuleIndex = EnvLangValueParserRULE_content return p } -func InitEmptyVariableContext(p *VariableContext) { +func InitEmptyContentContext(p *ContentContext) { antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) - p.RuleIndex = EnvLangValueParserRULE_variable + p.RuleIndex = EnvLangValueParserRULE_content } -func (*VariableContext) IsVariableContext() {} +func (*ContentContext) IsContentContext() {} -func NewVariableContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *VariableContext { - var p = new(VariableContext) +func NewContentContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ContentContext { + var p = new(ContentContext) antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) p.parser = parser - p.RuleIndex = EnvLangValueParserRULE_variable + p.RuleIndex = EnvLangValueParserRULE_content return p } -func (s *VariableContext) GetParser() antlr.Parser { return s.parser } +func (s *ContentContext) GetParser() antlr.Parser { return s.parser } -func (s *VariableContext) StrictVar() IStrictVarContext { +func (s *ContentContext) Variable() IVariableContext { var t antlr.RuleContext for _, ctx := range s.GetChildren() { - if _, ok := ctx.(IStrictVarContext); ok { + if _, ok := ctx.(IVariableContext); ok { t = ctx.(antlr.RuleContext) break } @@ -671,681 +548,93 @@ func (s *VariableContext) StrictVar() IStrictVarContext { return nil } - return t.(IStrictVarContext) + return t.(IVariableContext) } -func (s *VariableContext) SimpleVar() ISimpleVarContext { - var t antlr.RuleContext - for _, ctx := range s.GetChildren() { - if _, ok := ctx.(ISimpleVarContext); ok { - t = ctx.(antlr.RuleContext) - break - } - } +func (s *ContentContext) STR() antlr.TerminalNode { + return s.GetToken(EnvLangValueParserSTR, 0) +} - if t == nil { - return nil - } +func (s *ContentContext) SPACE() antlr.TerminalNode { + return s.GetToken(EnvLangValueParserSPACE, 0) +} - return t.(ISimpleVarContext) +func (s *ContentContext) CRLF() antlr.TerminalNode { + return s.GetToken(EnvLangValueParserCRLF, 0) } -func (s *VariableContext) GetRuleContext() antlr.RuleContext { +func (s *ContentContext) GetRuleContext() antlr.RuleContext { return s } -func (s *VariableContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { +func (s *ContentContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { return antlr.TreesStringTree(s, ruleNames, recog) } -func (s *VariableContext) EnterRule(listener antlr.ParseTreeListener) { +func (s *ContentContext) EnterRule(listener antlr.ParseTreeListener) { if listenerT, ok := listener.(EnvLangValueListener); ok { - listenerT.EnterVariable(s) + listenerT.EnterContent(s) } } -func (s *VariableContext) ExitRule(listener antlr.ParseTreeListener) { +func (s *ContentContext) ExitRule(listener antlr.ParseTreeListener) { if listenerT, ok := listener.(EnvLangValueListener); ok { - listenerT.ExitVariable(s) + listenerT.ExitContent(s) } } -func (p *EnvLangValueParser) Variable() (localctx IVariableContext) { - localctx = NewVariableContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 6, EnvLangValueParserRULE_variable) - p.SetState(49) +func (p *EnvLangValueParser) Content() (localctx IContentContext) { + localctx = NewContentContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 4, EnvLangValueParserRULE_content) + p.SetState(33) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } switch p.GetTokenStream().LA(1) { - case EnvLangValueParserT__0: + case EnvLangValueParserSTRICT_VAR, EnvLangValueParserSIMPLE_VAR: p.EnterOuterAlt(localctx, 1) { - p.SetState(47) - p.StrictVar() + p.SetState(29) + p.Variable() } - case EnvLangValueParserT__2: + case EnvLangValueParserSTR: p.EnterOuterAlt(localctx, 2) { - p.SetState(48) - p.SimpleVar() + p.SetState(30) + p.Match(EnvLangValueParserSTR) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } - default: - p.SetError(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) - goto errorExit - } - -errorExit: - if p.HasError() { - v := p.GetError() - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - p.SetError(nil) - } - p.ExitRule() - return localctx - goto errorExit // Trick to prevent compiler error if the label is not used -} - -// ITextContext is an interface to support dynamic dispatch. -type ITextContext interface { - antlr.ParserRuleContext - - // GetParser returns the parser. - GetParser() antlr.Parser - - // Getter signatures - TEXT_NO_SPACE() antlr.TerminalNode - AllTEXT_ANY() []antlr.TerminalNode - TEXT_ANY(i int) antlr.TerminalNode - - // IsTextContext differentiates from other interfaces. - IsTextContext() -} - -type TextContext struct { - antlr.BaseParserRuleContext - parser antlr.Parser -} - -func NewEmptyTextContext() *TextContext { - var p = new(TextContext) - antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) - p.RuleIndex = EnvLangValueParserRULE_text - return p -} - -func InitEmptyTextContext(p *TextContext) { - antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) - p.RuleIndex = EnvLangValueParserRULE_text -} - -func (*TextContext) IsTextContext() {} - -func NewTextContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *TextContext { - var p = new(TextContext) - - antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) - - p.parser = parser - p.RuleIndex = EnvLangValueParserRULE_text - - return p -} - -func (s *TextContext) GetParser() antlr.Parser { return s.parser } - -func (s *TextContext) TEXT_NO_SPACE() antlr.TerminalNode { - return s.GetToken(EnvLangValueParserTEXT_NO_SPACE, 0) -} - -func (s *TextContext) AllTEXT_ANY() []antlr.TerminalNode { - return s.GetTokens(EnvLangValueParserTEXT_ANY) -} - -func (s *TextContext) TEXT_ANY(i int) antlr.TerminalNode { - return s.GetToken(EnvLangValueParserTEXT_ANY, i) -} - -func (s *TextContext) GetRuleContext() antlr.RuleContext { - return s -} - -func (s *TextContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { - return antlr.TreesStringTree(s, ruleNames, recog) -} - -func (s *TextContext) EnterRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(EnvLangValueListener); ok { - listenerT.EnterText(s) - } -} - -func (s *TextContext) ExitRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(EnvLangValueListener); ok { - listenerT.ExitText(s) - } -} - -func (p *EnvLangValueParser) Text() (localctx ITextContext) { - localctx = NewTextContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 8, EnvLangValueParserRULE_text) - var _la int - - p.EnterOuterAlt(localctx, 1) - { - p.SetState(51) - p.Match(EnvLangValueParserTEXT_NO_SPACE) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - p.SetState(55) - p.GetErrorHandler().Sync(p) - if p.HasError() { - goto errorExit - } - _la = p.GetTokenStream().LA(1) - - for _la == EnvLangValueParserTEXT_ANY { + case EnvLangValueParserSPACE: + p.EnterOuterAlt(localctx, 3) { - p.SetState(52) - p.Match(EnvLangValueParserTEXT_ANY) + p.SetState(31) + p.Match(EnvLangValueParserSPACE) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(57) - p.GetErrorHandler().Sync(p) - if p.HasError() { - goto errorExit - } - _la = p.GetTokenStream().LA(1) - } - -errorExit: - if p.HasError() { - v := p.GetError() - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - p.SetError(nil) - } - p.ExitRule() - return localctx - goto errorExit // Trick to prevent compiler error if the label is not used -} - -// ISpaceContext is an interface to support dynamic dispatch. -type ISpaceContext interface { - antlr.ParserRuleContext - - // GetParser returns the parser. - GetParser() antlr.Parser - // IsSpaceContext differentiates from other interfaces. - IsSpaceContext() -} - -type SpaceContext struct { - antlr.BaseParserRuleContext - parser antlr.Parser -} - -func NewEmptySpaceContext() *SpaceContext { - var p = new(SpaceContext) - antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) - p.RuleIndex = EnvLangValueParserRULE_space - return p -} - -func InitEmptySpaceContext(p *SpaceContext) { - antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) - p.RuleIndex = EnvLangValueParserRULE_space -} - -func (*SpaceContext) IsSpaceContext() {} - -func NewSpaceContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *SpaceContext { - var p = new(SpaceContext) - - antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) - - p.parser = parser - p.RuleIndex = EnvLangValueParserRULE_space - - return p -} - -func (s *SpaceContext) GetParser() antlr.Parser { return s.parser } -func (s *SpaceContext) GetRuleContext() antlr.RuleContext { - return s -} - -func (s *SpaceContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { - return antlr.TreesStringTree(s, ruleNames, recog) -} - -func (s *SpaceContext) EnterRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(EnvLangValueListener); ok { - listenerT.EnterSpace(s) - } -} - -func (s *SpaceContext) ExitRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(EnvLangValueListener); ok { - listenerT.ExitSpace(s) - } -} - -func (p *EnvLangValueParser) Space() (localctx ISpaceContext) { - localctx = NewSpaceContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 10, EnvLangValueParserRULE_space) - p.EnterOuterAlt(localctx, 1) - { - p.SetState(58) - p.Match(EnvLangValueParserT__3) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - -errorExit: - if p.HasError() { - v := p.GetError() - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - p.SetError(nil) - } - p.ExitRule() - return localctx - goto errorExit // Trick to prevent compiler error if the label is not used -} - -// IDQEscapeContext is an interface to support dynamic dispatch. -type IDQEscapeContext interface { - antlr.ParserRuleContext - - // GetParser returns the parser. - GetParser() antlr.Parser - // IsDQEscapeContext differentiates from other interfaces. - IsDQEscapeContext() -} - -type DQEscapeContext struct { - antlr.BaseParserRuleContext - parser antlr.Parser -} - -func NewEmptyDQEscapeContext() *DQEscapeContext { - var p = new(DQEscapeContext) - antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) - p.RuleIndex = EnvLangValueParserRULE_dQEscape - return p -} - -func InitEmptyDQEscapeContext(p *DQEscapeContext) { - antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) - p.RuleIndex = EnvLangValueParserRULE_dQEscape -} - -func (*DQEscapeContext) IsDQEscapeContext() {} - -func NewDQEscapeContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *DQEscapeContext { - var p = new(DQEscapeContext) - - antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) - - p.parser = parser - p.RuleIndex = EnvLangValueParserRULE_dQEscape - - return p -} - -func (s *DQEscapeContext) GetParser() antlr.Parser { return s.parser } -func (s *DQEscapeContext) GetRuleContext() antlr.RuleContext { - return s -} - -func (s *DQEscapeContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { - return antlr.TreesStringTree(s, ruleNames, recog) -} - -func (s *DQEscapeContext) EnterRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(EnvLangValueListener); ok { - listenerT.EnterDQEscape(s) - } -} - -func (s *DQEscapeContext) ExitRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(EnvLangValueListener); ok { - listenerT.ExitDQEscape(s) - } -} - -func (p *EnvLangValueParser) DQEscape() (localctx IDQEscapeContext) { - localctx = NewDQEscapeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 12, EnvLangValueParserRULE_dQEscape) - p.EnterOuterAlt(localctx, 1) - { - p.SetState(60) - p.Match(EnvLangValueParserT__4) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - -errorExit: - if p.HasError() { - v := p.GetError() - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - p.SetError(nil) - } - p.ExitRule() - return localctx - goto errorExit // Trick to prevent compiler error if the label is not used -} - -// ISpecialContext is an interface to support dynamic dispatch. -type ISpecialContext interface { - antlr.ParserRuleContext - - // GetParser returns the parser. - GetParser() antlr.Parser - // IsSpecialContext differentiates from other interfaces. - IsSpecialContext() -} - -type SpecialContext struct { - antlr.BaseParserRuleContext - parser antlr.Parser -} - -func NewEmptySpecialContext() *SpecialContext { - var p = new(SpecialContext) - antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) - p.RuleIndex = EnvLangValueParserRULE_special - return p -} - -func InitEmptySpecialContext(p *SpecialContext) { - antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) - p.RuleIndex = EnvLangValueParserRULE_special -} - -func (*SpecialContext) IsSpecialContext() {} - -func NewSpecialContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *SpecialContext { - var p = new(SpecialContext) - - antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) - - p.parser = parser - p.RuleIndex = EnvLangValueParserRULE_special - - return p -} - -func (s *SpecialContext) GetParser() antlr.Parser { return s.parser } -func (s *SpecialContext) GetRuleContext() antlr.RuleContext { - return s -} - -func (s *SpecialContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { - return antlr.TreesStringTree(s, ruleNames, recog) -} - -func (s *SpecialContext) EnterRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(EnvLangValueListener); ok { - listenerT.EnterSpecial(s) - } -} - -func (s *SpecialContext) ExitRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(EnvLangValueListener); ok { - listenerT.ExitSpecial(s) - } -} - -func (p *EnvLangValueParser) Special() (localctx ISpecialContext) { - localctx = NewSpecialContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 14, EnvLangValueParserRULE_special) - var _la int - - p.EnterOuterAlt(localctx, 1) - { - p.SetState(62) - _la = p.GetTokenStream().LA(1) - - if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&76) != 0) { - p.GetErrorHandler().RecoverInline(p) - } else { - p.GetErrorHandler().ReportMatch(p) - p.Consume() - } - } - -errorExit: - if p.HasError() { - v := p.GetError() - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - p.SetError(nil) - } - p.ExitRule() - return localctx - goto errorExit // Trick to prevent compiler error if the label is not used -} - -// IContentContext is an interface to support dynamic dispatch. -type IContentContext interface { - antlr.ParserRuleContext - - // GetParser returns the parser. - GetParser() antlr.Parser - - // Getter signatures - DQEscape() IDQEscapeContext - Variable() IVariableContext - Space() ISpaceContext - Special() ISpecialContext - Text() ITextContext - - // IsContentContext differentiates from other interfaces. - IsContentContext() -} - -type ContentContext struct { - antlr.BaseParserRuleContext - parser antlr.Parser -} - -func NewEmptyContentContext() *ContentContext { - var p = new(ContentContext) - antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) - p.RuleIndex = EnvLangValueParserRULE_content - return p -} - -func InitEmptyContentContext(p *ContentContext) { - antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) - p.RuleIndex = EnvLangValueParserRULE_content -} - -func (*ContentContext) IsContentContext() {} - -func NewContentContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ContentContext { - var p = new(ContentContext) - - antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) - - p.parser = parser - p.RuleIndex = EnvLangValueParserRULE_content - - return p -} - -func (s *ContentContext) GetParser() antlr.Parser { return s.parser } - -func (s *ContentContext) DQEscape() IDQEscapeContext { - var t antlr.RuleContext - for _, ctx := range s.GetChildren() { - if _, ok := ctx.(IDQEscapeContext); ok { - t = ctx.(antlr.RuleContext) - break - } - } - - if t == nil { - return nil - } - - return t.(IDQEscapeContext) -} - -func (s *ContentContext) Variable() IVariableContext { - var t antlr.RuleContext - for _, ctx := range s.GetChildren() { - if _, ok := ctx.(IVariableContext); ok { - t = ctx.(antlr.RuleContext) - break - } - } - - if t == nil { - return nil - } - - return t.(IVariableContext) -} - -func (s *ContentContext) Space() ISpaceContext { - var t antlr.RuleContext - for _, ctx := range s.GetChildren() { - if _, ok := ctx.(ISpaceContext); ok { - t = ctx.(antlr.RuleContext) - break - } - } - - if t == nil { - return nil - } - - return t.(ISpaceContext) -} - -func (s *ContentContext) Special() ISpecialContext { - var t antlr.RuleContext - for _, ctx := range s.GetChildren() { - if _, ok := ctx.(ISpecialContext); ok { - t = ctx.(antlr.RuleContext) - break - } - } - - if t == nil { - return nil - } - - return t.(ISpecialContext) -} - -func (s *ContentContext) Text() ITextContext { - var t antlr.RuleContext - for _, ctx := range s.GetChildren() { - if _, ok := ctx.(ITextContext); ok { - t = ctx.(antlr.RuleContext) - break - } - } - - if t == nil { - return nil - } - - return t.(ITextContext) -} - -func (s *ContentContext) GetRuleContext() antlr.RuleContext { - return s -} - -func (s *ContentContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { - return antlr.TreesStringTree(s, ruleNames, recog) -} - -func (s *ContentContext) EnterRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(EnvLangValueListener); ok { - listenerT.EnterContent(s) - } -} - -func (s *ContentContext) ExitRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(EnvLangValueListener); ok { - listenerT.ExitContent(s) - } -} - -func (p *EnvLangValueParser) Content() (localctx IContentContext) { - localctx = NewContentContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 16, EnvLangValueParserRULE_content) - p.SetState(69) - p.GetErrorHandler().Sync(p) - if p.HasError() { - goto errorExit - } - - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 7, p.GetParserRuleContext()) { - case 1: - p.EnterOuterAlt(localctx, 1) - { - p.SetState(64) - p.DQEscape() - } - - case 2: - p.EnterOuterAlt(localctx, 2) - { - p.SetState(65) - p.Variable() - } - - case 3: - p.EnterOuterAlt(localctx, 3) - { - p.SetState(66) - p.Space() - } - - case 4: + case EnvLangValueParserCRLF: p.EnterOuterAlt(localctx, 4) { - p.SetState(67) - p.Special() - } - - case 5: - p.EnterOuterAlt(localctx, 5) - { - p.SetState(68) - p.Text() + p.SetState(32) + p.Match(EnvLangValueParserCRLF) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } - case antlr.ATNInvalidAltNumber: + default: + p.SetError(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) goto errorExit } diff --git a/go.mod b/go.mod index f59a019..cb8e650 100644 --- a/go.mod +++ b/go.mod @@ -10,6 +10,6 @@ require ( require ( github.com/google/go-cmp v0.6.0 // indirect - golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3 // indirect - golang.org/x/sys v0.17.0 // indirect + golang.org/x/exp v0.0.0-20240314144324-c7f7c6466f7f // indirect + golang.org/x/sys v0.18.0 // indirect ) diff --git a/go.sum b/go.sum index c0b80fe..decf2bd 100644 --- a/go.sum +++ b/go.sum @@ -12,11 +12,11 @@ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVs github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3 h1:/RIbNt/Zr7rVhIkQhooTxCxFcdWLGIKnZA4IXNFSrvo= -golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08= +golang.org/x/exp v0.0.0-20240314144324-c7f7c6466f7f h1:3CW0unweImhOzd5FmYuRsD4Y4oQFKZIjAnKbjV4WIrw= +golang.org/x/exp v0.0.0-20240314144324-c7f7c6466f7f/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/handlers/filehandler.go b/handlers/filehandler.go index fac3e4d..a5b028a 100644 --- a/handlers/filehandler.go +++ b/handlers/filehandler.go @@ -22,7 +22,7 @@ func NewEnvLangFileListener(d dao.EnvLangDao) *EnvLangFileListener { } } -func (l EnvLangFileListener) GetVariables() map[string]*string { +func (l *EnvLangFileListener) GetVariables() map[string]*string { return l.d.ExportMap() } @@ -30,6 +30,9 @@ func (l *EnvLangFileListener) ExitEntry(c *fileparser.EntryContext) { var valuePtr *string = nil id := strings.TrimSpace(c.Identifier().GetText()) + if id == "" { + return + } hasAssign := true if c.ASSIGN() == nil || c.ASSIGN().GetText() == "" { hasAssign = false @@ -40,9 +43,10 @@ func (l *EnvLangFileListener) ExitEntry(c *fileparser.EntryContext) { } if c.Value() != nil { - v := c.Value().GetText() - switch c.Value().GetOp().GetTokenType() { + v := strings.TrimSpace(c.Value().GetText()) + switch c.Value().GetStr().GetTokenType() { case fileparser.EnvLangFileParserSQSTRING: // Not evaluating variables inside single quoted values + v = v[1 : len(v)-1] // Removing quotes valuePtr = &v case fileparser.EnvLangFileParserDQSTRING: v = v[1 : len(v)-1] // Removing quotes @@ -51,7 +55,7 @@ func (l *EnvLangFileListener) ExitEntry(c *fileparser.EntryContext) { v := GetValue(l.d, v) valuePtr = &v default: - panic(fmt.Sprintf("unexpected op: %s", c.Value().GetOp().GetText())) + panic(fmt.Sprintf("unexpected string: %s", c.Value().GetStr().GetText())) } } diff --git a/handlers/valuehandler.go b/handlers/valuehandler.go index 71b4f0d..89e9331 100644 --- a/handlers/valuehandler.go +++ b/handlers/valuehandler.go @@ -1,100 +1,47 @@ package handlers import ( - "github.com/antlr4-go/antlr/v4" + "strings" + log "github.com/sirupsen/logrus" - "github.com/ulyssessouza/envlang/dao" "github.com/ulyssessouza/envlang/gen/valueparser" ) -var _ valueparser.EnvLangValueListener = &envLangValueListener{} - -type envLangValueListener struct { - valueparser.BaseEnvLangValueListener - - d dao.EnvLangDao - result string -} - -func (l *envLangValueListener) ExitVariable(c *valueparser.VariableContext) { - log.Debugf("ExitVariable: %#v\n", c.GetText()) -} - -func (l *envLangValueListener) ExitStrictVar(c *valueparser.StrictVarContext) { - varName := "" - log.Debugf("ExitStrictVar: %#v\n", c.GetText()) - - logVarName := "\tVarName: '" - for _, t := range c.AllTEXT_NO_SPACE() { - logVarName += t.GetText() - varName += t.GetText() - } - log.Debugln(logVarName + "'") - - varVal, ok := l.d.Get(varName) - if !ok { - v := "" - varVal = &v +func (l *envLangValueListener) ExitDqstring(c *valueparser.DqstringContext) { + fullText := c.GetText() + log.Debugf("ExitDqstring: %s", fullText) + if len(c.GetChildren()) == 0 { + log.Debugf("ExitDqstring in if: %s", c.GetText()) + l.append(c.GetText()) + return } - - l.result += *varVal } -func (l *envLangValueListener) ExitSimpleVar(c *valueparser.SimpleVarContext) { - varName := "" - log.Debugf("ExitSimpleVar: %#v\n", c.GetText()) - - logVarName := "\tVarName: '" - for _, t := range c.AllTEXT_NO_SPACE() { - logVarName += t.GetText() - varName += t.GetText() - } - log.Debugln(logVarName + "'") - - varVal, ok := l.d.Get(varName) - if !ok { - v := "" - varVal = &v +func (l *envLangValueListener) ExitContent(c *valueparser.ContentContext) { + fullText := c.GetText() + log.Debugf("ExitContent: %s", fullText) + if c.Variable() == nil { + l.append(c.GetText()) } - - l.result += *varVal -} - -func (l *envLangValueListener) ExitText(c *valueparser.TextContext) { - log.Debugf("ExitText: %#v\n", c.GetText()) - l.Append(c.GetText()) -} - -func (l *envLangValueListener) ExitSpace(c *valueparser.SpaceContext) { - log.Debugf("ExitSpace: %#v\n", c.GetText()) - l.Append(c.GetText()) -} - -func (l *envLangValueListener) ExitSpecial(c *valueparser.SpecialContext) { - log.Debugf("ExitSpecial: %#v\n", c.GetText()) - l.Append(c.GetText()) -} - -func (l *envLangValueListener) Append(s string) { - l.result += s } -func newEnvLangValueListener(d dao.EnvLangDao) *envLangValueListener { - return &envLangValueListener{ - d: d, +func (l *envLangValueListener) ExitVariable(c *valueparser.VariableContext) { + fullText := c.GetText() + log.Debugf("ExitVariable: %s", fullText) + + vName := "" + var_ := c.GetVar_() + switch var_.GetTokenType() { + case valueparser.EnvLangValueParserSIMPLE_VAR: + vName = var_.GetText()[1:] + case valueparser.EnvLangValueParserSTRICT_VAR: + vName = strings.TrimSpace(var_.GetText()[2 : len(var_.GetText())-1]) + default: + panic("unexpected token: " + var_.GetText()) } -} - -func GetValue(d dao.EnvLangDao, s string) string { - is := antlr.NewInputStream(s) - lexer := valueparser.NewEnvLangValueLexer(is) - stream := antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel) - parser := valueparser.NewEnvLangValueParser(stream) - parser.BuildParseTrees = true - listener := newEnvLangValueListener(d) - antlr.ParseTreeWalkerDefault.Walk(listener, parser.Dqstring()) - result := listener.result - listener.result = "" - return result + value, ok := l.d.Get(vName) + if ok && value != nil { + l.append(*value) + } } diff --git a/handlers/valuehandler_helper.go b/handlers/valuehandler_helper.go new file mode 100644 index 0000000..6033c92 --- /dev/null +++ b/handlers/valuehandler_helper.go @@ -0,0 +1,49 @@ +package handlers + +import ( + "github.com/antlr4-go/antlr/v4" + log "github.com/sirupsen/logrus" + "github.com/ulyssessouza/envlang/dao" + "github.com/ulyssessouza/envlang/gen/valueparser" +) + +var _ valueparser.EnvLangValueListener = &envLangValueListener{} + +type envLangValueListener struct { + valueparser.BaseEnvLangValueListener + + d dao.EnvLangDao + result string +} + +func (l *envLangValueListener) ExitEveryRule(c antlr.ParserRuleContext) { + log.Debugf("ExitEveryRule: %s", c.GetText()) +} + +func (l *envLangValueListener) EnterEveryRule(c antlr.ParserRuleContext) { + log.Debugf("EnterEveryRule: %s", c.GetText()) +} + +func (l *envLangValueListener) append(s string) { + l.result += s +} + +func newEnvLangValueListener(d dao.EnvLangDao) *envLangValueListener { + return &envLangValueListener{ + d: d, + } +} + +func GetValue(d dao.EnvLangDao, s string) string { + is := antlr.NewInputStream(s) + lexer := valueparser.NewEnvLangValueLexer(is) + stream := antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel) + parser := valueparser.NewEnvLangValueParser(stream) + parser.BuildParseTrees = true + listener := newEnvLangValueListener(d) + antlr.ParseTreeWalkerDefault.Walk(listener, parser.Dqstring()) + result := listener.result + listener.result = "" + + return result +}