]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Other/Maintained/Tools/Pccts/KNOWN_PROBLEMS.txt
Updated conversion command line option with unicode support
[mirror_edk2.git] / EdkCompatibilityPkg / Other / Maintained / Tools / Pccts / KNOWN_PROBLEMS.txt
1
2 =======================================================
3 Known Problems In PCCTS - Last revised 14 November 1998
4 =======================================================
5
6 #14. Parsing bug in dlg
7
8 THM: I have been unable to reproduce this problem.
9
10 Reported by Rick Howard Mijenix Corporation (rickh@mijenix.com).
11
12 The regular expression parser (in rexpr.c) fails while
13 trying to parse the following regular expression:
14
15 {[a-zA-Z]:}(\\\\[a-zA-Z0-9]*)+
16
17 See my comment in the following excerpt from rexpr.c:
18
19 /*
20 * <regExpr> ::= <andExpr> ( '|' {<andExpr>} )*
21 *
22 * Return -1 if syntax error
23 * Return 0 if none found
24 * Return 1 if a regExrp was found
25 */
26 static
27 regExpr(g)
28 GraphPtr g;
29 {
30 Graph g1, g2;
31
32 if ( andExpr(&g1) == -1 )
33 {
34 return -1;
35 }
36
37 while ( token == '|' )
38 {
39 int a;
40 next();
41 a = andExpr(&g2);
42 if ( a == -1 ) return -1; /* syntax error below */
43 else if ( !a ) return 1; /* empty alternative */
44 g1 = BuildNFA_AorB(g1, g2);
45 }
46
47 if ( token!='\0' ) return -1;
48 *****
49 ***** It appears to fail here becuause token is 125 - the closing '}'
50 ***** If I change it to:
51 ***** if ( token!='\0' && token!='}' && token!= ')' ) return -1;
52 *****
53 ***** It succeeds, but I'm not sure this is the corrrect approach.
54 *****
55 *g = g1;
56 return 1;
57 }
58
59 #13. dlg reports an invalid range for: [\0x00-\0xff]
60
61 Diagnosed by Piotr Eljasiak (eljasiak@no-spam.zt.gdansk.tpsa.pl):
62
63 Fixed in MR16.
64
65 #12. Strings containing comment actions
66
67 Sequences that looked like C style comments appearing in string
68 literals are improperly parsed by antlr/dlg.
69
70 << fprintf(out," /* obsolete */ ");
71
72 For this case use:
73
74 << fprintf(out," \/\* obsolete \*\/ ");
75
76 Reported by K.J. Cummings (cummings@peritus.com).
77
78 #11. User hook for deallocation of variables on guess fail
79
80 The mechanism outlined in Item #108 works only for
81 heap allocated variables.
82
83 #10. Label re-initialization in ( X {y:Y} )*
84
85 If a label assignment is optional and appears in a
86 (...)* or (...)+ block it will not be reset to NULL
87 when it is skipped by a subsequent iteration.
88
89 Consider the example:
90
91 ( X { y:Y })* Z
92
93 with input:
94
95 X Y X Z
96
97 The first time through the block Y will be matched and
98 y will be set to point to the token. On the second
99 iteration of the (...)* block there is no match for Y.
100 But y will not be reset to NULL, as the user might
101 expect, it will contain a reference to the Y that was
102 matched in the first iteration.
103
104 The work-around is to manually reset y:
105
106 ( X << y = NULL; >> { y:Y } )* Z
107
108 or
109
110 ( X ( y:Y | << y = NULL; >> /* epsilon */ ) )* Z
111
112 Reported by Jeff Vincent (JVincent@novell.com).
113
114 #9. PCCTAST.h PCCTSAST::setType() is a noop
115
116 #8. #tokdefs with ~Token and .
117
118 THM: I have been unable to reproduce this problem.
119
120 When antlr uses #tokdefs to define tokens the fields of
121 #errclass and #tokclass do not get properly defined.
122 When it subsequently attempts to take the complement of
123 the set of tokens (using ~Token or .) it can refer to
124 tokens which don't have names, generating a fatal error.
125
126 #7. DLG crashes on some invalid inputs
127
128 THM: In MR20 have fixed the most common cases.
129
130 The following token defintion will cause DLG to crash.
131
132 #token "()"
133
134 Reported by Mengue Olivier (dolmen@bigfoot.com).
135
136 #6. On MS systems \n\r is treated as two new lines
137
138 Fixed.
139
140 #5. Token expressions in #tokclass
141
142 #errclass does not support TOK1..TOK2 or ~TOK syntax.
143 #tokclass does not support ~TOKEN syntax
144
145 A workaround for #errclass TOK1..TOK2 is to use a
146 #tokclass.
147
148 Reported by Dave Watola (dwatola@amtsun.jpl.nasa.gov)
149
150 #4. A #tokdef must appear "early" in the grammar file.
151
152 The "early" section of the grammar file is the only
153 place where the following directives may appear:
154
155 #header
156 #first
157 #tokdefs
158 #parser
159
160 Any other kind of statement signifiies the end of the
161 "early" section.
162
163 #3. Use of PURIFY macro for C++ mode
164
165 Item #93 of the CHANGES_FROM_1.33 describes the use of
166 the PURIFY macro to zero arguments to be passed by
167 upward inheritance.
168
169 #define PURIFY(r, s) memset((char *) &(r), '\0', (s));
170
171 This may not be the right thing to do for C++ objects that
172 have constructors. Reported by Bonny Rais (bonny@werple.net.au).
173
174 For those cases one should #define PURIFY to be an empty macro
175 in the #header or #first actions.
176
177 #2. Fixed in 1.33MR10 - See CHANGES_FROM_1.33 Item #80.
178
179 #1. The quality of support for systems with 8.3 file names leaves
180 much to be desired. Since the kit is distributed using the
181 long file names and the make file uses long file names it requires
182 some effort to generate. This will probably not be changed due
183 to the large number of systems already written using the long
184 file names.