summaryrefslogtreecommitdiff
path: root/examples/manual/example_er.lex
diff options
context:
space:
mode:
Diffstat (limited to 'examples/manual/example_er.lex')
-rw-r--r--examples/manual/example_er.lex35
1 files changed, 35 insertions, 0 deletions
diff --git a/examples/manual/example_er.lex b/examples/manual/example_er.lex
new file mode 100644
index 0000000..284031c
--- /dev/null
+++ b/examples/manual/example_er.lex
@@ -0,0 +1,35 @@
+/* basic example, fully reentrant thread-safe version */
+%{
+ struct stats {
+ int num_lines;
+ int num_chars;
+ };
+%}
+%option reentrant noyywrap
+%option extra-type="struct stats"
+%%
+\n {
+ struct stats ns = yyget_extra(yyscanner);
+ ++ns.num_lines; ++ns.num_chars;
+ yyset_extra(ns, yyscanner);
+ }
+. {
+ struct stats ns = yyget_extra(yyscanner);
+ ++ns.num_chars;
+ yyset_extra(ns, yyscanner);
+ }
+
+%%
+
+int main() {
+ yyscan_t scanner;
+ struct stats ns;
+
+ yylex_init ( &scanner );
+ yylex ( scanner );
+
+ ns = yyget_extra(scanner);
+ printf( "# of lines = %d, # of chars = %d\n",
+ ns.num_lines, ns.num_chars);
+ yylex_destroy ( scanner );
+}