too messy, particularly when such includes can be inserted at random
times by the parser generator. */
-/* FIXME: there are still 21 shift/reduce conflicts
- Other known bugs or limitations:
+/* Known bugs or limitations:
- pascal string operations are not supported at all.
- there are some problems with boolean types.
- Pascal type hexadecimal constants are not supported
%left '*' '/'
%right UNARY INCREMENT DECREMENT
%right ARROW '.' '[' '('
+%left '^'
%token <ssym> BLOCKNAME
%type <bval> block
%left COLONCOLON
retry:
+ prev_lexptr = lexptr;
+
tokstart = lexptr;
explen = strlen (lexptr);
/* See if it is a special token of length 3. */
&is_a_field_of_this,
(struct symtab **) NULL);
/* second chance uppercased (as Free Pascal does). */
- if (!sym)
+ if (!sym && !is_a_field_of_this)
{
for (i = 0; i <= namelen; i++)
{
VAR_NAMESPACE,
&is_a_field_of_this,
(struct symtab **) NULL);
- if (sym)
+ if (sym || is_a_field_of_this)
for (i = 0; i <= namelen; i++)
{
if ((tokstart[i] >= 'a' && tokstart[i] <= 'z'))
}
}
/* Third chance Capitalized (as GPC does). */
- if (!sym)
+ if (!sym && !is_a_field_of_this)
{
for (i = 0; i <= namelen; i++)
{
VAR_NAMESPACE,
&is_a_field_of_this,
(struct symtab **) NULL);
- if (sym)
+ if (sym || is_a_field_of_this)
for (i = 0; i <= namelen; i++)
{
if (i == 0)
yyerror (msg)
char *msg;
{
+ if (prev_lexptr)
+ lexptr = prev_lexptr;
+
error ("A %s in expression, near `%s'.", (msg ? msg : "error"), lexptr);
}