diff --git a/src/language.yacc b/src/language.yacc
index 03a0eff00b234787232d767b23734a64cbf47279..5a1e2d157f2d4ae00f9663e8c24952b91818bd59 100644
--- a/src/language.yacc
+++ b/src/language.yacc
@@ -301,6 +301,7 @@ void fix_comp_stack(int sp)
 %type <n> gauge
 %type <n> lambda
 %type <n> local_name_list
+%type <n> lvalue
 %type <n> lvalue_list
 %type <n> m_expr_list
 %type <n> m_expr_list2
@@ -1140,8 +1141,15 @@ sscanf: F_SSCANF '(' expr0 ',' expr0 lvalue_list ')'
   }
   ;
 
+lvalue: expr4
+  | type F_IDENTIFIER
+  {
+    add_local_name($2,pop_type());
+    $$=mklocalnode(islocal($2));
+  }
+
 lvalue_list: /* empty */ { $$ = 0; }
-  | ',' expr4 lvalue_list { $$ = mknode(F_LVALUE_LIST,$2,$3); }
+  | ',' lvalue lvalue_list { $$ = mknode(F_LVALUE_LIST,$2,$3); }
   ;
 
 low_string: F_STRING