File: syntax.lxx

package info (click to toggle)
latte 2.1-9
  • links: PTS
  • area: main
  • in suites: woody
  • size: 2,064 kB
  • ctags: 1,223
  • sloc: sh: 7,506; cpp: 5,831; ansic: 662; perl: 628; makefile: 350; yacc: 196; lisp: 114
file content (89 lines) | stat: -rw-r--r-- 2,798 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/* Copyright 1998,1999 Zanshin Inc.          <http://www.zanshin.com/>
 *
 * The contents of this file are subject to the Zanshin Public License Version
 * 1.0 (the "License"); you may not use this file except in compliance with the
 * License.  You should have received a copy of the License with Latte; see
 * the file COPYING.  You may also obtain a copy of the License at
 * <http://www.zanshin.com/ZPL.html>.
 * 
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 * 
 * The Original Code is Latte.
 * 
 * The Initial Developer of the Original Code is Zanshin, Inc.
 */

%option c++
%option 8bit
%option noyywrap
%option yyclass="Latte_Reader"
%option yylineno
%option prefix="latte"

%x QuotedStr

%{
#define DONT_INCLUDE_FLEXLEXER
#include <latte.h>
#include <grammar.tab.h>
%}

identifier [A-Za-z_][A-Za-z_0-9?!+-]*
space " "
tab \t

%%

{space}+ { m_column += YYLeng(); m_ws.space(YYLeng()); }
{tab}+   { m_column = m_ws.tab(YYLeng(), m_column); }

\{     { ++m_column; return '{'; }

\}     { ++m_column; return '}'; }

\r\n { m_column = 0; m_ws.crlf(1); }
\r   { m_column = 0; m_ws.cr(1); }
\n   { m_column = 0; m_ws.lf(1); }

\\;.*\r\n   { m_column = 0; }
\\;.*[\r\n] { m_column = 0; }
\\;.*       { /* must be EOF, do nothing */ }

\\\/ { m_column += 2; m_ws.reset_ws(); }

\\[ \t]*\r\n   { m_column = 0; }
\\[ \t]*[\r\n] { m_column = 0; }

\\{identifier}	  { m_column += YYLeng(); return VAR_REF; }
\\={identifier}	  { m_column += YYLeng(); return PARAM_NAME; }
\\{identifier}=	  { m_column += YYLeng(); return PARAM_ASSIGN; }
\\&{identifier}	  { m_column += YYLeng(); return REST_PARAM; }

\\'  { m_column += 2; return QUOTE; }
\\`  { m_column += 2; return QUASIQUOTE; }
\\,@ { m_column += 3; return UNQUOTE_SPLICING; }
\\,  { m_column += 2; return UNQUOTE; }

([^ \t\\{}\r\n]|(\\[ \t\\{}]))+ { m_column += YYLeng(); return STR; }

\\\" { m_column += 2;
       m_quoted_string_line = yylineno;
       BEGIN(QuotedStr); }
<QuotedStr>\\\" { m_column += 2;
                  yyleng -= 2;
                  /* why was this here?   m_ws.reset_ws(); */
                  BEGIN(0);
                  return STR; }
<QuotedStr>\r\n { m_column = 0; yymore(); }
<QuotedStr>\r { m_column = 0; yymore(); }
<QuotedStr>\n { m_column = 0; yymore(); }
<QuotedStr>[^\\\r\n\t] { ++m_column; yymore(); }
<QuotedStr>{tab} { Latte_Wstate tmpws;
                   m_column = tmpws.tab(1, m_column);
                   yymore(); }
<QuotedStr>\\[^"] { m_column += 2; yymore(); }
<QuotedStr><<EOF>> { throw IncompleteString(Latte_FileLoc(filename(),
                                             m_quoted_string_line)); }