/* vim: ts=4 sw=4 sts=4 ff=unix fenc=utf-8 : * ===================================================================== * kscript_token.h * Copyright (c) 2003 - 2011 sys0tem * LICENSE : * LGPL (GNU Lesser General Public License - Version 3,29 June 2007) * http://www.gnu.org/copyleft/lesser.html * or * EPL (Eclipse Public License - v1.0) * http://www.eclipse.org/legal/epl-v10.html * ===================================================================== */ #ifndef __KSCRIPT_TOKEN_H__ #define __KSCRIPT_TOKEN_H__ #include <sc_stdbool.h> #include <sc_list.h> #include <sc_string.h> enum TokenType { T_UNKNOWN, /*< Unknown */ T_EOF, /*< End Of File */ T_EOL, /*< End Of Line */ T_SPACE, /*< Space (\u0020, \u0009, \u000b, \u000c) */ T_COMMENT, /*< Comment */ T_IDENTIFIER, /*< 識別子 */ T_STRING, /*< 文字列リテラル */ T_COMMAND, /*< コマンドリテラル */ T_CHARACTER, /*< 文字リテラル */ T_INTEGER, /*< 整数リテラル */ T_FLOAT, /*< 浮動少数リテラル */ T_KEYWORD, /*< キーワード */ T_NOT, /*< ! */ T_NOTE, /*< != */ T_NOTLT, /*< !< */ T_NOTGT, /*< !> */ T_NOTLTE, /*< !<= */ T_NOTGTE, /*< !>= */ T_NOTLTGT, /*< !<> */ T_NOTLTGTE, /*< !<>= */ T_LT, /*< < */ T_ARROWL, /*< <- */ T_LTE, /*< <= */ T_LTD, /*< << */ T_LTGT, /*< <> */ T_LTDE, /*< <<= */ T_LTGTE, /*< <>= */ T_HTMLCOMMENTS, /*< <!-- */ T_GT, /*< > */ T_GTE, /*< >= */ T_GTD, /*< >> */ T_GTDE, /*< >>= */ T_GTT, /*< >>> */ T_GTTE, /*< >>>= */ T_DOT, /*< . */ T_DOTD, /*< .. */ T_DOTT, /*< ... */ T_AMP, /*< & */ T_AMPE, /*< &= */ T_AMPD, /*< && */ T_PIPE, /*< | */ T_PIPEE, /*< |= */ T_PIPED, /*< || */ T_MINUS, /*< - */ T_MINUSE, /*< -= */ T_MINUSD, /*< -- */ T_ARROWR, /*< -> */ T_HTMLCOMMENTE, /*< --> */ T_PLUS, /*< + */ T_PLUSE, /*< += */ T_PLUSD, /*< ++ */ T_SLASH, /*< / */ T_SLASHE, /*< /= */ T_STAR, /*< * */ T_STARE, /*< *= */ T_EQUAL, /*< = */ T_EQUALE, /*< == */ T_PARCENT, /*< % */ T_PARCENTE, /*< %= */ T_HAT, /*< ^ */ T_HATE, /*< ^= */ T_TILD, /*< ~ */ T_TILDE, /*< ~= */ T_HASH, /*< # */ T_SHELLHEAD, /*< #! */ T_QUESTION, /*< ? */ T_PARENL, /*< ( */ T_PARENR, /*< ) */ T_BRACKETL, /*< [ */ T_BRACKETR, /*< ] */ T_CURLYL, /*< { */ T_CURLYR, /*< } */ T_SEMICOLON, /*< ; */ T_COLON, /*< : */ T_DOLLAR, /*< $ */ T_AT, /*< @ */ T_ESCAPE /*< \ */ }; enum Keyword { K_UNKNOWN, /*< no keyword */ K_ABSTRACT, /*< abstract */ K_ALIAS, /*< alias */ K_ALIGN, /*< align */ K_ASM, /*< asm */ K_ASSERT, /*< assert */ K_AUTO, /*< auto */ K_BODY, /*< body */ K_BOOL, /*< bool */ K_BREAK, /*< break */ K_BYTE, /*< byte */ K_CASE, /*< case */ K_CAST, /*< cast */ K_CATCH, /*< catch */ K_CDOUBLE, /*< cdouble */ K_CENT, /*< cent */ K_CFLOAT, /*< cfloat */ K_CHAR, /*< char */ K_CLASS, /*< class */ K_CONST, /*< const */ K_CONTINUE, /*< continue */ K_CREAL, /*< creal */ K_DCHAR, /*< dchar */ K_DEBUG, /*< debug */ K_DEFAULT, /*< default */ K_DELEGATE, /*< delegate */ K_DELETE, /*< delete */ K_DEPRECATED, /*< deprecated */ K_DO, /*< do */ K_DOUBLE, /*< double */ K_ELSE, /*< else */ K_ENUM, /*< enum */ K_EXPORT, /*< export */ K_EXTERN, /*< extern */ K_FALSE, /*< false */ K_FINAL, /*< final */ K_FINALLY, /*< finally */ K_FLOAT, /*< float */ K_FOR, /*< for */ K_FOREACH, /*< foreach */ K_FUNCTION, /*< function */ K_FOREACH_REVERSE, /*< foreach_reverse */ K_GOTO, /*< goto */ K_IDOUBLE, /*< idouble */ K_IF, /*< if */ K_IFLOAT, /*< ifloat */ K_IMPORT, /*< import */ K_IN, /*< in */ K_INOUT, /*< inout */ K_INT, /*< int */ K_INTERFACE, /*< interface */ K_INVARIANT, /*< invariant */ K_IREAL, /*< ireal */ K_IS, /*< is */ K_LAZY, /*< lazy */ K_LONG, /*< long */ K_MACRO, /*< macro */ K_MIXIN, /*< mixin */ K_MODULE, /*< module */ K_NEW, /*< new */ K_NOTHROW, /*< nothrow */ K_NULL, /*< null */ K_OUT, /*< out */ K_OVERRIDE, /*< override */ K_PACKAGE, /*< package */ K_PRAGMA, /*< pragma */ K_PRIVATE, /*< private */ K_PROTECTED, /*< protected */ K_PUBLIC, /*< public */ K_PURE, /*< pure */ K_REAL, /*< real */ K_REF, /*< ref */ K_RETURN, /*< return */ K_SCOPE, /*< scope */ K_SHARED, /*< shared */ K_SHORT, /*< short */ K_STATIC, /*< static */ K_STRUCT, /*< struct */ K_SUPER, /*< super */ K_SWITCH, /*< switch */ K_SYNCHRONIZED, /*< synchronized */ K_TEMPLATE, /*< template */ K_THIS, /*< this */ K_THROW, /*< throw */ K_TRUE, /*< true */ K_TRY, /*< try */ K_TYPEDEF, /*< typedef */ K_TYPEID, /*< typeid */ K_TYPEOF, /*< typeof */ K_UBYTE, /*< ubyte */ K_UCENT, /*< ucent */ K_UINT, /*< uint */ K_ULONG, /*< ulong */ K_UNION, /*< union */ K_UNITTEST, /*< unittest */ K_USHORT, /*< ushort */ K_VERSION, /*< version */ K_VOID, /*< void */ K_VOLATILE, /*< volatile */ K_WCHAR, /*< wchar */ K_WHILE, /*< while */ K_WITH, /*< with */ K___FILE__, /*< __FILE__ */ K___LINE__, /*< __LINE__ */ K___GSHARED, /*< __gshared */ K___THREAD, /*< __thread */ K___TRAITS /*< __traits */ }; typedef struct { enum TokenType tokenType; /*< トークン種別 */ enum Keyword tokenKeyword; /*< キーワード */ SC_String* tokenString; /*< トークン文字列 */ int lineNumber; /*< 行番号 */ } KScriptToken; typedef struct { SC_List* token; /*< トークンリスト */ SC_String* tmpBuff; /*< 一時使用バッファ */ char* ptr; /*< 現在の解析位置 */ bool isNowBlockComment; /*< 現在コメントブロック中か */ int nestingComment; /*< ネストコメントカウント */ } KScriptTokenStatus; #ifdef __cplusplus extern "C" { #endif void KScript_parseLine(KScriptTokenStatus* status, char* line, int lineNum); #ifdef __cplusplus } #endif #endif /* __KSCRIPT_TOKEN_H__ */