package org.fandev.lang.fan;
import com.intellij.psi.TokenType;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
/**
* @author Dror
* @date Dec 12, 2008 12:10:22 AM
*/
//TODO Add all FAN_16 token types and cleanup stuff left from JavaScript
public interface FanTokenTypes {
IElementType IDENTIFIER = new FanElementType("identifier");
IElementType WHITE_SPACE = TokenType.WHITE_SPACE;
IElementType NLS = new FanElementType("new line");
IElementType BAD_CHARACTER = TokenType.BAD_CHARACTER;
IElementType SEMANTIC_LINEFEED = new FanElementType("SEMANTIC_LINEFEED");
IElementType END_OF_LINE_COMMENT = new FanElementType("end of line comment");
IElementType FANDOC_LINE_COMMENT = new FanElementType("fandoc comment");
IElementType C_STYLE_COMMENT = new FanElementType("c style comment");
// Keywords:
IElementType ASSERT_KEYWORD = new FanElementType("assert"); // assert
IElementType BREAK_KEYWORD = new FanElementType("break"); // break
IElementType CASE_KEYWORD = new FanElementType("case"); // case
IElementType CATCH_KEYWORD = new FanElementType("catch"); // catch
IElementType CLASS_KEYWORD = new FanElementType("class"); // class
IElementType CONTINUE_KEYWORD = new FanElementType("continue"); //continue
IElementType DEFAULT_KEYWORD = new FanElementType("default"); // default
IElementType DO_KEYWORD = new FanElementType("do"); // do
IElementType ELSE_KEYWORD = new FanElementType("else"); // else
IElementType ENUM_KEYWORD = new FanElementType("enum"); //enum
IElementType POD_KEYWORD = new FanElementType("pod"); //pod
IElementType FALSE_KEYWORD = new FanElementType("false"); // false
IElementType FINALLY_KEYWORD = new FanElementType("finally"); // finally
IElementType FOR_KEYWORD = new FanElementType("for"); // for
IElementType FOREACH_KEYWORD = new FanElementType("foreach"); // foreach
IElementType IF_KEYWORD = new FanElementType("if"); // if
IElementType MIXIN_KEYWORD = new FanElementType("mixin"); // mixin
IElementType ONCE_KEYWORD = new FanElementType("once"); // once
IElementType READONLY_KEYWORD = new FanElementType("readonly"); // readonly
IElementType RETURN_KEYWORD = new FanElementType("return"); // return
IElementType SWITCH_KEYWORD = new FanElementType("switch"); // switch
IElementType THROW_KEYWORD = new FanElementType("throw"); // throw
IElementType TRUE_KEYWORD = new FanElementType("true"); // true
IElementType TRY_KEYWORD = new FanElementType("try"); // try
IElementType USING_KEYWORD = new FanElementType("using"); // using
IElementType VOLATILE_KEYWORD = new FanElementType("volatile"); // volatile
IElementType WHILE_KEYWORD = new FanElementType("while");
//Class modifiers
IElementType FINAL_KEYWORD = new FanElementType("final"); //final
//Slot Modifiers
IElementType ABSTRACT_KEYWORD = new FanElementType("abstract"); //abstract
IElementType CONST_KEYWORD = new FanElementType("const"); //const
IElementType NATIVE_KEYWORD = new FanElementType("native"); // native
IElementType NEW_KEYWORD = new FanElementType("new");
IElementType OVERRIDE_KEYWORD = new FanElementType("override"); // override
IElementType STATIC_KEYWORD = new FanElementType("static"); // static
IElementType VIRTUAL_KEYWORD = new FanElementType("virtual"); // virtual
// Fields Properties marker (TODO: Usable only if fieldDef state exists in Lexer)
IElementType GET_KEYWORD = new FanElementType("get");
IElementType SET_KEYWORD = new FanElementType("set");
//Protection
IElementType PUBLIC_KEYWORD = new FanElementType("public"); // public
IElementType PRIVATE_KEYWORD = new FanElementType("private"); // private
IElementType PROTECTED_KEYWORD = new FanElementType("protected"); // protected
IElementType INTERNAL_KEYWORD = new FanElementType("internal"); // internal
// Literals
IElementType INT_LITERAL = new FanElementType("integer literal");
IElementType FLOAT_LITERAL = new FanElementType("float literal");
IElementType DECIMAL_LITERAL = new FanElementType("decimal literal");
IElementType DURATION_LITERAL = new FanElementType("duration literal");
IElementType URI_LITERAL = new FanElementType("URI_LITERAL");
IElementType STRING_LITERAL = new FanElementType("STRING_LITERAL");
IElementType DSL_STRING = new FanElementType("DSL_STRING");
IElementType CHAR_LITERAL = new FanElementType("CHAR_LITERAL");
IElementType NULL_KEYWORD = new FanElementType("null"); // null
IElementType THIS_KEYWORD = new FanElementType("this"); // this
IElementType SUPER_KEYWORD = new FanElementType("super"); // super
IElementType FAN_SYS_TYPE = new FanElementType("SysType");
// Call operators
IElementType DOT = new FanElementType(".");// .
IElementType DYN_CALL = new FanElementType("->");// ->
IElementType SAFE_DOT = new FanElementType("?.");// .
IElementType SAFE_DYN_CALL = new FanElementType("?->");// ->
// Punctuators
IElementType COLON_EQ = new FanElementType(":=");// :=
IElementType SEMICOLON = new FanElementType(";");// ;
IElementType COMMA = new FanElementType(",");// ,
IElementType COLON = new FanElementType(":");// :
IElementType OR = new FanElementType("|");// |
IElementType LBRACE = new FanElementType("{");// {
IElementType RBRACE = new FanElementType("}");// }
IElementType LPAR = new FanElementType("(");// (
IElementType RPAR = new FanElementType(")");// )
IElementType LBRACKET = new FanElementType("[");// [
IElementType RBRACKET = new FanElementType("]");// ]
// Assignement operators <assignOp>
IElementType EQ = new FanElementType("=");// =
IElementType PLUSEQ = new FanElementType("+=");// +=
IElementType MINUSEQ = new FanElementType("-=");// -=
IElementType MULTEQ = new FanElementType("*=");// *=
IElementType DIVEQ = new FanElementType("/="); // /=
IElementType PERCEQ = new FanElementType("%=");// %=
IElementType LTLTEQ = new FanElementType("<<=");// <<=
IElementType GTGTEQ = new FanElementType(">>=");// >>=
IElementType ANDEQ = new FanElementType("&=");// &=
IElementType OREQ = new FanElementType("|=");// |=
IElementType XOREQ = new FanElementType("^=");// ^=
IElementType SHABENG = new FanElementType("#!");// #!
IElementType SHARP = new FanElementType("#");// #
IElementType AT = new FanElementType("@");// @
IElementType QUEST = new FanElementType("?");// ?
IElementType QUEST_COLON = new FanElementType("?:");// ?:
// Equality Operator <equalityOp>
IElementType EQEQ = new FanElementType("==");// ==
IElementType NE = new FanElementType("!=");// !=
IElementType EQEQEQ = new FanElementType("===");// ===
IElementType NEEQ = new FanElementType("!==");// !==
// Relational Operators <relationalOp>
IElementType IS_KEYWORD = new FanElementType("is"); // is
IElementType AS_KEYWORD = new FanElementType("as"); // as
IElementType ISNOT_KEYWORD = new FanElementType("isnot"); // isnot
IElementType LT = new FanElementType("<");// <
IElementType GT = new FanElementType(">");// >
IElementType LE = new FanElementType("<=");// <=
IElementType GE = new FanElementType(">=");// >=
IElementType COMPARE = new FanElementType("<=>");// <=>
IElementType PLUS = new FanElementType("+");// +
IElementType MINUS = new FanElementType("-");// -
IElementType MULT = new FanElementType("*");// *
IElementType DIV = new FanElementType("/"); // /
IElementType PERC = new FanElementType("%");// %
IElementType PLUSPLUS = new FanElementType("++");// ++
IElementType MINUSMINUS = new FanElementType("--");// --
IElementType LTLT = new FanElementType("<<");// <<
IElementType GTGT = new FanElementType(">>");// >>
IElementType AND = new FanElementType("&");// &
IElementType XOR = new FanElementType("^");// ^
IElementType EXCL = new FanElementType("!");// !
IElementType TILDE = new FanElementType("~");// ~
IElementType ANDAND = new FanElementType("&&");// &&
IElementType OROR = new FanElementType("||");// ||
IElementType COLON_COLON = new FanElementType("::"); // ::
IElementType RANGE_SEP_INCL = new FanElementType(".."); // ..
IElementType RANGE_SEP_EXCL = new FanElementType("..."); // ...
TokenSet COMMENTS = TokenSet.create(C_STYLE_COMMENT, END_OF_LINE_COMMENT, FANDOC_LINE_COMMENT);
TokenSet FAN_KEYWORDS =
TokenSet.create(ABSTRACT_KEYWORD, AS_KEYWORD, ASSERT_KEYWORD, BREAK_KEYWORD, CASE_KEYWORD, CATCH_KEYWORD,
CLASS_KEYWORD, CONST_KEYWORD, CONTINUE_KEYWORD, DEFAULT_KEYWORD,
DO_KEYWORD, ELSE_KEYWORD, ENUM_KEYWORD, FALSE_KEYWORD, FINAL_KEYWORD, FINALLY_KEYWORD, FOR_KEYWORD,
FOREACH_KEYWORD, IF_KEYWORD, INTERNAL_KEYWORD, IS_KEYWORD, ISNOT_KEYWORD, MIXIN_KEYWORD,
NATIVE_KEYWORD, NEW_KEYWORD,
NULL_KEYWORD, ONCE_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PROTECTED_KEYWORD, PUBLIC_KEYWORD,
READONLY_KEYWORD, RETURN_KEYWORD, STATIC_KEYWORD, SUPER_KEYWORD, SWITCH_KEYWORD, THIS_KEYWORD,
THROW_KEYWORD,
TRUE_KEYWORD, TRY_KEYWORD, USING_KEYWORD, VIRTUAL_KEYWORD, VOLATILE_KEYWORD,
WHILE_KEYWORD
);
TokenSet IDENTIFIER_TOKENS_SET = TokenSet.create(IDENTIFIER, FAN_SYS_TYPE, POD_KEYWORD);
// Modifiers
TokenSet PROTECTION = TokenSet.create(PRIVATE_KEYWORD, PROTECTED_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD);
// <classFlags> := [<protection>] ["abstract"] ["final"] ["const"]
TokenSet CLASS_MODIFIERS =
TokenSet.orSet(PROTECTION, TokenSet.create(ABSTRACT_KEYWORD, FINAL_KEYWORD, CONST_KEYWORD));
// <mixinFlags> := [<protection>] ["const"]
TokenSet MIXIN_MODIFIERS =
TokenSet.orSet(PROTECTION, TokenSet.create(CONST_KEYWORD));
// <ctorFlags> := [<protection>]
TokenSet CTOR_MODIFIERS = PROTECTION;
// <methodFlags> := [<protection>] ["virtual"] ["override"] ["abstract"] ["static"] ["once"]
/// Missing from Grammar ["native"]
TokenSet METHOD_MODIFIERS = TokenSet.orSet(PROTECTION,
TokenSet.create(ABSTRACT_KEYWORD, FINAL_KEYWORD, ONCE_KEYWORD, OVERRIDE_KEYWORD, STATIC_KEYWORD,
VIRTUAL_KEYWORD,
NATIVE_KEYWORD));
// <fieldFlags> := [<protection>] ["readonly"] ["static"]
/// Missing from Grammar ["const"] ["native"] ["volatile"] ["override"] ["virtual"] ["final"]
TokenSet FIELD_MODIFIERS =
TokenSet.orSet(PROTECTION,
TokenSet.create(READONLY_KEYWORD, STATIC_KEYWORD, CONST_KEYWORD, NATIVE_KEYWORD, OVERRIDE_KEYWORD,
VIRTUAL_KEYWORD, VOLATILE_KEYWORD, ABSTRACT_KEYWORD, FINAL_KEYWORD));
TokenSet ALL_SLOT_MODIFIERS =
TokenSet.orSet(METHOD_MODIFIERS, FIELD_MODIFIERS);
TokenSet ALL_MODIFIERS = TokenSet.orSet(
PROTECTION, TokenSet.create(
ABSTRACT_KEYWORD, CONST_KEYWORD, FINAL_KEYWORD, ONCE_KEYWORD, NATIVE_KEYWORD, READONLY_KEYWORD,
OVERRIDE_KEYWORD, STATIC_KEYWORD, VIRTUAL_KEYWORD
));
// Types
TokenSet EOL = TokenSet.create(NLS);
TokenSet SEPARATOR = TokenSet.create(SEMICOLON, NLS);
TokenSet EOS = TokenSet.create(SEMICOLON, RBRACE, NLS);
TokenSet SWITCH_BLOCK_TOKENS = TokenSet.create(RBRACE, CASE_KEYWORD, DEFAULT_KEYWORD);
TokenSet TRY_BLOCK_TOKENS = TokenSet.create(CATCH_KEYWORD, FINALLY_KEYWORD);
TokenSet ASSIGN_OP = TokenSet.create(EQ, MULTEQ, DIVEQ, PERCEQ, PLUSEQ, MINUSEQ,
GTGTEQ, LTLTEQ, ANDEQ, XOREQ, OREQ);
TokenSet EQUALITY_OP = TokenSet.create(EQEQ, NE, EQEQEQ, NEEQ);
TokenSet TYPE_COMPARE = TokenSet.create(IS_KEYWORD, AS_KEYWORD, ISNOT_KEYWORD);
TokenSet RELATIONAL_OP = TokenSet.orSet(TYPE_COMPARE, TokenSet.create(LT, LE, GT, GE, COMPARE));
TokenSet COMPARISON_OP = TokenSet.orSet(EQUALITY_OP, RELATIONAL_OP);
TokenSet BOOL_LITERALS = TokenSet.create(TRUE_KEYWORD, FALSE_KEYWORD);
TokenSet STRING_LITERALS =
TokenSet.create(URI_LITERAL, STRING_LITERAL, DSL_STRING, CHAR_LITERAL);
TokenSet NUMERIC_LITERALS =
TokenSet.create(INT_LITERAL, FLOAT_LITERAL, DECIMAL_LITERAL, DURATION_LITERAL);
TokenSet FAN_LITERALS =
TokenSet.orSet(BOOL_LITERALS, STRING_LITERALS, NUMERIC_LITERALS);
}