View Javadoc

1   /***
2    * Cecilia ADL Compiler
3    * Copyright (C) 2006-2008 STMicroelectronics
4    *
5    * This library is free software; you can redistribute it and/or
6    * modify it under the terms of the GNU Lesser General Public
7    * License as published by the Free Software Foundation; either
8    * version 2 of the License, or (at your option) any later version.
9    *
10   * This library is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13   * Lesser General Public License for more details.
14   *
15   * You should have received a copy of the GNU Lesser General Public
16   * License along with this library; if not, write to the Free Software
17   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18   *
19   * Contact: fractal@objectweb.org
20   *
21   * Author: Lionel Debroux
22   * Contributor: Matthieu Leclercq
23   */
24  
25  package org.objectweb.fractal.cecilia.adl;
26  
27  import java.util.HashSet;
28  import java.util.Set;
29  
30  /**
31   * Helper class that provides a method to checks that a given string is not a
32   * reserved C/C++ keyword, or a typedef or macro defined in a standard header.
33   */
34  public final class ReservedWordsChecker {
35  
36    private static final Set<String> RESERVED_C_WORD = new HashSet<String>();
37  
38    static {
39      RESERVED_C_WORD.add("asm");
40      RESERVED_C_WORD.add("auto");
41      RESERVED_C_WORD.add("break");
42      RESERVED_C_WORD.add("case");
43      RESERVED_C_WORD.add("catch");
44      RESERVED_C_WORD.add("char");
45      RESERVED_C_WORD.add("class");
46      RESERVED_C_WORD.add("const");
47      RESERVED_C_WORD.add("continue");
48      RESERVED_C_WORD.add("default");
49      RESERVED_C_WORD.add("delete");
50      RESERVED_C_WORD.add("do");
51      RESERVED_C_WORD.add("double");
52      RESERVED_C_WORD.add("else");
53      RESERVED_C_WORD.add("enum");
54      RESERVED_C_WORD.add("extern");
55      RESERVED_C_WORD.add("float");
56      RESERVED_C_WORD.add("for");
57      RESERVED_C_WORD.add("friend");
58      RESERVED_C_WORD.add("goto");
59      RESERVED_C_WORD.add("if");
60      RESERVED_C_WORD.add("inline");
61      RESERVED_C_WORD.add("int");
62      RESERVED_C_WORD.add("long");
63      RESERVED_C_WORD.add("new");
64      RESERVED_C_WORD.add("operator");
65      RESERVED_C_WORD.add("private");
66      RESERVED_C_WORD.add("protected");
67      RESERVED_C_WORD.add("public");
68      RESERVED_C_WORD.add("register");
69      RESERVED_C_WORD.add("return");
70      RESERVED_C_WORD.add("short");
71      RESERVED_C_WORD.add("signed");
72      RESERVED_C_WORD.add("sizeof");
73      RESERVED_C_WORD.add("static");
74      RESERVED_C_WORD.add("struct");
75      RESERVED_C_WORD.add("switch");
76      RESERVED_C_WORD.add("template");
77      RESERVED_C_WORD.add("this");
78      RESERVED_C_WORD.add("throw");
79      RESERVED_C_WORD.add("try");
80      RESERVED_C_WORD.add("typedef");
81      RESERVED_C_WORD.add("unsigned");
82      RESERVED_C_WORD.add("union");
83      RESERVED_C_WORD.add("virtual");
84      RESERVED_C_WORD.add("void");
85      RESERVED_C_WORD.add("volatile");
86      RESERVED_C_WORD.add("while");
87      RESERVED_C_WORD.add("int8_t");
88      RESERVED_C_WORD.add("uint8_t");
89      RESERVED_C_WORD.add("int16_t");
90      RESERVED_C_WORD.add("uint16_t");
91      RESERVED_C_WORD.add("int32_t");
92      RESERVED_C_WORD.add("uint32_t");
93      RESERVED_C_WORD.add("int64_t");
94      RESERVED_C_WORD.add("uint64_t");
95      RESERVED_C_WORD.add("int_least8_t");
96      RESERVED_C_WORD.add("uint_least8_t");
97      RESERVED_C_WORD.add("int_least16_t");
98      RESERVED_C_WORD.add("uint_least16_t");
99      RESERVED_C_WORD.add("int_least32_t");
100     RESERVED_C_WORD.add("uint_least32_t");
101     RESERVED_C_WORD.add("int_least64_t");
102     RESERVED_C_WORD.add("uint_least64_t");
103     RESERVED_C_WORD.add("int_fast8_t");
104     RESERVED_C_WORD.add("uint_fast8_t");
105     RESERVED_C_WORD.add("int_fast16_t");
106     RESERVED_C_WORD.add("uint_fast16_t");
107     RESERVED_C_WORD.add("int_fast32_t");
108     RESERVED_C_WORD.add("uint_fast32_t");
109     RESERVED_C_WORD.add("int_fast64_t");
110     RESERVED_C_WORD.add("uint_fast64_t");
111     RESERVED_C_WORD.add("intptr_t");
112     RESERVED_C_WORD.add("uintptr_t");
113     RESERVED_C_WORD.add("intmax_t");
114     RESERVED_C_WORD.add("uintmax_t");
115     RESERVED_C_WORD.add("size_t");
116     RESERVED_C_WORD.add("ptrdiff_t");
117     RESERVED_C_WORD.add("wchar_t");
118     RESERVED_C_WORD.add("offsetof");
119     RESERVED_C_WORD.add("NULL");
120   }
121 
122   private ReservedWordsChecker() {
123   }
124 
125   /**
126    * Checks the given name against a list of C/C++ reserved keywords.
127    * 
128    * @param name the name to be checked
129    * @return true if the name is reserved C/C++ keyword.
130    */
131   public static boolean isReservedCWord(final String name) {
132     return RESERVED_C_WORD.contains(name);
133   }
134 }