| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package fuchsia.developer.plugin.fidl; |
| |
| import com.intellij.lexer.FlexLexer; |
| import com.intellij.psi.tree.IElementType; |
| import com.intellij.psi.TokenType; |
| import static fuchsia.developer.plugin.fidl.psi.Types.*; |
| |
| import static com.intellij.psi.TokenType.BAD_CHARACTER; |
| import static com.intellij.psi.TokenType.WHITE_SPACE; |
| |
| %% |
| |
| %{ |
| public FidlLexer() { |
| this((java.io.Reader)null); |
| } |
| %} |
| |
| %public |
| %class FidlLexer |
| %implements FlexLexer |
| %function advance |
| %type IElementType |
| %unicode |
| |
| EOL=\R |
| WHITE_SPACE=\s+ |
| |
| // Reserved words |
| ARRAY=array |
| AS=as |
| BITS=bits |
| BYTES=bytes |
| CHANNEL=channel |
| COMPOSE=compose |
| CONST=const |
| ENUM=enum |
| ERROR=error |
| EVENT=event |
| EVENTPAIR=eventpair |
| FIFO=fifo |
| GUEST=guest |
| HANDLE=handle |
| INTERFACE=interface |
| INTERRUPT=interrupt |
| JOB=job |
| LIBRARY=library |
| LOG=log |
| PORT=port |
| PROCESS=process |
| PROTOCOL=protocol |
| REQUEST=request |
| RESERVED=reserved |
| RESOURCE=resource |
| SOCKET=socket |
| STRING=string |
| STRUCT=struct |
| TABLE=table |
| THREAD=thread |
| TIMER=timer |
| UNION=union |
| USING_T=using |
| VECTOR=vector |
| VMAR=vmar |
| VMO=vmo |
| XUNION=xunion |
| |
| // Scalar types |
| BOOL=bool |
| FLOAT32=float32 |
| FLOAT64=float64 |
| INT8=int8 |
| INT16=int16 |
| INT32=int32 |
| INT64=int64 |
| UINT8=uint8 |
| UINT16=uint16 |
| UINT32=uint32 |
| UINT64=uint64 |
| |
| // Operators, etc. |
| OBRACE="{" |
| CBRACE="}" |
| SEMICOLON=";" |
| DOT="." |
| COMMA="," |
| OPAREN="(" |
| CPAREN=")" |
| OBRACKET="[" |
| CBRACKET="]" |
| EQUALS="=" |
| COLON=":" |
| ARROW="->" |
| QUESTION="?" |
| LANGLE="<" |
| RANGLE=">" |
| |
| // Literals |
| TRUE="true" |
| FALSE="false" |
| STRING_LITERAL=\"([^\"\\]|\\.)*\" |
| DECIMAL_FLOAT_LITERAL=[+-]?[0-9]+(\.[0-9]+) |
| DECIMAL_INTEGRAL_LITERAL=[+-]?[0-9]+ |
| HEX_INTEGRAL_LITERAL=[+-]?0[Xx][0-9a-fA-F]+ |
| BINARY_INTEGRAL_LITERAL=[+-]?0[Bb][0-1]+ |
| |
| IDENTIFIER=[:letter:][a-zA-Z_0-9]* |
| DOC_COMMENT="///".* |
| LINE_COMMENT="//".* |
| |
| %% |
| <YYINITIAL> { |
| {WHITE_SPACE} { return WHITE_SPACE; } |
| |
| {TRUE} { return TRUE; } |
| {FALSE} { return FALSE; } |
| {LIBRARY} { return LIBRARY; } |
| {USING_T} { return USING_T; } |
| {AS} { return AS; } |
| {BITS} { return BITS; } |
| {BYTES} { return BYTES; } |
| {CONST} { return CONST; } |
| {ENUM} { return ENUM; } |
| {INTERFACE} { return INTERFACE; } |
| {PROTOCOL} { return PROTOCOL; } |
| {COMPOSE} { return COMPOSE; } |
| {STRUCT} { return STRUCT; } |
| {TABLE} { return TABLE; } |
| {UNION} { return UNION; } |
| {XUNION} { return XUNION; } |
| {ERROR} { return ERROR; } |
| {ARRAY} { return ARRAY; } |
| {VECTOR} { return VECTOR; } |
| {STRING} { return STRING; } |
| {HANDLE} { return HANDLE; } |
| {PROCESS} { return PROCESS; } |
| {THREAD} { return THREAD; } |
| {VMO} { return VMO; } |
| {CHANNEL} { return CHANNEL; } |
| {EVENT} { return EVENT; } |
| {PORT} { return PORT; } |
| {INTERRUPT} { return INTERRUPT; } |
| {LOG} { return LOG; } |
| {SOCKET} { return SOCKET; } |
| {RESOURCE} { return RESOURCE; } |
| {EVENTPAIR} { return EVENTPAIR; } |
| {JOB} { return JOB; } |
| {VMAR} { return VMAR; } |
| {FIFO} { return FIFO; } |
| {GUEST} { return GUEST; } |
| {TIMER} { return TIMER; } |
| {REQUEST} { return REQUEST; } |
| {RESERVED} { return RESERVED; } |
| {BOOL} { return BOOL; } |
| {FLOAT32} { return FLOAT32; } |
| {FLOAT64} { return FLOAT64; } |
| {INT8} { return INT8; } |
| {INT16} { return INT16; } |
| {INT32} { return INT32; } |
| {INT64} { return INT64; } |
| {UINT8} { return UINT8; } |
| {UINT16} { return UINT16; } |
| {UINT32} { return UINT32; } |
| {UINT64} { return UINT64; } |
| |
| {OBRACE} { return OBRACE; } |
| {CBRACE} { return CBRACE; } |
| {SEMICOLON} { return SEMICOLON; } |
| {DOT} { return DOT; } |
| {COMMA} { return COMMA; } |
| {OPAREN} { return OPAREN; } |
| {CPAREN} { return CPAREN; } |
| {OBRACKET} { return OBRACKET; } |
| {CBRACKET} { return CBRACKET; } |
| {EQUALS} { return EQUALS; } |
| {COLON} { return COLON; } |
| {ARROW} { return ARROW; } |
| {QUESTION} { return QUESTION; } |
| {LANGLE} { return LANGLE; } |
| {RANGLE} { return RANGLE; } |
| {IDENTIFIER} { return IDENTIFIER; } |
| {STRING_LITERAL} { return STRING_LITERAL; } |
| {DECIMAL_FLOAT_LITERAL} { return DECIMAL_FLOAT_LITERAL; } |
| {DECIMAL_INTEGRAL_LITERAL} { return DECIMAL_INTEGRAL_LITERAL; } |
| {HEX_INTEGRAL_LITERAL} { return HEX_INTEGRAL_LITERAL; } |
| {BINARY_INTEGRAL_LITERAL} { return BINARY_INTEGRAL_LITERAL; } |
| {DOC_COMMENT} { return DOC_COMMENT; } |
| {LINE_COMMENT} { return LINE_COMMENT; } |
| |
| [^] { return BAD_CHARACTER; } |
| } |