KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > lib > lexer > test > simple > GenLanguage


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package org.netbeans.lib.lexer.test.simple;
21
22 import java.util.Arrays JavaDoc;
23 import java.util.Collection JavaDoc;
24 import java.util.HashMap JavaDoc;
25 import java.util.Map JavaDoc;
26 import org.netbeans.api.lexer.Language;
27 import org.netbeans.api.lexer.LanguagePath;
28 import org.netbeans.api.lexer.TokenId;
29 import org.netbeans.api.lexer.InputAttributes;
30 import org.netbeans.api.lexer.Token;
31 import org.netbeans.spi.lexer.LanguageEmbedding;
32 import org.netbeans.spi.lexer.LanguageHierarchy;
33 import org.netbeans.spi.lexer.Lexer;
34 import org.netbeans.spi.lexer.LexerRestartInfo;
35
36 /**
37  * Example of language that could be generated by a lexer generator.
38  * <br/>
39  * More common is a use of enumerated token ids e.g. {@link SimpleLanguage}.
40  *
41  * @author mmetelka
42  */

43 public final class GenLanguage {
44     
45     public static final int IDENTIFIER = 0;
46     public static final int PLUS = 1;
47     public static final int MINUS = 2;
48     public static final int PLUS_MINUS_PLUS = 3; // For testing lookahead two
49
public static final int SLASH = 4;
50     // [TEST] Gap in ordinals allowed
51
public static final int STAR = 7;
52     public static final int ML_COMMENT = 8;
53     public static final int WHITESPACE = 9;
54     // [TEST] Gap in ordinals allowed
55
public static final int SL_COMMENT = 11;
56     public static final int ERROR = 12;
57     public static final int PUBLIC = 13;
58     public static final int PRIVATE = 14;
59     public static final int STATIC = 15;
60     
61     public static final TokenId IDENTIFIER_ID = LanguageHierarchy.newId("IDENTIFIER", IDENTIFIER);
62     public static final TokenId PLUS_ID = LanguageHierarchy.newId("PLUS", PLUS, "operator");
63     public static final TokenId MINUS_ID = LanguageHierarchy.newId("MINUS", MINUS, "operator");
64     public static final TokenId PLUS_MINUS_PLUS_ID = LanguageHierarchy.newId("PLUS_MINUS_PLUS", PLUS_MINUS_PLUS);
65     public static final TokenId SLASH_ID = LanguageHierarchy.newId("SLASH", SLASH, "operator");
66     public static final TokenId STAR_ID = LanguageHierarchy.newId("STAR", STAR, "operator");
67     public static final TokenId ML_COMMENT_ID = LanguageHierarchy.newId("ML_COMMENT", ML_COMMENT, "comment");
68     public static final TokenId WHITESPACE_ID = LanguageHierarchy.newId("WHITESPACE", WHITESPACE);
69     public static final TokenId SL_COMMENT_ID = LanguageHierarchy.newId("SL_COMMENT", SL_COMMENT, "comment");
70     public static final TokenId ERROR_ID = LanguageHierarchy.newId("ERROR", ERROR, "error");
71     public static final TokenId PUBLIC_ID = LanguageHierarchy.newId("PUBLIC", PUBLIC, "keyword");
72     public static final TokenId PRIVATE_ID = LanguageHierarchy.newId("PRIVATE", PRIVATE, "keyword");
73     public static final TokenId STATIC_ID = LanguageHierarchy.newId("STATIC", STATIC, "keyword");
74
75     private static final Language<TokenId> language = new LanguageHierarchy<TokenId>() {
76         @Override JavaDoc
77         protected Collection JavaDoc<TokenId> createTokenIds() {
78             return Arrays.asList(new TokenId[] {
79                 IDENTIFIER_ID,
80                 MINUS_ID, PLUS_ID, SLASH_ID, STAR_ID, // [TEST] reversed ids order should not matter
81
SL_COMMENT_ID, PLUS_MINUS_PLUS_ID, ML_COMMENT_ID,
82                 WHITESPACE_ID, ERROR_ID,
83                 PUBLIC_ID, PRIVATE_ID, STATIC_ID,
84             });
85         }
86         
87         @Override JavaDoc
88         protected Map JavaDoc<String JavaDoc,Collection JavaDoc<TokenId>> createTokenCategories() {
89             Map JavaDoc<String JavaDoc,Collection JavaDoc<TokenId>> cats = new HashMap JavaDoc<String JavaDoc,Collection JavaDoc<TokenId>>();
90             // [TEST] Add extra id into existing category
91
cats.put("operator", Arrays.asList(new TokenId[] { PLUS_MINUS_PLUS_ID }));
92             // [TEST] Create fresh new categories (one member, two members)
93
cats.put("whitespace", Arrays.asList(new TokenId[] { WHITESPACE_ID }));
94             cats.put("test-category", Arrays.asList(new TokenId[] { PLUS_ID, MINUS_ID, IDENTIFIER_ID }));
95             return cats;
96         }
97
98         @Override JavaDoc
99         protected Lexer<TokenId> createLexer(LexerRestartInfo<TokenId> info) {
100             return null;
101         }
102
103         @Override JavaDoc
104         protected String JavaDoc mimeType() {
105             return "text/x-gen";
106         }
107     }.language();
108
109     public static Language<TokenId> language() {
110         return language;
111     }
112
113     private GenLanguage() {
114         // no instances
115
}
116     
117 }
118
Popular Tags