Skip to content

Commit

Permalink
Feat/utf 8 fixes Issue #169 (#170)
Browse files Browse the repository at this point in the history
* added index for viewdoc

* pushing first viewdoc

* Added more formating for viewdoc

* Added goornogo coverage test pipeline

* Lowering minimum coverage by 0.1 % to pass on travis

* change circle-ci to use goornogo

* Merge from upstream

* Now simple names is using Unicodes, hopefuly it covers most user's common letters

* Added example to prove that function name, variable names are now accepting unicode in their identifier.

* A little more test to check rule name and retraction can accept unicode.
newm4n authored Mar 15, 2021
1 parent 436f654 commit e63c3f6
Showing 14 changed files with 1,008 additions and 1,205 deletions.
24 changes: 23 additions & 1 deletion antlr/grulev3.g4
Original file line number Diff line number Diff line change
@@ -183,6 +183,28 @@ fragment X : [xX] ;
fragment Y : [yY] ;
fragment Z : [zZ] ;

fragment ISC : 'A' .. 'Z'
| 'a' .. 'z'
| '\u00C0' .. '\u00D6'
| '\u00D8' .. '\u00F6'
| '\u00F8' .. '\u02FF'
| '\u0370' .. '\u037D'
| '\u037F' .. '\u1FFF'
| '\u200C' .. '\u200D'
| '\u2070' .. '\u218F'
| '\u2C00' .. '\u2FEF'
| '\u3001' .. '\uD7FF'
| '\uF900' .. '\uFDCF'
| '\uFDF0' .. '\uFFFD'
;

fragment IC : ISC
| '0' .. '9'
| '_'
| '\u00B7'
| '\u0300' .. '\u036F'
| '\u203F' .. '\u2040'
;

PLUS : '+' ;
MINUS : '-' ;
@@ -225,7 +247,7 @@ NOTEQUALS : '!=' ;
BITAND : '&';
BITOR : '|';

SIMPLENAME : [a-zA-Z] [a-zA-Z0-9]*;
SIMPLENAME : ISC IC*;

DQUOTA_STRING : '"' ( '\\'. | '""' | ~('"'| '\\') )* '"';
SQUOTA_STRING : '\'' ('\\'. | '\'\'' | ~('\'' | '\\'))* '\'';
Empty file modified antlr/parser/grulev3/grulev3.interp
100755 → 100644
Empty file.
160 changes: 80 additions & 80 deletions antlr/parser/grulev3/grulev3.tokens
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,80 +1,80 @@
T__0=1
PLUS=2
MINUS=3
DIV=4
MUL=5
MOD=6
DOT=7
SEMICOLON=8
LR_BRACE=9
RR_BRACE=10
LR_BRACKET=11
RR_BRACKET=12
LS_BRACKET=13
RS_BRACKET=14
RULE=15
WHEN=16
THEN=17
AND=18
OR=19
TRUE=20
FALSE=21
NIL_LITERAL=22
NEGATION=23
SALIENCE=24
EQUALS=25
ASSIGN=26
PLUS_ASIGN=27
MINUS_ASIGN=28
DIV_ASIGN=29
MUL_ASIGN=30
GT=31
LT=32
GTE=33
LTE=34
NOTEQUALS=35
BITAND=36
BITOR=37
SIMPLENAME=38
DQUOTA_STRING=39
SQUOTA_STRING=40
DECIMAL_FLOAT_LIT=41
DECIMAL_EXPONENT=42
HEX_FLOAT_LIT=43
HEX_EXPONENT=44
DEC_LIT=45
HEX_LIT=46
OCT_LIT=47
SPACE=48
COMMENT=49
LINE_COMMENT=50
','=1
'+'=2
'-'=3
'/'=4
'*'=5
'%'=6
'.'=7
';'=8
'{'=9
'}'=10
'('=11
')'=12
'['=13
']'=14
'&&'=18
'||'=19
'!'=23
'=='=25
'='=26
'+='=27
'-='=28
'/='=29
'*='=30
'>'=31
'<'=32
'>='=33
'<='=34
'!='=35
'&'=36
'|'=37
T__0=1
PLUS=2
MINUS=3
DIV=4
MUL=5
MOD=6
DOT=7
SEMICOLON=8
LR_BRACE=9
RR_BRACE=10
LR_BRACKET=11
RR_BRACKET=12
LS_BRACKET=13
RS_BRACKET=14
RULE=15
WHEN=16
THEN=17
AND=18
OR=19
TRUE=20
FALSE=21
NIL_LITERAL=22
NEGATION=23
SALIENCE=24
EQUALS=25
ASSIGN=26
PLUS_ASIGN=27
MINUS_ASIGN=28
DIV_ASIGN=29
MUL_ASIGN=30
GT=31
LT=32
GTE=33
LTE=34
NOTEQUALS=35
BITAND=36
BITOR=37
SIMPLENAME=38
DQUOTA_STRING=39
SQUOTA_STRING=40
DECIMAL_FLOAT_LIT=41
DECIMAL_EXPONENT=42
HEX_FLOAT_LIT=43
HEX_EXPONENT=44
DEC_LIT=45
HEX_LIT=46
OCT_LIT=47
SPACE=48
COMMENT=49
LINE_COMMENT=50
','=1
'+'=2
'-'=3
'/'=4
'*'=5
'%'=6
'.'=7
';'=8
'{'=9
'}'=10
'('=11
')'=12
'['=13
']'=14
'&&'=18
'||'=19
'!'=23
'=='=25
'='=26
'+='=27
'-='=28
'/='=29
'*='=30
'>'=31
'<'=32
'>='=33
'<='=34
'!='=35
'&'=36
'|'=37
4 changes: 3 additions & 1 deletion antlr/parser/grulev3/grulev3Lexer.interp
100755 → 100644

Large diffs are not rendered by default.

160 changes: 80 additions & 80 deletions antlr/parser/grulev3/grulev3Lexer.tokens
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,80 +1,80 @@
T__0=1
PLUS=2
MINUS=3
DIV=4
MUL=5
MOD=6
DOT=7
SEMICOLON=8
LR_BRACE=9
RR_BRACE=10
LR_BRACKET=11
RR_BRACKET=12
LS_BRACKET=13
RS_BRACKET=14
RULE=15
WHEN=16
THEN=17
AND=18
OR=19
TRUE=20
FALSE=21
NIL_LITERAL=22
NEGATION=23
SALIENCE=24
EQUALS=25
ASSIGN=26
PLUS_ASIGN=27
MINUS_ASIGN=28
DIV_ASIGN=29
MUL_ASIGN=30
GT=31
LT=32
GTE=33
LTE=34
NOTEQUALS=35
BITAND=36
BITOR=37
SIMPLENAME=38
DQUOTA_STRING=39
SQUOTA_STRING=40
DECIMAL_FLOAT_LIT=41
DECIMAL_EXPONENT=42
HEX_FLOAT_LIT=43
HEX_EXPONENT=44
DEC_LIT=45
HEX_LIT=46
OCT_LIT=47
SPACE=48
COMMENT=49
LINE_COMMENT=50
','=1
'+'=2
'-'=3
'/'=4
'*'=5
'%'=6
'.'=7
';'=8
'{'=9
'}'=10
'('=11
')'=12
'['=13
']'=14
'&&'=18
'||'=19
'!'=23
'=='=25
'='=26
'+='=27
'-='=28
'/='=29
'*='=30
'>'=31
'<'=32
'>='=33
'<='=34
'!='=35
'&'=36
'|'=37
T__0=1
PLUS=2
MINUS=3
DIV=4
MUL=5
MOD=6
DOT=7
SEMICOLON=8
LR_BRACE=9
RR_BRACE=10
LR_BRACKET=11
RR_BRACKET=12
LS_BRACKET=13
RS_BRACKET=14
RULE=15
WHEN=16
THEN=17
AND=18
OR=19
TRUE=20
FALSE=21
NIL_LITERAL=22
NEGATION=23
SALIENCE=24
EQUALS=25
ASSIGN=26
PLUS_ASIGN=27
MINUS_ASIGN=28
DIV_ASIGN=29
MUL_ASIGN=30
GT=31
LT=32
GTE=33
LTE=34
NOTEQUALS=35
BITAND=36
BITOR=37
SIMPLENAME=38
DQUOTA_STRING=39
SQUOTA_STRING=40
DECIMAL_FLOAT_LIT=41
DECIMAL_EXPONENT=42
HEX_FLOAT_LIT=43
HEX_EXPONENT=44
DEC_LIT=45
HEX_LIT=46
OCT_LIT=47
SPACE=48
COMMENT=49
LINE_COMMENT=50
','=1
'+'=2
'-'=3
'/'=4
'*'=5
'%'=6
'.'=7
';'=8
'{'=9
'}'=10
'('=11
')'=12
'['=13
']'=14
'&&'=18
'||'=19
'!'=23
'=='=25
'='=26
'+='=27
'-='=28
'/='=29
'*='=30
'>'=31
'<'=32
'>='=33
'<='=34
'!='=35
'&'=36
'|'=37
2 changes: 1 addition & 1 deletion antlr/parser/grulev3/grulev3_base_listener.go
100755 → 100644

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

140 changes: 0 additions & 140 deletions antlr/parser/grulev3/grulev3_base_visitor.go

This file was deleted.

579 changes: 293 additions & 286 deletions antlr/parser/grulev3/grulev3_lexer.go
100755 → 100644

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion antlr/parser/grulev3/grulev3_listener.go
100755 → 100644
959 changes: 454 additions & 505 deletions antlr/parser/grulev3/grulev3_parser.go
100755 → 100644

Large diffs are not rendered by default.

108 changes: 0 additions & 108 deletions antlr/parser/grulev3/grulev3_visitor.go

This file was deleted.

63 changes: 63 additions & 0 deletions examples/UnicodeRule_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package examples

import (
"fmt"
"github.com/hyperjumptech/grule-rule-engine/ast"
"github.com/hyperjumptech/grule-rule-engine/builder"
"github.com/hyperjumptech/grule-rule-engine/engine"
"github.com/hyperjumptech/grule-rule-engine/pkg"
"github.com/stretchr/testify/assert"
"testing"
"time"
)

type MyḞact struct {
IntAttribute int64
StringǍttribute string
BooleanAttribute bool
ḞloatAttribute float64
TimeAttribute time.Time
WhatToSay string
}

func (mf *MyḞact) GetẀhatToSay(sentence string) string {
return fmt.Sprintf("Let say \"%s\"", sentence)
}

func TestUnicodeTutorial(t *testing.T) {
myFact := &MyḞact{
IntAttribute: 123,
StringǍttribute: "Some string vǍlue",
BooleanAttribute: true,
ḞloatAttribute: 1.234,
TimeAttribute: time.Now(),
}
dataCtx := ast.NewDataContext()
err := dataCtx.Add("MḞ", myFact)
assert.NoError(t, err)

// Prepare knowledgebase library and load it with our rule.
knowledgeLibrary := ast.NewKnowledgeLibrary()
ruleBuilder := builder.NewRuleBuilder(knowledgeLibrary)

drls := `
rule ChĕckValuĕs "Check the default values" salience 10 {
when
MḞ.IntAttribute == 123 && MḞ.StringǍttribute == "Some string vǍlue"
then
MḞ.WhatToSay = MḞ.GetẀhatToSay("HellǑ Grule");
Retract("ChĕckValuĕs");
}
`
byteArr := pkg.NewBytesResource([]byte(drls))
err = ruleBuilder.BuildRuleFromResource("Tutorial", "0.0.1", byteArr)
assert.NoError(t, err)

knowledgeBase := knowledgeLibrary.NewKnowledgeBaseInstance("Tutorial", "0.0.1")

engine := engine.NewGruleEngine()
err = engine.Execute(dataCtx, knowledgeBase)
assert.NoError(t, err)
assert.Equal(t, "Let say \"HellǑ Grule\"", myFact.WhatToSay)
println(myFact.WhatToSay)
}
5 changes: 3 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
@@ -8,15 +8,16 @@ require (
github.com/golang/mock v1.4.3
github.com/google/uuid v1.1.1
github.com/imkira/go-observer v1.0.3
github.com/konsorten/go-windows-terminal-sequences v1.0.3 // indirect
github.com/kr/pretty v0.2.1 // indirect
github.com/newm4n/goornogo v1.0.1 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/sergi/go-diff v1.1.0 // indirect
github.com/sirupsen/logrus v1.6.0
github.com/sirupsen/logrus v1.8.1
github.com/stretchr/testify v1.6.1
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de // indirect
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 // indirect
golang.org/x/tools v0.0.0-20210114065538-d78b04bdf963 // indirect
golang.org/x/tools v0.1.0 // indirect
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect
gopkg.in/src-d/go-billy.v4 v4.3.2
gopkg.in/src-d/go-git.v4 v4.13.1
7 changes: 7 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -68,6 +68,8 @@ github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4=
github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -125,13 +127,16 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4 h1:sfkvUWPNGwSV+8/fNqctR5lS2AqCSqYwXdrjCxp/dXo=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed h1:J22ig1FUekjjkmZUM7pTKixYm8DvrYsvrBZdunYeIuQ=
golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
@@ -172,6 +177,8 @@ golang.org/x/tools v0.0.0-20201229221835-b8413747bbd4 h1:oy2nvUJn52tUNTQ5hMOyc/N
golang.org/x/tools v0.0.0-20201229221835-b8413747bbd4/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210114065538-d78b04bdf963 h1:K+NlvTLy0oONtRtkl1jRD9xIhnItbG2PiE7YOdjPb+k=
golang.org/x/tools v0.0.0-20210114065538-d78b04bdf963/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

0 comments on commit e63c3f6

Please sign in to comment.