source: proto/s2k/trunk/framework/src/s2k/lexicalAnalyzer/Lextant.java @ 3767

Last change on this file since 3767 was 3767, checked in by ksherdy, 4 years ago

Replaced function keyword with filter.

File size: 2.8 KB
Line 
1// DO NOT MODIFY
2//
3// This code is generated by the scatter parser-generator
4// Any modifications will be lost next time scatter is run.
5//
6
7package s2k.lexicalAnalyzer;
8
9import java.util.ArrayList;
10import java.util.HashMap;
11import java.util.HashSet;
12import java.util.List;
13import java.util.Map;
14import java.util.Set;
15
16import s2k.lexicalAnalyzer.lextantRecognitionAids.LexemeMap;
17import s2k.lexicalAnalyzer.lextantRecognitionAids.PunctuatorScanningAids;
18
19public enum Lextant {
20        TERMINATOR(";", "main"),
21        DOT(".", "main"),
22        MULTIPLY("*", "main"),
23        LROUND("(", "main"),
24        OR("|", "main"),
25        ADD("+", "main"),
26        ADD_ASSIGN("+=", "main"),
27        AND_ASSIGN("&=", "main"),
28        NOT("~", "main"),
29        MULTIPLY_ASSIGN("*=", "main"),
30        LANGLE("<", "main"),
31        SUBTRACT("-", "main"),
32        ASSIGN("=", "main"),
33        XOR("^", "main"),
34        XOR_ASSIGN("^=", "main"),
35        STRUCT("struct", "main"),
36        OR_ASSIGN("|=", "main"),
37        INT("int", "main"),
38        IF("if", "main"),
39        WHILE("while", "main"),
40        FILTER("filter", "main"),
41        RETURN("return", "main"),
42        DIVIDE_ASSIGN("/=", "main"),
43        ELSE("else", "main"),
44        LCURLY("{", "main"),
45        AND("&", "main"),
46        RROUND(")", "main"),
47        DIVIDE("/", "main"),
48        RCURLY("}", "main"),
49        RANGLE(">", "main"),
50        SUBTRACT_ASSIGN("-=", "main"),
51        COMMA(",", "main"),
52        STREAM("stream", "main"),
53
54       
55        NULL_LEXTANT("", "main");
56       
57        private static Map<String, LexemeMap> lexemeMaps;
58        private static Set<String> allContexts;
59        private class Entry {
60                String lexeme;
61                String context;
62        };
63        private Entry[] entries;
64       
65        private Lextant(String... flatEntries) {
66                assert(flatEntries.length > 0);
67                assert(flatEntries.length % 2 == 0);
68               
69                entries = new Entry[flatEntries.length / 2];
70                for(int i=0;i<flatEntries.length;i+=2) {
71                        entries[i/2] = new Entry();
72                        entries[i/2].lexeme = flatEntries[i];
73                        entries[i/2].context = flatEntries[i+1];
74                }
75        }
76        static {
77                findAllContexts();
78
79                lexemeMaps = new HashMap<String, LexemeMap>();
80                for(String context: allContexts) {     
81                        lexemeMaps.put(context, new LexemeMap(values(), Lextant.NULL_LEXTANT, context));
82                }
83               
84                for(String context: allContexts) {
85                        new PunctuatorScanningAids(context);   
86                }
87        }
88       
89        private static void findAllContexts() {
90                allContexts = new HashSet<String>();
91                for(Lextant lextant: values()) {
92                        for(Entry entry: lextant.entries) {
93                                allContexts.add(entry.context);
94                        }
95                }
96//              System.out.println("All contexts: " + allContexts);
97        }
98
99       
100        public String getPrimaryLexeme() {
101                return entries[0].lexeme;
102        }
103        public List<String> getLexemes(String context) {
104                List<String> result = new ArrayList<String>();
105                for(Entry entry: entries) {
106                        if(entry.context.equals(context)) {
107                                result.add(entry.lexeme);
108                        }
109                }
110                return result;
111        }
112       
113        public static Lextant forLexeme(String lexeme, String context) {
114                return lexemeMaps.get(context).forLexeme(lexeme);
115        }
116        public static boolean isALextant(String lexeme, String context) {
117                return forLexeme(lexeme, context) != NULL_LEXTANT;
118        }
119}
Note: See TracBrowser for help on using the repository browser.