blob: c44437375646f9853be60527c0bf54c26fce8c30 [file] [log] [blame]
/* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
%{
#include "CFC.h"
#include "CFCParseHeader.h"
/* Dupe yytext and invoke Lemon-generated parser. */
#define PARSE(token_type) \
CFCParseHeader(CFCParser_current_parser, token_type, \
CFCParser_dupe(CFCParser_current_state, yytext), \
CFCParser_current_state)
%}
%option noyywrap
%option nodefault
%option yylineno
%option never-interactive
%x CBLOCK
%%
const { PARSE(CFC_TOKENTYPE_CONST); }
nullable { PARSE(CFC_TOKENTYPE_NULLABLE); }
incremented { PARSE(CFC_TOKENTYPE_INCREMENTED); }
decremented { PARSE(CFC_TOKENTYPE_DECREMENTED); }
void { PARSE(CFC_TOKENTYPE_VOID); }
float { PARSE(CFC_TOKENTYPE_FLOAT_TYPE_NAME); }
double { PARSE(CFC_TOKENTYPE_FLOAT_TYPE_NAME); }
int8_t { PARSE(CFC_TOKENTYPE_INTEGER_TYPE_NAME); }
int16_t { PARSE(CFC_TOKENTYPE_INTEGER_TYPE_NAME); }
int32_t { PARSE(CFC_TOKENTYPE_INTEGER_TYPE_NAME); }
int64_t { PARSE(CFC_TOKENTYPE_INTEGER_TYPE_NAME); }
uint8_t { PARSE(CFC_TOKENTYPE_INTEGER_TYPE_NAME); }
uint16_t { PARSE(CFC_TOKENTYPE_INTEGER_TYPE_NAME); }
uint32_t { PARSE(CFC_TOKENTYPE_INTEGER_TYPE_NAME); }
uint64_t { PARSE(CFC_TOKENTYPE_INTEGER_TYPE_NAME); }
char { PARSE(CFC_TOKENTYPE_INTEGER_TYPE_NAME); }
short { PARSE(CFC_TOKENTYPE_INTEGER_TYPE_NAME); }
int { PARSE(CFC_TOKENTYPE_INTEGER_TYPE_NAME); }
long { PARSE(CFC_TOKENTYPE_INTEGER_TYPE_NAME); }
size_t { PARSE(CFC_TOKENTYPE_INTEGER_TYPE_NAME); }
bool_t { PARSE(CFC_TOKENTYPE_INTEGER_TYPE_NAME); }
va_list { PARSE(CFC_TOKENTYPE_VA_LIST); }
true { PARSE(CFC_TOKENTYPE_TRUE); }
false { PARSE(CFC_TOKENTYPE_FALSE); }
NULL { PARSE(CFC_TOKENTYPE_NULL); }
cnick { PARSE(CFC_TOKENTYPE_CNICK); }
inherits { PARSE(CFC_TOKENTYPE_INHERITS); }
parcel { PARSE(CFC_TOKENTYPE_PARCEL); }
class { PARSE(CFC_TOKENTYPE_CLASS); }
public { PARSE(CFC_TOKENTYPE_PUBLIC); }
private { PARSE(CFC_TOKENTYPE_PRIVATE); }
local { PARSE(CFC_TOKENTYPE_LOCAL); }
inert { PARSE(CFC_TOKENTYPE_INERT); }
inline { PARSE(CFC_TOKENTYPE_INLINE); }
abstract { PARSE(CFC_TOKENTYPE_ABSTRACT); }
final { PARSE(CFC_TOKENTYPE_FINAL); }
:: { PARSE(CFC_TOKENTYPE_SCOPE_OP); }
[*] { PARSE(CFC_TOKENTYPE_ASTERISK); }
\{ { PARSE(CFC_TOKENTYPE_LEFT_CURLY_BRACE); }
\} { PARSE(CFC_TOKENTYPE_RIGHT_CURLY_BRACE); }
[\[] { PARSE(CFC_TOKENTYPE_LEFT_SQUARE_BRACKET); }
[\]] { PARSE(CFC_TOKENTYPE_RIGHT_SQUARE_BRACKET); }
[\(] { PARSE(CFC_TOKENTYPE_LEFT_PAREN); }
[\)] { PARSE(CFC_TOKENTYPE_RIGHT_PAREN); }
\.\.\. { PARSE(CFC_TOKENTYPE_ELLIPSIS); }
, { PARSE(CFC_TOKENTYPE_COMMA); }
; { PARSE(CFC_TOKENTYPE_SEMICOLON); }
: { PARSE(CFC_TOKENTYPE_COLON); }
= { PARSE(CFC_TOKENTYPE_EQUALS); }
-?0x[0-9A-Fa-f]+ { PARSE(CFC_TOKENTYPE_HEX_LITERAL); }
-?[0-9]+\.[0-9]+ { PARSE(CFC_TOKENTYPE_FLOAT_LITERAL); }
-?[0-9]+ { PARSE(CFC_TOKENTYPE_INTEGER_LITERAL); }
\"([^\"\\]|\\.)*\" { PARSE(CFC_TOKENTYPE_STRING_LITERAL); }
[a-zA-Z_][a-zA-Z0-9_]* { PARSE(CFC_TOKENTYPE_IDENTIFIER); }
__C__[[:space:]]* { BEGIN(CBLOCK); PARSE(CFC_TOKENTYPE_CBLOCK_START); }
<CBLOCK>__END_C__ { BEGIN(INITIAL); PARSE(CFC_TOKENTYPE_CBLOCK_CLOSE); }
<CBLOCK>__END_C_[^_] { PARSE(CFC_TOKENTYPE_BLOB); }
<CBLOCK>[^_]+ { PARSE(CFC_TOKENTYPE_BLOB); }
<CBLOCK>_+ { PARSE(CFC_TOKENTYPE_BLOB); }
/* Parse docucomments, but skip ordinary comments */
"/**"([^*]|"*"[^/])*"*/" { PARSE(CFC_TOKENTYPE_DOCUCOMMENT); }
"/*"([^*]|"*"[^/])*"*/"
[ \t\r\n] /* Skip whitespace. */
<*>. {
printf("Bad input character '%s' at line %d\n", yytext, yylineno);
yyterminate();
}
<<EOF>> { yyterminate(); }
%%