diff options
Diffstat (limited to 'vendor/modernc.org/cc/v3/lexer.l')
-rw-r--r-- | vendor/modernc.org/cc/v3/lexer.l | 97 |
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 +} |