Author: Gianluca Guida <glguida@tlbflush.org>
Date: Tue Mar 7 19:00:06 UTC 2017
Parent: 214ca407357fd1f95de2e668d577d3eee919c6d9
Log message:
sexpr: exception on syntax error
1: diff --git a/src/lib/sexpr.c b/src/lib/sexpr.c 2: index bd24ab5..bdd1e6f 100644 3: --- a/src/lib/sexpr.c 4: +++ b/src/lib/sexpr.c 5: @@ -24,11 +24,11 @@ 6: */ 7: #include <stdio.h> 8: /************ Begin %include sections from the grammar ************************/ 9: -#line 1 "sexpr.lmn" 10: +#line 1 "sexpr.y" 11: #include <lac.h> 12: -#line 2 "sexpr.lmn" 13: +#line 2 "sexpr.y" 14: #include <assert.h> 15: -#line 3 "sexpr.lmn" 16: +#line 3 "sexpr.y" 17: #include "private.h" 18: #line 34 "sexpr.c" 19: /**************** End of %include directives **********************************/ 20: @@ -814,65 +814,65 @@ static void yy_reduce( 21: /********** Begin reduce actions **********************************************/ 22: YYMINORTYPE yylhsminor; 23: case 0: /* sexprlist ::= sexprlist sexpr */ 24: -#line 15 "sexpr.lmn" 25: +#line 15 "sexpr.y" 26: { if (cb != NULL) { cb->res = cb->fn(yymsp[0].minor.yy6, cb->opq); } } 27: #line 820 "sexpr.c" 28: break; 29: case 1: /* sexprlist ::= */ 30: -#line 16 "sexpr.lmn" 31: +#line 16 "sexpr.y" 32: { /* */ } 33: #line 825 "sexpr.c" 34: break; 35: case 2: /* sexpr ::= atom */ 36: case 9: /* sexpr ::= list */ yytestcase(yyruleno==9); 37: -#line 18 "sexpr.lmn" 38: +#line 18 "sexpr.y" 39: { yylhsminor.yy6 = yymsp[0].minor.yy0; } 40: #line 831 "sexpr.c" 41: yymsp[0].minor.yy6 = yylhsminor.yy6; 42: break; 43: case 3: /* sexpr ::= QUOTE sexpr */ 44: -#line 19 "sexpr.lmn" 45: +#line 19 "sexpr.y" 46: { yymsp[-1].minor.yy6 = cons(sym_quote, cons(yymsp[0].minor.yy6, NIL)); } 47: #line 837 "sexpr.c" 48: break; 49: case 4: /* sexpr ::= QUASI sexpr */ 50: -#line 20 "sexpr.lmn" 51: +#line 20 "sexpr.y" 52: { yymsp[-1].minor.yy6 = cons(sym_quasiquote, cons(yymsp[0].minor.yy6, NIL)); } 53: #line 842 "sexpr.c" 54: break; 55: case 5: /* sexpr ::= COMMA_AT sexpr */ 56: -#line 21 "sexpr.lmn" 57: +#line 21 "sexpr.y" 58: { yymsp[-1].minor.yy6 = cons(sym_splice, cons(yymsp[0].minor.yy6, NIL)); } 59: #line 847 "sexpr.c" 60: break; 61: case 6: /* sexpr ::= COMMA sexpr */ 62: -#line 22 "sexpr.lmn" 63: +#line 22 "sexpr.y" 64: { yymsp[-1].minor.yy6 = cons(sym_unquote, cons(yymsp[0].minor.yy6, NIL)); } 65: #line 852 "sexpr.c" 66: break; 67: case 7: /* sexpr ::= OPAREN sexpr DOT sexpr CPAREN */ 68: -#line 23 "sexpr.lmn" 69: +#line 23 "sexpr.y" 70: { yymsp[-4].minor.yy6 = cons(yymsp[-3].minor.yy6,yymsp[-1].minor.yy6); } 71: #line 857 "sexpr.c" 72: break; 73: case 8: /* sexpr ::= OPAREN CPAREN */ 74: -#line 24 "sexpr.lmn" 75: +#line 24 "sexpr.y" 76: { yymsp[-1].minor.yy6 = NIL; } 77: #line 862 "sexpr.c" 78: break; 79: case 10: /* list ::= OPAREN sexpr listelem CPAREN */ 80: -#line 27 "sexpr.lmn" 81: +#line 27 "sexpr.y" 82: { yymsp[-3].minor.yy0 = cons(yymsp[-2].minor.yy6,yymsp[-1].minor.yy0); } 83: #line 867 "sexpr.c" 84: break; 85: case 11: /* listelem ::= sexpr listelem */ 86: -#line 29 "sexpr.lmn" 87: +#line 29 "sexpr.y" 88: { yylhsminor.yy0 = cons(yymsp[-1].minor.yy6, yymsp[0].minor.yy0); } 89: #line 872 "sexpr.c" 90: yymsp[-1].minor.yy0 = yylhsminor.yy0; 91: break; 92: case 12: /* listelem ::= */ 93: -#line 30 "sexpr.lmn" 94: +#line 30 "sexpr.y" 95: { yymsp[1].minor.yy0 = NIL; } 96: #line 878 "sexpr.c" 97: break; 98: @@ -880,7 +880,7 @@ static void yy_reduce( 99: case 14: /* atom ::= STRING */ yytestcase(yyruleno==14); 100: case 15: /* atom ::= INTEGER */ yytestcase(yyruleno==15); 101: case 16: /* atom ::= NIHIL */ yytestcase(yyruleno==16); 102: -#line 32 "sexpr.lmn" 103: +#line 32 "sexpr.y" 104: { yylhsminor.yy0 = yymsp[0].minor.yy0; } 105: #line 886 "sexpr.c" 106: yymsp[0].minor.yy0 = yylhsminor.yy0; 107: @@ -944,9 +944,9 @@ static void yy_syntax_error( 108: ParseARG_FETCH; 109: #define TOKEN yyminor 110: /************ Begin %syntax_error code ****************************************/ 111: -#line 8 "sexpr.lmn" 112: +#line 8 "sexpr.y" 113: 114: - printf("SYNTAX ERROR!\n"); 115: + raise_exception("syntax error", NIL); 116: #line 951 "sexpr.c" 117: /************ End %syntax_error code ******************************************/ 118: ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */ 119: diff --git a/src/lib/sexpr.y b/src/lib/sexpr.y 120: index 4e61add..152ce46 100644 121: --- a/src/lib/sexpr.y 122: +++ b/src/lib/sexpr.y 123: @@ -6,7 +6,7 @@ 124: %extra_argument { struct parse_cb *cb } 125: 126: %syntax_error { 127: - printf("SYNTAX ERROR!\n"); 128: + raise_exception("syntax error", NIL); 129: } 130: 131: input ::= sexprlist ENDPARSE. 132: diff --git a/src/repl/lac.c b/src/repl/lac.c 133: index 666408b..5937d88 100644 134: --- a/src/repl/lac.c 135: +++ b/src/repl/lac.c 136: @@ -91,7 +91,7 @@ main (int argc, char *argv[]) 137: null_env = lac_init (); 138: if (null_env == NULL) 139: { 140: - fprintf (stderr, "Initialization failed."); 141: + fprintf (stderr, "Initialization failed.\n"); 142: return -1; 143: } 144: repl (stdin, stdout, stderr);