From 1a95c2ff88455c5c7d0a11d6a61331b4b7afff32 Mon Sep 17 00:00:00 2001
From: Alexis Nasr <alexis.nasr@lif.univ-mrs.fr>
Date: Wed, 26 Oct 2016 12:29:22 -0400
Subject: [PATCH] did a horrible hack in parser to take car of sentences
 without ending punctuation

---
 maca_common/include/word.h                    |  2 +-
 maca_trans_parser/src/movements.c             |  3 ++-
 .../src/simple_decoder_parser_arc_eager.c     | 24 ++++++++++++++++++-
 3 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/maca_common/include/word.h b/maca_common/include/word.h
index 00e7808..b2fe6cf 100644
--- a/maca_common/include/word.h
+++ b/maca_common/include/word.h
@@ -52,7 +52,7 @@
 #define word_set_cpos(w, val)  (w)->wf_array[MCD_WF_CPOS] = (val)
 #define word_set_pos(w, val)   (w)->wf_array[MCD_WF_POS] = (val)
 #define word_set_feats(w, val) (w)->wf_array[MCD_WF_FEATS] = (val)
-#define word_set_gov(w, val)   (w)->wf_array[MCD_WF_GOV] = (val)
+#define word_set_gov(w, val)   ((w)->wf_array[MCD_WF_GOV] = (val))
 #define word_set_label(w, val) (w)->wf_array[MCD_WF_LABEL] = (val)
 #define word_set_stag(w, val)  (w)->wf_array[MCD_WF_STAG] = (val)
 #define word_set_sent_seg(w, val)   (w)->wf_array[MCD_WF_SENT_SEG] = (val)
diff --git a/maca_trans_parser/src/movements.c b/maca_trans_parser/src/movements.c
index a10e62b..64236b9 100644
--- a/maca_trans_parser/src/movements.c
+++ b/maca_trans_parser/src/movements.c
@@ -70,6 +70,7 @@ int movement_left_arc_undo(config *c)
 int movement_right_arc(config *c, int movement_code, int label)
 {
   if(stack_is_empty(config_get_stack(c))) return 0;
+  if(word_buffer_end(config_get_buffer(c))) return 0;
   
   word *gov = stack_top(config_get_stack(c));
   word *dep = word_buffer_b0(config_get_buffer(c));
@@ -140,8 +141,8 @@ int movement_reduce_undo(config *c)
 
 int movement_root(config *c, int movement_code, int root_code)
 {
+  if(stack_is_empty(config_get_stack(c))) return 0;
   word *s0 = stack_top(config_get_stack(c));
-  if(s0 == NULL) return 0;
   word_set_gov(s0, 0);
   word_set_label(s0, root_code);
   s0->is_root = 1;
diff --git a/maca_trans_parser/src/simple_decoder_parser_arc_eager.c b/maca_trans_parser/src/simple_decoder_parser_arc_eager.c
index 42fee6d..77fb88b 100644
--- a/maca_trans_parser/src/simple_decoder_parser_arc_eager.c
+++ b/maca_trans_parser/src/simple_decoder_parser_arc_eager.c
@@ -60,10 +60,24 @@ void simple_decoder_parser_arc_eager(context *ctx)
     mvt_type = movement_parser_type(mvt_code);
     mvt_label = movement_parser_label(mvt_code);
     
+    if(ctx->debug_mode){
+      fprintf(stdout, "***********************************\n");
+      config_print(stdout, c);      
+
+      vcode *vcode_array = feature_table_get_vcode_array(fv, ft);
+
+      for(int i=0; i < 5; i++){
+	printf("%d\t", i);
+	movement_parser_print(stdout, vcode_array[i].class_code, ctx->dico_labels);
+	printf("\t%.4f\n", vcode_array[i].score);
+      }
+      free(vcode_array);
+    }
+    
     if(ctx->trace_mode){
       index = word_get_index(word_buffer_b0(config_get_buffer(c)));
       fprintf(stdout, "%d\t", index);
-
+      
       stack_print(stdout, c->st);
       fprintf(stdout, "\t");
       
@@ -102,6 +116,14 @@ void simple_decoder_parser_arc_eager(context *ctx)
       movement_parser_shift(c);
     }
   }
+
+  /* horrible hack */
+  if(stack_nbelem(config_get_stack(c)) && (stack_top(config_get_stack(c)) == NULL))
+    stack_pop(config_get_stack(c));
+  
+  while(!stack_is_empty(config_get_stack(c)) && (stack_top(config_get_stack(c)) != NULL))
+    movement_parser_root(c, root_label);
+  /* end of horrible hack */
   
   if(!ctx->trace_mode)
     print_word_buffer(c, ctx->dico_labels);
-- 
GitLab