pike.git/
src/
language.yacc
Branch:
Tag:
Non-build tags
All tags
No tags
1998-04-17
1998-04-17 03:18:09 by Henrik Grubbström (Grubba) <grubba@grubba.org>
a66319ad8da927ea09b628eb96830b2abed2eadb (
46
lines) (+
26
/-
20
)
[
Show
|
Annotate
]
Branch:
7.9
Added check for bad identifiers in assignment expressions too.
Rev: src/language.yacc:1.81
171:
/* This is the grammar definition of Pike. */ #include "global.h"
-
RCSID("$Id: language.yacc,v 1.
80
1998/04/17
02
:
53
:
10
grubba Exp $");
+
RCSID("$Id: language.yacc,v 1.
81
1998/04/17
03
:
18
:
09
grubba Exp $");
#ifdef HAVE_MEMORY_H #include <memory.h> #endif
1311:
expr0: expr01 | expr4 '=' expr0 { $$=mknode(F_ASSIGN,$3,$1); } | expr4 '=' error { $$=$1; reset_type_stack(); yyerrok; }
+
| bad_expr_ident '=' expr0 { $$=$3; }
| '[' low_lvalue_list ']' '=' expr0 { $$=mknode(F_ASSIGN,$5,mknode(F_ARRAY_LVALUE,$2,0)); } | expr4 assign expr0 { $$=mknode($2,$1,$3); } | expr4 assign error { $$=$1; reset_type_stack(); yyerrok; }
-
+
| bad_expr_ident assign expr0 { $$=$3; }
| '[' low_lvalue_list ']' assign expr0 { $$=mknode($4,mknode(F_ARRAY_LVALUE,$2,0),$5); } | '[' low_lvalue_list ']' error { $$=$2; reset_type_stack(); yyerrok; } /* | error { $$=0; reset_type_stack(); } */
1726:
{ yyerror("class is a reserved word."); } ;
-
bad_lvalue:
-
F
_
INLINE
-
{ yyerror("inline is a reserved word."); }
-
| F
_
LOCAL_ID
-
{ yyerror("local is a reserved word."); }
-
| F_NO_MASK
-
{ yyerror("nomask is a reserved word."); }
-
| F_PREDEF
-
{ yyerror("predef is a reserved word."); }
-
| F_PRIVATE
-
{ yyerror("private is a reserved word."); }
-
| F_PROTECTED
-
{ yyerror("protected is a reserved word."); }
-
| F_PUBLIC
-
{ yyerror("public is a reserved word."); }
-
| F_STATIC
-
{ yyerror("static is a reserved word."); }
+
bad_lvalue:
bad
_
expr
_
ident
| F_ARRAY_ID { yyerror("array is a reserved word."); }
-
| F_FINAL_ID
-
{ yyerror("final is a reserved word.");}
+
| F_FLOAT_ID { yyerror("float is a reserved word.");} | F_FUNCTION_ID
1767:
{ yyerror("string is a reserved word."); } | F_VOID_ID { yyerror("void is a reserved word."); }
+
;
+
+
bad_expr_ident:
+
F_INLINE
+
{ yyerror("inline is a reserved word."); }
+
| F_LOCAL_ID
+
{ yyerror("local is a reserved word."); }
+
| F_NO_MASK
+
{ yyerror("nomask is a reserved word."); }
+
| F_PREDEF
+
{ yyerror("predef is a reserved word."); }
+
| F_PRIVATE
+
{ yyerror("private is a reserved word."); }
+
| F_PROTECTED
+
{ yyerror("protected is a reserved word."); }
+
| F_PUBLIC
+
{ yyerror("public is a reserved word."); }
+
| F_STATIC
+
{ yyerror("static is a reserved word."); }
+
| F_FINAL_ID
+
{ yyerror("final is a reserved word.");}
| F_DO { yyerror("do is a reserved word."); } | F_ELSE