comparison libinterp/corefcn/oct-tex-parser.in.yy @ 20573:e3c0fee87493

style fixes for tex lexer and parser * oct-tex-lexer.in.ll, oct-tex-parser.in.yy: Eliminate tabs and reindent.
author John W. Eaton <jwe@octave.org>
date Fri, 02 Oct 2015 12:25:39 -0400
parents a941a65c7cb8
children
comparison
equal deleted inserted replaced
20572:72cd24aa5f7a 20573:e3c0fee87493
19 <http://www.gnu.org/licenses/>. 19 <http://www.gnu.org/licenses/>.
20 20
21 */ 21 */
22 22
23 %{ 23 %{
24
24 #define YYDEBUG 1 25 #define YYDEBUG 1
25 26
26 #ifdef HAVE_CONFIG_H 27 #ifdef HAVE_CONFIG_H
27 #include <config.h> 28 #include <config.h>
28 #endif 29 #endif
32 33
33 extern int octave_tex_lex (YYSTYPE *, void *); 34 extern int octave_tex_lex (YYSTYPE *, void *);
34 static void yyerror (text_parser_tex& parser, const char *s); 35 static void yyerror (text_parser_tex& parser, const char *s);
35 36
36 #if defined (GNULIB_NAMESPACE) 37 #if defined (GNULIB_NAMESPACE)
37 // Calls to the following functions appear in the generated output from 38 // Calls to the following functions appear in the generated output
38 // Bison without the namespace tag. Redefine them so we will use them 39 // from Bison without the namespace tag. Redefine them so we will use
39 // via the gnulib namespace. 40 // them via the gnulib namespace.
40 #define fclose GNULIB_NAMESPACE::fclose 41 #define fclose GNULIB_NAMESPACE::fclose
41 #define fprintf GNULIB_NAMESPACE::fprintf 42 #define fprintf GNULIB_NAMESPACE::fprintf
42 #define malloc GNULIB_NAMESPACE::malloc 43 #define malloc GNULIB_NAMESPACE::malloc
43 #endif 44 #endif
44 45
45 #define scanner parser.get_scanner () 46 #define scanner parser.get_scanner ()
47
46 %} 48 %}
47 49
48 %API_PREFIX_DECL% 50 %API_PREFIX_DECL%
49 51
50 %define api.pure 52 %define api.pure
51 %parse-param { text_parser_tex& parser } 53 %parse-param { text_parser_tex& parser }
52 %lex-param { void *scanner } 54 %lex-param { void *scanner }
53 55
54 %code requires {#include <string>} 56 %code requires {#include <string>}
55 57
56 %union { 58 %union
57 /* Leaf symbols produced by the scanner */ 59 {
60 // Leaf symbols produced by the scanner.
58 char ch; 61 char ch;
59 double num; 62 double num;
60 int sym; 63 int sym;
61 64
62 /* Used for string buffering */ 65 // Used for string buffering.
63 std::string* str; 66 std::string* str;
64 67
65 /* Objects produced by the parser */ 68 // Objects produced by the parser.
66 text_element* e_base; 69 text_element* e_base;
67 text_element_list* e_list; 70 text_element_list* e_list;
68 } 71 }
69 72
70 %token BF IT SL RM 73 %token BF IT SL RM
76 %token<sym> SYM 79 %token<sym> SYM
77 80
78 %type<str> simple_string 81 %type<str> simple_string
79 %type<e_base> string_element symbol_element 82 %type<e_base> string_element symbol_element
80 %type<e_base> superscript_element subscript_element combined_script_element 83 %type<e_base> superscript_element subscript_element combined_script_element
81 %type<e_base> font_modifier_element fontname_element fontsize_element color_element 84 %type<e_base> font_modifier_element fontname_element fontsize_element
85 %type<e_base> color_element
82 %type<e_list> string_element_list scoped_string_element_list 86 %type<e_list> string_element_list scoped_string_element_list
83 87
84 /* Make sure there's no memory leak on parse error. */ 88 // Make sure there's no memory leak on parse error.
85 %destructor { } <ch> <num> <sym> 89 %destructor { } <ch> <num> <sym>
86 %destructor { delete $$; } <*> 90 %destructor { delete $$; } <*>
87 91
88 %nonassoc SCRIPT 92 %nonassoc SCRIPT
89 %nonassoc SUB SUPER 93 %nonassoc SUB SUPER
93 97
94 %start string 98 %start string
95 99
96 %% 100 %%
97 101
98 simple_string : CH 102 simple_string : CH
99 { $$ = new std::string (1, $1); } 103 { $$ = new std::string (1, $1); }
100 | simple_string CH 104 | simple_string CH
101 { $1->append (1, $2); $$ = $1; } 105 { $1->append (1, $2); $$ = $1; }
102 ; 106 ;
103 107
104 symbol_element : SYM 108 symbol_element : SYM
105 { $$ = new text_element_symbol ($1); } 109 { $$ = new text_element_symbol ($1); }
106 ; 110 ;
107 111
108 font_modifier_element : BF 112 font_modifier_element : BF
109 { $$ = new text_element_fontstyle (text_element_fontstyle::bold); } 113 { $$ = new text_element_fontstyle (text_element_fontstyle::bold); }
110 | IT 114 | IT
111 { $$ = new text_element_fontstyle (text_element_fontstyle::italic); } 115 { $$ = new text_element_fontstyle (text_element_fontstyle::italic); }
112 | SL 116 | SL
113 { $$ = new text_element_fontstyle (text_element_fontstyle::oblique); } 117 { $$ = new text_element_fontstyle (text_element_fontstyle::oblique); }
114 | RM 118 | RM
115 { $$ = new text_element_fontstyle (text_element_fontstyle::normal); } 119 { $$ = new text_element_fontstyle (text_element_fontstyle::normal); }
116 ; 120 ;
117 121
118 fontsize_element : FONTSIZE START NUM END 122 fontsize_element : FONTSIZE START NUM END
119 { $$ = new text_element_fontsize ($3); } 123 { $$ = new text_element_fontsize ($3); }
120 ; 124 ;
121 125
122 fontname_element : FONTNAME START simple_string END 126 fontname_element : FONTNAME START simple_string END
123 { 127 {
124 $$ = new text_element_fontname (*$3); 128 $$ = new text_element_fontname (*$3);
125 delete $3; 129 delete $3;
126 } 130 }
127 ; 131 ;
128 132
129 color_element : COLOR START simple_string END 133 color_element : COLOR START simple_string END
130 { 134 {
131 $$ = new text_element_color (*$3); 135 $$ = new text_element_color (*$3);
132 delete $3; 136 delete $3;
133 } 137 }
134 | COLOR_RGB START NUM NUM NUM END 138 | COLOR_RGB START NUM NUM NUM END
135 { 139 {
136 $$ = new text_element_color ($3, $4, $5); 140 $$ = new text_element_color ($3, $4, $5);
137 } 141 }
138 ; 142 ;
139 143
140 string_element : simple_string %prec STR 144 string_element : simple_string %prec STR
141 { 145 {
142 $$ = new text_element_string (*$1); 146 $$ = new text_element_string (*$1);
143 delete $1; 147 delete $1;
144 } 148 }
145 | scoped_string_element_list 149 | scoped_string_element_list
146 /* This is just to avoid a warning in bison. */ 150 { $$ = $1; }
147 { $$ = $1; } 151 | symbol_element
148 | symbol_element 152 | font_modifier_element
149 | font_modifier_element 153 | fontsize_element
150 | fontsize_element 154 | fontname_element
151 | fontname_element 155 | color_element
152 | color_element 156 | superscript_element %prec SCRIPT
153 | superscript_element %prec SCRIPT 157 | subscript_element %prec SCRIPT
154 | subscript_element %prec SCRIPT 158 | combined_script_element
155 | combined_script_element 159 ;
156 ; 160
157 161 superscript_element : SUPER CH
158 superscript_element : SUPER CH 162 { $$ = new text_element_superscript ($2); }
159 { $$ = new text_element_superscript ($2); } 163 | SUPER scoped_string_element_list
160 | SUPER scoped_string_element_list 164 { $$ = new text_element_superscript ($2); }
161 { $$ = new text_element_superscript ($2); } 165 | SUPER symbol_element
162 | SUPER symbol_element 166 { $$ = new text_element_superscript ($2); }
163 { $$ = new text_element_superscript ($2); } 167 ;
164 ; 168
165 169 subscript_element : SUB CH
166 subscript_element : SUB CH 170 { $$ = new text_element_subscript ($2); }
167 { $$ = new text_element_subscript ($2); } 171 | SUB scoped_string_element_list
168 | SUB scoped_string_element_list 172 { $$ = new text_element_subscript ($2); }
169 { $$ = new text_element_subscript ($2); } 173 | SUB symbol_element
170 | SUB symbol_element 174 { $$ = new text_element_subscript ($2); }
171 { $$ = new text_element_subscript ($2); } 175 ;
172 ; 176
173 177 combined_script_element : subscript_element superscript_element
174 combined_script_element : subscript_element superscript_element 178 { $$ = new text_element_combined ($1, $2); }
175 { $$ = new text_element_combined ($1, $2); } 179 | superscript_element subscript_element
176 | superscript_element subscript_element 180 { $$ = new text_element_combined ($1, $2); }
177 { $$ = new text_element_combined ($1, $2); } 181 ;
178 ; 182
179 183 string_element_list : string_element
180 string_element_list : string_element 184 { $$ = new text_element_list ($1); }
181 { $$ = new text_element_list ($1); } 185 | string_element_list string_element
182 | string_element_list string_element 186 { $1->push_back ($2); $$ = $1; }
183 { $1->push_back ($2); $$ = $1; } 187 ;
184 ; 188
185 189 scoped_string_element_list : START string_element_list END
186 scoped_string_element_list : START string_element_list END 190 { $$ = $2; }
187 { $$ = $2; } 191 | START END
188 | START END 192 { $$ = new text_element_list (); }
189 { $$ = new text_element_list (); } 193 ;
190 ; 194
191 195 string : // empty
192 string : /* empty */ 196 { parser.set_parse_result (new text_element_string ("")); }
193 { parser.set_parse_result (new text_element_string ("")); } 197 | string_element_list
194 | string_element_list 198 { parser.set_parse_result ($1); }
195 { parser.set_parse_result ($1); } 199 ;
196 ;
197 200
198 %% 201 %%
199 202
200 text_element* 203 text_element*
201 text_parser_tex::parse (const std::string& s) 204 text_parser_tex::parse (const std::string& s)