gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

lexer.l (2612B)


      1 %{
      2 // Copyright 2019 The CC Authors. All rights reserved.
      3 // Use of this source code is governed by a BSD-style
      4 // license that can be found in the LICENSE file.
      5 %}
      6 
      7 %yyc c
      8 %yyn c = s.next()
      9 %yym s.mark = len(s.charBuf)
     10 
     11 %{
     12 package cc // import "modernc.org/cc/v3"
     13 
     14 func (s *scanner) scan() (r rune) {
     15 %}
     16 
     17 c-char				[^'\n\x80\\]|{escape-sequence}
     18 c-char-sequence			{c-char}+
     19 character-constant		'{c-char-sequence}'
     20 comment				"/*"([^*\x80]|\*+[^*/\x80])*\*+\/
     21 comment-not-terminated		"/*"([^*\x80]|\*+[^*/\x80])*(\*+)?\n\x80
     22 digit				[0-9]
     23 escape-sequence			{simple-sequence}|{octal-escape-sequence}|{hexadecimal-escape-sequence}|{universal-character-name}
     24 hex-quad			{hexadecimal-digit}{hexadecimal-digit}{hexadecimal-digit}{hexadecimal-digit}
     25 hexadecimal-digit		[0-9a-fA-F]
     26 hexadecimal-escape-sequence	\\x{hexadecimal-digit}+
     27 identifier			{identifier-nondigit}({identifier-nondigit}|{digit}|"$")*
     28 identifier-nondigit		{nondigit}|"$"|{universal-character-name}
     29 line-comment			"//"[^\n\x80]*
     30 nondigit			[_a-zA-Z\x81]
     31 octal-digit			[0-7]
     32 octal-escape-sequence		\\{octal-digit}{octal-digit}?{octal-digit}?
     33 pp-number			({digit}|\.{digit})({digit}|{identifier-nondigit}|[eEpP]{sign}|\.)*
     34 s-char				[^\x22\n\x80\\]|{escape-sequence}
     35 s-char-sequence			{s-char}+
     36 sign				[-+]
     37 simple-sequence			\\['\x22?\\abefnrtv]
     38 string-literal			\x22{s-char-sequence}?\x22
     39 universal-character-name	\\u{hex-quad}|\\U{hex-quad}{hex-quad}
     40 white-space			[ \t\f\v]
     41 
     42 %%
     43 			c := s.initScan()
     44 
     45 ({white-space}|{comment})*{line-comment}	|
     46 ({white-space}|{comment})+{line-comment}?
     47 			return ' '
     48 
     49 (({white-space}|{comment})*{comment-not-terminated})+
     50 			return s.unterminatedComment()
     51 
     52 "!="			return NEQ
     53 "##"			return PPPASTE
     54 "%:"			return '#'
     55 "%:%:"			return PPPASTE
     56 "%="			return MODASSIGN
     57 "%>"			return '}'
     58 "&&"			return ANDAND
     59 "&="			return ANDASSIGN
     60 "*="			return MULASSIGN
     61 "++"			return INC
     62 "+="			return ADDASSIGN
     63 "--"			return DEC
     64 "-="			return SUBASSIGN
     65 "->"			return ARROW
     66 "..."			return DDD
     67 "/="			return DIVASSIGN
     68 ":>"			return ']'
     69 "<%"			return '{'
     70 "<:"			return '['
     71 "<<"			return LSH
     72 "<<="			return LSHASSIGN
     73 "<="			return LEQ
     74 "=="			return EQ
     75 ">="			return GEQ
     76 ">>"			return RSH
     77 ">>="			return RSHASSIGN
     78 "^="			return XORASSIGN
     79 "|="			return ORASSIGN
     80 "||"			return OROR
     81 
     82 L{string-literal}	return LONGSTRINGLITERAL
     83 L{character-constant}	return LONGCHARCONST
     84 {character-constant}	return CHARCONST
     85 {identifier}		return IDENTIFIER
     86 {pp-number}		return PPNUMBER
     87 {string-literal}	return STRINGLITERAL
     88 
     89 \r?\n			return '\n'
     90 
     91 %%
     92         if c, ok := s.abort(); ok {
     93                 return rune(c)
     94         }
     95         
     96         goto yyAction
     97 }