summaryrefslogtreecommitdiffstats
path: root/vendor/modernc.org/cc/v3/lexer.l
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/modernc.org/cc/v3/lexer.l')
-rw-r--r--vendor/modernc.org/cc/v3/lexer.l97
1 files changed, 97 insertions, 0 deletions
diff --git a/vendor/modernc.org/cc/v3/lexer.l b/vendor/modernc.org/cc/v3/lexer.l
new file mode 100644
index 00000000..4a2bf53a
--- /dev/null
+++ b/vendor/modernc.org/cc/v3/lexer.l
@@ -0,0 +1,97 @@
+%{
+// Copyright 2019 The CC Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+%}
+
+%yyc c
+%yyn c = s.next()
+%yym s.mark = len(s.charBuf)
+
+%{
+package cc // import "modernc.org/cc/v3"
+
+func (s *scanner) scan() (r rune) {
+%}
+
+c-char [^'\n\x80\\]|{escape-sequence}
+c-char-sequence {c-char}+
+character-constant '{c-char-sequence}'
+comment "/*"([^*\x80]|\*+[^*/\x80])*\*+\/
+comment-not-terminated "/*"([^*\x80]|\*+[^*/\x80])*(\*+)?\n\x80
+digit [0-9]
+escape-sequence {simple-sequence}|{octal-escape-sequence}|{hexadecimal-escape-sequence}|{universal-character-name}
+hex-quad {hexadecimal-digit}{hexadecimal-digit}{hexadecimal-digit}{hexadecimal-digit}
+hexadecimal-digit [0-9a-fA-F]
+hexadecimal-escape-sequence \\x{hexadecimal-digit}+
+identifier {identifier-nondigit}({identifier-nondigit}|{digit}|"$")*
+identifier-nondigit {nondigit}|"$"|{universal-character-name}
+line-comment "//"[^\n\x80]*
+nondigit [_a-zA-Z\x81]
+octal-digit [0-7]
+octal-escape-sequence \\{octal-digit}{octal-digit}?{octal-digit}?
+pp-number ({digit}|\.{digit})({digit}|{identifier-nondigit}|[eEpP]{sign}|\.)*
+s-char [^\x22\n\x80\\]|{escape-sequence}
+s-char-sequence {s-char}+
+sign [-+]
+simple-sequence \\['\x22?\\abefnrtv]
+string-literal \x22{s-char-sequence}?\x22
+universal-character-name \\u{hex-quad}|\\U{hex-quad}{hex-quad}
+white-space [ \t\f\v]
+
+%%
+ c := s.initScan()
+
+({white-space}|{comment})*{line-comment} |
+({white-space}|{comment})+{line-comment}?
+ return ' '
+
+(({white-space}|{comment})*{comment-not-terminated})+
+ return s.unterminatedComment()
+
+"!=" return NEQ
+"##" return PPPASTE
+"%:" return '#'
+"%:%:" return PPPASTE
+"%=" return MODASSIGN
+"%>" return '}'
+"&&" return ANDAND
+"&=" return ANDASSIGN
+"*=" return MULASSIGN
+"++" return INC
+"+=" return ADDASSIGN
+"--" return DEC
+"-=" return SUBASSIGN
+"->" return ARROW
+"..." return DDD
+"/=" return DIVASSIGN
+":>" return ']'
+"<%" return '{'
+"<:" return '['
+"<<" return LSH
+"<<=" return LSHASSIGN
+"<=" return LEQ
+"==" return EQ
+">=" return GEQ
+">>" return RSH
+">>=" return RSHASSIGN
+"^=" return XORASSIGN
+"|=" return ORASSIGN
+"||" return OROR
+
+L{string-literal} return LONGSTRINGLITERAL
+L{character-constant} return LONGCHARCONST
+{character-constant} return CHARCONST
+{identifier} return IDENTIFIER
+{pp-number} return PPNUMBER
+{string-literal} return STRINGLITERAL
+
+\r?\n return '\n'
+
+%%
+ if c, ok := s.abort(); ok {
+ return rune(c)
+ }
+
+ goto yyAction
+}