From e8f6d37dbd949686b70fb989fc3a8c468ccaeff2 Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Thu, 23 Nov 2017 15:41:02 -0500 Subject: [PATCH] lexer: add token for bad extern segment, and bad triple quoted string Signed-off-by: Jean Privat --- src/parser/lexer.nit | 38 ++++++++++++++++-- src/parser/nit.sablecc3xx | 4 +- src/parser/parser_abs.nit | 6 +++ src/parser/parser_nodes.nit | 14 +++++++ src/parser/tables_nit.c | 90 +++++++++++++++++++++---------------------- 5 files changed, 102 insertions(+), 50 deletions(-) diff --git a/src/parser/lexer.nit b/src/parser/lexer.nit index dc10ac9..f8431a0 100644 --- a/src/parser/lexer.nit +++ b/src/parser/lexer.nit @@ -1326,7 +1326,7 @@ redef class TBadString end end -redef class TBadChar +redef class TBadTString redef fun parser_index: Int do return 110 @@ -1338,7 +1338,7 @@ redef class TBadChar end end -redef class TExternCodeSegment +redef class TBadChar redef fun parser_index: Int do return 111 @@ -1350,11 +1350,35 @@ redef class TExternCodeSegment end end +redef class TExternCodeSegment + redef fun parser_index: Int + do + return 112 + end + + init init_tk(loc: Location) + do + _location = loc + end +end + +redef class TBadExtern + redef fun parser_index: Int + do + return 113 + end + + init init_tk(loc: Location) + do + _location = loc + end +end + redef class EOF redef fun parser_index: Int do - return 112 + return 114 end end @@ -1692,11 +1716,17 @@ redef class Lexer return new TBadString.init_tk(location) end if accept_token == 111 then - return new TBadChar.init_tk(location) + return new TBadTString.init_tk(location) end if accept_token == 112 then + return new TBadChar.init_tk(location) + end + if accept_token == 113 then return new TExternCodeSegment.init_tk(location) end + if accept_token == 114 then + return new TBadExtern.init_tk(location) + end abort # unknown token index `accept_token` end end diff --git a/src/parser/nit.sablecc3xx b/src/parser/nit.sablecc3xx index f626841..1931792 100644 --- a/src/parser/nit.sablecc3xx +++ b/src/parser/nit.sablecc3xx @@ -218,10 +218,12 @@ start_string = id? '"' str_body '{' | id? '"' '"' '"' long_str_body lsend2; mid_string = '}' str_body '{' | '}' '}' '}' long_str_body lsend2; end_string = '}' str_body '"' id? | '}' '}' '}' long_str_body lsend1 id? ; char = id? ((''' [[any - '''] - '\'] ''') | (''' '\' any ''')) id?; -bad_string = ('"'|'}') str_body | '"' '"' '"' long_str_body | ''' ''' ''' long_sstr_body; +bad_string = ('"'|'}') str_body ; +bad_t_string = '"' '"' '"' long_str_body | ''' ''' ''' long_sstr_body; bad_char = ''' '\'? any; extern_code_segment = '`' '{' extern_code_body '`' '}'; +bad_extern = '`' '{' extern_code_body; /*****************************************************************************/ Ignored Tokens diff --git a/src/parser/parser_abs.nit b/src/parser/parser_abs.nit index b6d7676..2f42bfc 100644 --- a/src/parser/parser_abs.nit +++ b/src/parser/parser_abs.nit @@ -334,12 +334,18 @@ end class TBadString super Token end +class TBadTString + super Token +end class TBadChar super Token end class TExternCodeSegment super Token end +class TBadExtern + super Token +end class EOF super Token end diff --git a/src/parser/parser_nodes.nit b/src/parser/parser_nodes.nit index 9726c3d..0c535c2 100644 --- a/src/parser/parser_nodes.nit +++ b/src/parser/parser_nodes.nit @@ -1078,6 +1078,11 @@ class TBadString end end +# A malformed triple quoted string +class TBadTString + super TBadString +end + # A malformed char class TBadChar super Token @@ -1092,6 +1097,15 @@ class TExternCodeSegment super Token end +# A malformed extern code block +class TBadExtern + super Token + redef fun to_s + do + do return "malformed extern segment {text}" + end +end + # A end of file class EOF super Token diff --git a/src/parser/tables_nit.c b/src/parser/tables_nit.c index fe36ace..e424dc6 100644 --- a/src/parser/tables_nit.c +++ b/src/parser/tables_nit.c @@ -3025,7 +3025,7 @@ const int* const lexer_goto_table[] = { }; const int lexer_accept_table[] = { - -1,0,1,1,0,97,110,2,83,86,-1,56,57,80,78,60,79,77,82,103,103,61,99,90,63,93,98,100,58,59,85,-1,-1,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,84,110,87,1,89,110,105,-1,106,2,2,2,68,72,111,111,111,81,66,64,65,76,104,67,-1,103,-1,-1,-1,-1,103,-1,-1,-1,-1,-1,-1,62,92,91,88,94,95,100,100,100,100,71,-1,102,-1,-1,-1,101,101,101,101,101,101,48,101,101,101,101,17,101,101,101,101,101,101,24,101,30,16,101,101,101,101,101,101,101,32,101,101,101,101,101,101,101,101,101,101,101,101,101,101,70,110,108,-1,107,110,105,110,105,110,2,109,110,111,69,75,103,103,103,-1,-1,104,103,103,103,103,103,103,103,-1,-1,103,-1,-1,103,73,96,74,-1,102,102,102,102,-1,-1,-1,-1,105,-1,-1,-1,-1,101,101,31,101,101,101,101,101,101,11,101,101,101,29,12,101,101,101,41,101,101,101,101,40,33,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,18,101,101,101,108,110,110,110,110,110,-1,-1,-1,105,105,105,105,109,110,110,110,-1,-1,109,103,103,103,103,-1,-1,-1,112,-1,-1,-1,-1,101,101,101,101,101,101,101,26,9,101,101,101,101,14,101,101,101,101,28,101,47,42,101,101,101,101,101,101,44,101,101,25,45,13,101,101,52,101,108,108,108,108,110,-1,-1,108,-1,107,-1,-1,110,-1,-1,109,109,109,109,110,110,110,-1,-1,110,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,38,101,101,37,55,6,101,101,46,101,101,101,101,50,51,101,101,101,101,101,101,15,101,101,43,101,27,54,-1,-1,-1,-1,-1,108,-1,110,-1,-1,105,-1,-1,106,110,110,110,105,-1,110,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,101,39,101,19,101,5,101,101,4,101,101,101,101,20,35,10,101,-1,108,108,108,108,108,-1,-1,107,105,106,105,110,-1,-1,-1,-1,-1,-1,-1,-1,101,101,34,101,23,101,3,22,101,101,108,108,107,105,105,105,105,-1,-1,7,36,101,49,101,101,108,108,108,108,53,8,21,9 + -1,0,1,1,0,97,110,2,83,86,-1,56,57,80,78,60,79,77,82,103,103,61,99,90,63,93,98,100,58,59,85,-1,-1,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,84,110,87,1,89,110,105,-1,106,2,2,2,68,72,112,112,112,81,66,64,65,76,104,67,-1,103,-1,-1,-1,-1,103,-1,-1,-1,-1,-1,-1,62,92,91,88,94,95,100,100,100,100,71,-1,102,114,-1,-1,101,101,101,101,101,101,48,101,101,101,101,17,101,101,101,101,101,101,24,101,30,16,101,101,101,101,101,101,101,32,101,101,101,101,101,101,101,101,101,101,101,101,101,101,70,110,108,-1,107,110,105,111,105,110,2,109,111,112,69,75,103,103,103,-1,-1,104,103,103,103,103,103,103,103,-1,-1,103,-1,-1,103,73,96,74,-1,102,102,102,102,114,-1,-1,-1,105,-1,-1,-1,-1,101,101,31,101,101,101,101,101,101,11,101,101,101,29,12,101,101,101,41,101,101,101,101,40,33,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,18,101,101,101,108,110,110,111,111,111,-1,-1,-1,105,105,105,105,109,111,111,111,-1,-1,109,103,103,103,103,-1,114,114,113,-1,-1,-1,-1,101,101,101,101,101,101,101,26,9,101,101,101,101,14,101,101,101,101,28,101,47,42,101,101,101,101,101,101,44,101,101,25,45,13,101,101,52,101,108,108,108,108,110,-1,-1,108,-1,107,-1,-1,111,-1,-1,109,109,109,109,111,111,111,-1,-1,111,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,38,101,101,37,55,6,101,101,46,101,101,101,101,50,51,101,101,101,101,101,101,15,101,101,43,101,27,54,-1,-1,-1,-1,-1,108,-1,110,-1,-1,105,-1,-1,106,111,111,111,105,-1,111,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,101,39,101,19,101,5,101,101,4,101,101,101,101,20,35,10,101,-1,108,108,108,108,108,-1,-1,107,105,106,105,111,-1,-1,-1,-1,-1,-1,-1,-1,101,101,34,101,23,101,3,22,101,101,108,108,107,105,105,105,105,-1,-1,7,36,101,49,101,101,108,108,108,108,53,8,21,9 }; static int parser_action_row1[] = { @@ -3035,8 +3035,8 @@ static int parser_action_row1[] = { 1, 0, 2, 29, 1, 497, 98, 0, 3, - 111, 1, 497, - 112, 1, 22 + 112, 1, 497, + 114, 1, 22 }; static int parser_action_row2[] = { 1, @@ -3056,7 +3056,7 @@ static int parser_action_row4[] = { static int parser_action_row5[] = { 2, -1, 3, 4, - 112, 2, -1 + 114, 2, -1 }; static int parser_action_row6[] = { 7, @@ -3065,8 +3065,8 @@ static int parser_action_row6[] = { 1, 0, 2, 29, 1, 497, 98, 0, 3, - 111, 1, 497, - 112, 1, 22 + 112, 1, 497, + 114, 1, 22 }; static int parser_action_row7[] = { 1, @@ -3095,7 +3095,7 @@ static int parser_action_row12[] = { static int parser_action_row13[] = { 2, -1, 1, 496, - 112, 1, 23 + 114, 1, 23 }; static int parser_action_row14[] = { 33, @@ -3137,7 +3137,7 @@ static int parser_action_row15[] = { 3, -1, 3, 14, 29, 0, 84, - 111, 0, 85 + 112, 0, 85 }; static int parser_action_row16[] = { 1, @@ -3161,8 +3161,8 @@ static int parser_action_row19[] = { 1, 0, 2, 29, 1, 497, 98, 0, 3, - 111, 1, 497, - 112, 1, 22 + 112, 1, 497, + 114, 1, 22 }; static int parser_action_row20[] = { 7, @@ -3171,8 +3171,8 @@ static int parser_action_row20[] = { 1, 0, 2, 29, 1, 497, 98, 0, 3, - 111, 1, 497, - 112, 1, 22 + 112, 1, 497, + 114, 1, 22 }; static int parser_action_row21[] = { 5, @@ -3180,7 +3180,7 @@ static int parser_action_row21[] = { 0, 0, 1, 1, 0, 2, 98, 0, 3, - 112, 1, 22 + 114, 1, 22 }; static int parser_action_row22[] = { 7, @@ -3190,7 +3190,7 @@ static int parser_action_row22[] = { 10, 1, 1075, 29, 1, 1075, 98, 0, 104, - 111, 1, 1075 + 112, 1, 1075 }; static int parser_action_row23[] = { 7, @@ -3200,7 +3200,7 @@ static int parser_action_row23[] = { 10, 1, 1077, 29, 1, 1077, 98, 0, 105, - 111, 1, 1077 + 112, 1, 1077 }; static int parser_action_row24[] = { 1, @@ -3267,8 +3267,8 @@ static int parser_action_row29[] = { 1, 0, 2, 29, 1, 497, 98, 0, 3, - 111, 1, 497, - 112, 1, 22 + 112, 1, 497, + 114, 1, 22 }; static int parser_action_row30[] = { 7, @@ -3277,8 +3277,8 @@ static int parser_action_row30[] = { 1, 0, 2, 29, 1, 497, 98, 0, 3, - 111, 1, 497, - 112, 1, 22 + 112, 1, 497, + 114, 1, 22 }; static int parser_action_row31[] = { 5, @@ -3286,7 +3286,7 @@ static int parser_action_row31[] = { 0, 0, 1, 1, 0, 2, 98, 0, 3, - 112, 1, 22 + 114, 1, 22 }; static int parser_action_row32[] = { 26, @@ -3757,7 +3757,7 @@ static int parser_action_row86[] = { static int parser_action_row87[] = { 2, -1, 3, 86, - 111, 0, 263 + 112, 0, 263 }; static int parser_action_row88[] = { 1, @@ -3794,8 +3794,8 @@ static int parser_action_row95[] = { 1, 0, 2, 29, 1, 497, 98, 0, 3, - 111, 1, 497, - 112, 1, 22 + 112, 1, 497, + 114, 1, 22 }; static int parser_action_row96[] = { 5, @@ -3803,7 +3803,7 @@ static int parser_action_row96[] = { 0, 0, 1, 1, 0, 2, 98, 0, 3, - 112, 1, 22 + 114, 1, 22 }; static int parser_action_row97[] = { 1, @@ -3855,7 +3855,7 @@ static int parser_action_row100[] = { 0, 0, 1, 1, 0, 2, 98, 0, 3, - 112, 1, 22 + 114, 1, 22 }; static int parser_action_row101[] = { 1, @@ -3899,7 +3899,7 @@ static int parser_action_row108[] = { 10, 1, 1076, 29, 1, 1076, 98, 0, 271, - 111, 1, 1076 + 112, 1, 1076 }; static int parser_action_row109[] = { 4, @@ -3927,8 +3927,8 @@ static int parser_action_row112[] = { 1, 0, 2, 29, 1, 497, 98, 0, 3, - 111, 1, 497, - 112, 1, 22 + 112, 1, 497, + 114, 1, 22 }; static int parser_action_row113[] = { 5, @@ -3936,7 +3936,7 @@ static int parser_action_row113[] = { 0, 0, 1, 1, 0, 2, 98, 0, 3, - 112, 1, 22 + 114, 1, 22 }; static int parser_action_row114[] = { 1, @@ -3948,7 +3948,7 @@ static int parser_action_row115[] = { 0, 0, 1, 1, 0, 2, 98, 0, 3, - 112, 1, 22 + 114, 1, 22 }; static int parser_action_row116[] = { 1, @@ -5359,7 +5359,7 @@ static int parser_action_row266[] = { 0, 0, 1, 1, 0, 2, 98, 0, 3, - 112, 1, 22 + 114, 1, 22 }; static int parser_action_row267[] = { 1, @@ -5414,7 +5414,7 @@ static int parser_action_row275[] = { 0, 0, 1, 1, 0, 2, 98, 0, 3, - 112, 1, 22 + 114, 1, 22 }; static int parser_action_row276[] = { 1, @@ -7425,7 +7425,7 @@ static int parser_action_row522[] = { 56, 1, 451, 59, 1, 451, 98, 1, 451, - 112, 1, 451 + 114, 1, 451 }; static int parser_action_row523[] = { 4, @@ -9729,7 +9729,7 @@ static int parser_action_row726[] = { 56, 1, 449, 59, 1, 449, 98, 1, 449, - 112, 1, 449 + 114, 1, 449 }; static int parser_action_row727[] = { 1, @@ -10896,7 +10896,7 @@ static int parser_action_row866[] = { 29, 0, 84, 57, 0, 1015, 98, 0, 3, - 111, 0, 85 + 112, 0, 85 }; static int parser_action_row867[] = { 1, @@ -12318,7 +12318,7 @@ static int parser_action_row1012[] = { 3, -1, 3, 1011, 29, 0, 84, - 111, 0, 85 + 112, 0, 85 }; static int parser_action_row1013[] = { 1, @@ -14167,7 +14167,7 @@ static int parser_action_row1188[] = { 3, -1, 3, 1187, 29, 0, 84, - 111, 0, 85 + 112, 0, 85 }; static int parser_action_row1189[] = { 1, @@ -15489,7 +15489,7 @@ static int parser_action_row1350[] = { 16, 1, 83, 29, 1, 83, 98, 0, 3, - 111, 1, 83 + 112, 1, 83 }; static int parser_action_row1351[] = { 1, @@ -17077,7 +17077,7 @@ static int parser_action_row1500[] = { 1, 0, 2, 29, 0, 84, 98, 0, 3, - 111, 0, 85 + 112, 0, 85 }; static int parser_action_row1501[] = { 3, @@ -19168,7 +19168,7 @@ static int parser_action_row1694[] = { 3, -1, 3, 1693, 29, 0, 84, - 111, 0, 85 + 112, 0, 85 }; static int parser_action_row1695[] = { 1, @@ -19821,7 +19821,7 @@ static int parser_action_row1759[] = { 3, -1, 3, 1758, 29, 0, 84, - 111, 0, 85 + 112, 0, 85 }; static int parser_action_row1760[] = { 1, @@ -20021,7 +20021,7 @@ static int parser_action_row1773[] = { 3, -1, 3, 1772, 29, 0, 84, - 111, 0, 85 + 112, 0, 85 }; static int parser_action_row1774[] = { 1, @@ -20074,7 +20074,7 @@ static int parser_action_row1777[] = { 3, -1, 3, 1776, 29, 0, 84, - 111, 0, 85 + 112, 0, 85 }; static int parser_action_row1778[] = { 1, @@ -20514,7 +20514,7 @@ static int parser_action_row1819[] = { 3, -1, 3, 1818, 29, 0, 84, - 111, 0, 85 + 112, 0, 85 }; static int parser_action_row1820[] = { 1, @@ -20710,7 +20710,7 @@ static int parser_action_row1835[] = { 3, -1, 3, 1834, 29, 0, 84, - 111, 0, 85 + 112, 0, 85 }; static int parser_action_row1836[] = { 1, -- 1.7.9.5