source: proto/pablo/src/compiler/backend/visitors/StreamFuncVisitor.java @ 2710

Last change on this file since 2710 was 2710, checked in by ksherdy, 6 years ago

General refactoring.

File size: 1.6 KB
Line 
1package compiler.backend.visitors;
2
3import java.util.*;
4
5import ast.*;
6import lexicalAnalyzer.LexicalType;
7import tokens.IdentifierToken;
8import compiler.ast.Accessors;
9import compiler.ast.Generators;
10
11
12//class StreamFuncVisitor(ast.NodeVisitor):
13//    def __init__(self,node):
14//        self.streamFuncNode = {}
15//        self.generic_visit(node)
16//
17//    def visit_FuncDef(self, node):                   
18//        key = node.name[0].upper() + node.name[1:]
19//        self.streamFuncNode[key] = node
20
21public class StreamFuncVisitor {
22   
23    private ASTNode ASTree;
24   
25    public StreamFuncVisitor(ASTNode ASTree) {
26        this.ASTree = ASTree;
27    }
28   
29    public void visit() {
30        StreamFuncVisitor1 visitor = new StreamFuncVisitor1();
31        ASTree.accept(visitor);
32    }   
33       
34        public  Map<String, ASTNode> makeStreamFuncMap() {
35            StreamFuncVisitor1 visitor = new StreamFuncVisitor1();
36                ASTree.accept(visitor);
37                return ((StreamFuncVisitor1)visitor).streamFuncMap();
38        }
39       
40        private  class StreamFuncVisitor1 extends VoidVisitor.Default {
41               
42                private LinkedHashMap<String, ASTNode> streamFuncMap = new LinkedHashMap<String, ASTNode>();
43               
44                public Map<String, ASTNode> streamFuncMap() {
45                        return streamFuncMap;
46                }
47                               
48                public void visitLeave(FuncDefNode node) {
49                                                       
50                        String name = Accessors.funcName(node);
51                        name = Generators.capitalize(name);
52                        IdentifierToken nameToken = IdentifierToken.make(LexicalType.IDENTIFIER, 
53                                                                                node.getToken().getLocation(), 
54                                                                                name);
55                       
56                        Accessors.funcIdentifier(node).setToken(nameToken);
57                        streamFuncMap.put(name, node);                                 
58                       
59                }
60               
61        }
62}
Note: See TracBrowser for help on using the repository browser.