Skip to content

Commit

Permalink
Попытка фикса поиска переиспользуемых блоков.
Browse files Browse the repository at this point in the history
  • Loading branch information
xtoter committed Mar 2, 2024
1 parent bdcc28c commit 30c24dc
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 17 deletions.
Binary file modified bin/refalLint
Binary file not shown.
2 changes: 2 additions & 0 deletions src/lexer/lexer.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ func (l lexer) NewSymbol(symb rune, EOF bool) symbol {
if symb == '\n' {
l.info.Pos.Row = 0
l.info.Pos.Column++
} else if symb == '\t' {
l.info.Pos.Row += 2
} else {
l.info.Pos.Row++
}
Expand Down
2 changes: 1 addition & 1 deletion src/linter/linter.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ func LintFile(filePath string, results chan<- Result, wg *sync.WaitGroup) {
logs2 := psr.Checks()
out = append(out, logs2...)
node = node
out = append(out, tree.CheckTreeRec(node)...)
out = append(out, tree.CheckTreeRecFromSentence(node)...)
// После проверки отправляем результат в канал
results <- Result{FilePath: filePath, Success: true, Logs: out}
}
Expand Down
63 changes: 48 additions & 15 deletions src/tree/checkTree.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,38 @@ func findNonNestedCoords(in []forCheckTreeRec) []logger.Log {
}
return logs
}
func CheckTreeRecFromSentence(elem *treeElem) []logger.Log {
var forCheck []forCheckTreeRec
sentences, _ := CollectTreeSentenceRec(elem)
for _, snts := range sentences {
forCheck = append(forCheck, CheckTreeRec(snts.elem)...)
}
return findNonNestedCoords(forCheck)
}
func CollectTreeSentenceRec(elem *treeElem) ([]checkTree, int) {
var out []checkTree
i := 0
for _, child := range elem.child {
if child != nil {
nodes, deep := CollectTreeSentenceRec(child)
out = append(out, nodes...)
if deep > i {
i = deep
}

func CheckTreeRec(elem *treeElem) []logger.Log {
}
}
if len(out) == 0 && elem.typeEl == "SentFunc" {
out = append(out, checkTree{
elem: elem,
deep: i + 1,
})
}
return out, i + 1
}

// надо идти от каждого Sentence
func CheckTreeRec(elem *treeElem) []forCheckTreeRec {
var forCheck []forCheckTreeRec
collection, _ := CollectTreeRec(elem)
if len(collection) == 0 {
Expand All @@ -117,24 +147,27 @@ func CheckTreeRec(elem *treeElem) []logger.Log {
combinations := generateUniqueCombinations(len(collection) - 1)

for _, comb := range combinations {
if r := checkTreeRecBool(collection[comb.a].elem, collection[comb.b].elem); r {
if collection[comb.b].deep > int(config.BlockLen) {
forCheck = append(forCheck, forCheckTreeRec{
first: сoords{
Start: collection[comb.a].elem.start,
End: collection[comb.a].elem.finish,
},
second: сoords{
Start: collection[comb.b].elem.start,
End: collection[comb.b].elem.finish,
},
deep: collection[comb.a].deep,
})
if (collection[comb.a].elem.typeEl == PatternExprTerm || collection[comb.a].elem.typeEl == PatternExpr) &&
(collection[comb.b].elem.typeEl == ResultExpr || collection[comb.b].elem.typeEl == ResultExprTerm) {
if r := checkTreeRecBool(collection[comb.a].elem, collection[comb.b].elem); r {
if collection[comb.b].deep > int(config.BlockLen) {
forCheck = append(forCheck, forCheckTreeRec{
first: сoords{
Start: collection[comb.a].elem.start,
End: collection[comb.a].elem.finish,
},
second: сoords{
Start: collection[comb.b].elem.start,
End: collection[comb.b].elem.finish,
},
deep: collection[comb.a].deep,
})
}
}
}
}

return findNonNestedCoords(forCheck)
return forCheck
}

type checkTree struct {
Expand Down
1 change: 1 addition & 0 deletions src/tree/elem.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ var (
Conditions ElemType = "Conditions"
RightSentencePart ElemType = "RightSentencePart"
ResultExpr ElemType = "ResultExpr"
ResultExprTerm ElemType = "ResultExprTerm"
PatternExprTerm ElemType = "PatternExprTerm"
STRING ElemType = "STRING"
INTEGER ElemType = "INTEGER"
Expand Down
14 changes: 13 additions & 1 deletion src/tree/tree.go
Original file line number Diff line number Diff line change
Expand Up @@ -248,13 +248,25 @@ func (p *Parser) parseFunc() (*treeElem, error) {
return ast, nil
}

func (p *Parser) parseFuncCore() (*treeElem, error) {
func (p *Parser) parseFuncCore1() (*treeElem, error) {
node, err := p.parseSentence()
if err != nil {
return nil, err
}
return node, nil
}
func (p *Parser) parseFuncCore() (*treeElem, error) {
tkn0 := p.getCurTkn()
ast := &treeElem{typeEl: "SentFunc", start: tkn0.Start}
node, err := p.parseSentence()
ast.child = append(ast.child, node)
if err != nil {
return nil, err
}
tkn1 := p.getCurTkn()
ast.finish = tkn1.Start
return ast, nil
}
func (p *Parser) parseSentence() (*treeElem, error) {
tkn0 := p.getCurTkn()
ast := &treeElem{typeEl: Sentence, start: tkn0.Start}
Expand Down

0 comments on commit 30c24dc

Please sign in to comment.