FPC关键字

 

先看下词法分析所有命令字.
       (str:''              ;special:true ;keyword:m_none;op:NOTOKEN),            
    { Operators which can be overloaded }    以下这些操作符可以被重载
      (str:'+'             ;special:true ;keyword:m_none;op:NOTOKEN),           _PLUS,  加

      (str:'-'             ;special:true ;keyword:m_none;op:NOTOKEN),           _MINUS,    减

      (str:'*'             ;special:true ;keyword:m_none;op:NOTOKEN),           _STAR,    乘

      (str:'/'             ;special:true ;keyword:m_none;op:NOTOKEN),           _SLASH, 除

      (str:'='             ;special:true ;keyword:m_none;op:NOTOKEN),           _EQ,    等

      (str:'>'             ;special:true ;keyword:m_none;op:NOTOKEN),           _GT,    大于

      (str:'<'             ;special:true ;keyword:m_none;op:NOTOKEN),           _LT,    小于

      (str:'>='            ;special:true ;keyword:m_none;op:NOTOKEN),           _GTE,    大于等于

      (str:'<='            ;special:true ;keyword:m_none;op:NOTOKEN),           _LTE,    小于等于

      (str:'<>'            ;special:true ;keyword:m_none;op:NOTOKEN),           _NE,    不等于

      (str:'><'            ;special:true ;keyword:m_none;op:NOTOKEN),           _SYMDIF,    集合并集    

      (str:'**'            ;special:true ;keyword:m_none;op:NOTOKEN),           _STARSTAR,    幂

      (str:'as'            ;special:true ;keyword:m_none;op:NOTOKEN),           _OP_AS,        as
      (str:'in'            ;special:true ;keyword:m_none;op:NOTOKEN),           _OP_IN,        in
      (str:'is'            ;special:true ;keyword:m_none;op:NOTOKEN),           _OP_IS,        is
      (str:'or'            ;special:true ;keyword:m_none;op:NOTOKEN),           _OP_OR,        os
      (str:'and'           ;special:true ;keyword:m_none;op:NOTOKEN),           _OP_AND,    and     
      (str:'div'           ;special:true ;keyword:m_none;op:NOTOKEN),           _OP_DIV,    div
      (str:'mod'           ;special:true ;keyword:m_none;op:NOTOKEN),           _OP_MOD,    mod    
      (str:'not'           ;special:true ;keyword:m_none;op:NOTOKEN),           _OP_NOT,    not
      (str:'shl'           ;special:true ;keyword:m_none;op:NOTOKEN),           _OP_SHL,    shl
      (str:'shr'           ;special:true ;keyword:m_none;op:NOTOKEN),           _OP_SHR,    shr
      (str:'xor'           ;special:true ;keyword:m_none;op:NOTOKEN),           _OP_XOR,    xor
      (str:':='            ;special:true ;keyword:m_none;op:NOTOKEN),           _ASSIGNMENT,    赋值
      (str:'explicit'      ;special:true ;keyword:m_none;op:NOTOKEN),           _OP_EXPLICIT,    显式
      (str:'enumerator'    ;special:true ;keyword:m_none;op:NOTOKEN),           _OP_ENUMERATOR,    枚举
      (str:'inc'           ;special:true ;keyword:m_none;op:NOTOKEN),           _OP_INC,    累加
      (str:'dec'           ;special:true ;keyword:m_none;op:NOTOKEN),           _OP_DEC,    累减

    { Special chars }特定命令字
      (str:'^'             ;special:true ;keyword:m_none;op:NOTOKEN),           _CARET,        异或

      (str:'['             ;special:true ;keyword:m_none;op:NOTOKEN),           _LECKKLAMMER,    左方括号

      (str:']'             ;special:true ;keyword:m_none;op:NOTOKEN),           _RECKKLAMMER,    右方括号

      (str:'.'             ;special:true ;keyword:m_none;op:NOTOKEN),           _POINT,        点

      (str:','             ;special:true ;keyword:m_none;op:NOTOKEN),           _COMMA,        逗号

      (str:'('             ;special:true ;keyword:m_none;op:NOTOKEN),           _LKLAMMER,    左括号

      (str:')'             ;special:true ;keyword:m_none;op:NOTOKEN),           _RKLAMMER,    右括号

      (str:':'             ;special:true ;keyword:m_none;op:NOTOKEN),           _COLON,        冒号

      (str:';'             ;special:true ;keyword:m_none;op:NOTOKEN),           _SEMICOLON,    分号

      (str:'@'             ;special:true ;keyword:m_none;op:NOTOKEN),           _KLAMMERAFFE,    at号

      (str:'..'            ;special:true ;keyword:m_none;op:NOTOKEN),           _POINTPOINT,    双点号

      (str:'...'           ;special:true ;keyword:m_none;op:NOTOKEN),           _POINTPOINTPOINT,    三点号

      (str:'|'             ;special:true ;keyword:m_none;op:NOTOKEN),           _PIPE,        或
    
      (str:'&'             ;special:true ;keyword:m_none;op:NOTOKEN),           _AMPERSAND,    且

      (str:'end of file'   ;special:true ;keyword:m_none;op:NOTOKEN),           _EOF,    文件结束
      (str:'identifier'    ;special:true ;keyword:m_none;op:NOTOKEN),           _ID,    ID
      (str:'non identifier';special:true ;keyword:m_none;op:NOTOKEN),           _NOID,    nodeID
      (str:'const real'    ;special:true ;keyword:m_none;op:NOTOKEN),           _REALNUMBER,    浮点常量
      (str:'ordinal const' ;special:true ;keyword:m_none;op:NOTOKEN),           _INTCONST,    整形常量
      (str:'const string'  ;special:true ;keyword:m_none;op:NOTOKEN),           _CSTRING,    字符串常量
      (str:'const char'    ;special:true ;keyword:m_none;op:NOTOKEN),           _CCHAR,        字符常量
      (str:'const wstring' ;special:true ;keyword:m_none;op:NOTOKEN),           _CWSTRING,    宽字符串常量
      (str:'const wchar'   ;special:true ;keyword:m_none;op:NOTOKEN),           _CWCHAR,    宽字符常量
      (str:'<'             ;special:true ;keyword:m_none;op:NOTOKEN),           _LSHARPBRACKET,    左尖括号
      (str:'>'             ;special:true ;keyword:m_none;op:NOTOKEN),           _RSHARPBRACKET,    右尖括号


    { C like operators }
      (str:'+='            ;special:true ;keyword:m_none;op:NOTOKEN),           _PLUSASN,    加等于
      (str:'-='            ;special:true ;keyword:m_none;op:NOTOKEN),           _MINUSASN,    减等于
      (str:'&='            ;special:true ;keyword:m_none;op:NOTOKEN),           _ANDASN,    且等于
      (str:'|='            ;special:true ;keyword:m_none;op:NOTOKEN),           _ORASN,        或等于
      (str:'*='            ;special:true ;keyword:m_none;op:NOTOKEN),           _STARASN,    乘等于
      (str:'/='            ;special:true ;keyword:m_none;op:NOTOKEN),           _SLASHASN,    除等于

      (str:''              ;special:true ;keyword:m_none;op:NOTOKEN),           _MODASN,    
      (str:''              ;special:true ;keyword:m_none;op:NOTOKEN),           _DIVASN,    
      (str:''              ;special:true ;keyword:m_none;op:NOTOKEN),           _NOTASN,    
      (str:''              ;special:true ;keyword:m_none;op:NOTOKEN),           _XORASN,
      (str:'gen. spec.'    ;special:true ;keyword:m_none;op:NOTOKEN),           _GENERICSPECIALTOKEN,




    { Normal words -- ATTENTION: These words must be sorted: }    保留字,这些保留字必须要被存储
    { first in length order, then in alphabetical order.     }        以下这保留字,被存储在一个二维数组中,长度及开头字符为下标,必须遵行长度小的在前面相同开头字符在一起
      (str:'C'             ;special:false;keyword:m_none;op:NOTOKEN),                                                           _C,    
      (str:'AS'            ;special:false;keyword:m_class;op:_OP_AS),                                                           _AS,    
      (str:'AT'            ;special:false;keyword:m_none;op:NOTOKEN),                                                           _AT,
      (str:'DO'            ;special:false;keyword:m_all;op:NOTOKEN),                                                            _DO,
      (str:'IF'            ;special:false;keyword:m_all;op:NOTOKEN),                                                            _IF,
      (str:'IN'            ;special:false;keyword:m_all;op:_OP_IN),                                                             _IN,
      (str:'IS'            ;special:false;keyword:m_class;op:_OP_IS),                                                           _IS,
      (str:'OF'            ;special:false;keyword:m_all;op:NOTOKEN),                                                            _OF,
      (str:'ON'            ;special:false;keyword:m_none;op:NOTOKEN),                                                           _ON,
      (str:'OR'            ;special:false;keyword:m_all;op:_OP_OR),                                                             _OR,
      (str:'TO'            ;special:false;keyword:m_all;op:NOTOKEN),                                                            _TO,
      (str:'ADD'           ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _ADD,
      (str:'AND'           ;special:false;keyword:m_all;op:_OP_AND),                                                            _AND,
      (str:'ASM'           ;special:false;keyword:m_all;op:NOTOKEN),                                                            _ASM,
      (str:'DEC'           ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _DEC,
      (str:'DIV'           ;special:false;keyword:m_all;op:_OP_DIV),                                                            _DIV,
      (str:'END'           ;special:false;keyword:m_all;op:NOTOKEN),                                                            _END,
      (str:'FAR'           ;special:false;keyword:m_none;op:NOTOKEN),                                                           _FAR,
      (str:'FOR'           ;special:false;keyword:m_all;op:NOTOKEN),                                                            _FOR,
      (str:'INC'           ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _INC,
      (str:'MOD'           ;special:false;keyword:m_all;op:_OP_MOD),                                                            _MOD,
      (str:'NIL'           ;special:false;keyword:m_all;op:NOTOKEN),                                                            _NIL,
      (str:'NOT'           ;special:false;keyword:m_all;op:_OP_NOT),                                                            _NOT,
      (str:'OUT'           ;special:false;keyword:m_none;op:NOTOKEN),                                                           _OUT,
      (str:'SET'           ;special:false;keyword:m_all;op:NOTOKEN),                                                            _SET,
      (str:'SHL'           ;special:false;keyword:m_all;op:_OP_SHL),                                                            _SHL,
      (str:'SHR'           ;special:false;keyword:m_all;op:_OP_SHR),                                                            _SHR,
      (str:'TRY'           ;special:false;keyword:m_except;op:NOTOKEN),                                                         _TRY,
      (str:'VAR'           ;special:false;keyword:m_all;op:NOTOKEN),                                                            _VAR,
      (str:'XOR'           ;special:false;keyword:m_all;op:_OP_XOR),                                                            _XOR,
      (str:'CASE'          ;special:false;keyword:m_all;op:NOTOKEN),                                                            _CASE,
      (str:'CVAR'          ;special:false;keyword:m_none;op:NOTOKEN),                                                           _CVAR,
      (str:'ELSE'          ;special:false;keyword:m_all;op:NOTOKEN),                                                            _ELSE,
      (str:'EXIT'          ;special:false;keyword:m_none;op:NOTOKEN),                                                           _EXIT,
      (str:'FAIL'          ;special:false;keyword:m_none;op:NOTOKEN), { only set within constructors PM }                       _FAIL,
      (str:'FILE'          ;special:false;keyword:m_all;op:NOTOKEN),                                                            _FILE,
      (str:'GOTO'          ;special:false;keyword:m_all;op:NOTOKEN),                                                            _GOTO,
      (str:'NAME'          ;special:false;keyword:m_none;op:NOTOKEN),                                                           _NAME,
      (str:'NEAR'          ;special:false;keyword:m_none;op:NOTOKEN),                                                           _NEAR,
      (str:'READ'          ;special:false;keyword:m_none;op:NOTOKEN),                                                           _READ,
      (str:'SELF'          ;special:false;keyword:m_none;op:NOTOKEN), {set inside methods only PM }                             _SELF,
      (str:'SYSV'          ;special:false;keyword:m_none;op:NOTOKEN),   { Syscall variation on MorphOS }                        _SYSV,
      (str:'THEN'          ;special:false;keyword:m_all;op:NOTOKEN),                                                            _THEN,
      (str:'TRUE'          ;special:false;keyword:m_all;op:NOTOKEN),                                                            _TRUE,
      (str:'TYPE'          ;special:false;keyword:m_all;op:NOTOKEN),                                                            _TYPE,
      (str:'UNIT'          ;special:false;keyword:m_all;op:NOTOKEN),                                                            _UNIT,
      (str:'UNIV'          ;special:false;keyword:m_mac;op:NOTOKEN),                                                            _UNIV,
      (str:'USES'          ;special:false;keyword:m_all;op:NOTOKEN),                                                            _USES,
      (str:'WITH'          ;special:false;keyword:m_all;op:NOTOKEN),                                                            _WITH,
      (str:'ALIAS'         ;special:false;keyword:m_none;op:NOTOKEN),                                                           _ALIAS,
      (str:'ARRAY'         ;special:false;keyword:m_all;op:NOTOKEN),                                                            _ARRAY,
      (str:'BEGIN'         ;special:false;keyword:m_all;op:NOTOKEN),                                                            _BEGIN,
      (str:'BREAK'         ;special:false;keyword:m_none;op:NOTOKEN),                                                           _BREAK,
      (str:'CDECL'         ;special:false;keyword:m_none;op:NOTOKEN),                                                           _CDECL,
      (str:'CLASS'         ;special:false;keyword:m_class;op:NOTOKEN),                                                          _CLASS,
      (str:'CONST'         ;special:false;keyword:m_all;op:NOTOKEN),                                                            _CONST,
      (str:'EQUAL'         ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _EQUAL,
      (str:'FALSE'         ;special:false;keyword:m_all;op:NOTOKEN),                                                            _FALSE,
      (str:'FAR16'         ;special:false;keyword:m_none;op:NOTOKEN),                                                           _FAR16,
      (str:'FINAL'         ;special:false;keyword:m_none;op:NOTOKEN),                                                           _FINAL,
      (str:'INDEX'         ;special:false;keyword:m_none;op:NOTOKEN),                                                           _INDEX,
      (str:'LABEL'         ;special:false;keyword:m_all;op:NOTOKEN),                                                            _LABEL,
      (str:'LOCAL'         ;special:false;keyword:m_none;op:NOTOKEN),                                                           _LOCAL,
      (str:'RAISE'         ;special:false;keyword:m_except;op:NOTOKEN),                                                         _RAISE,
      (str:'UNTIL'         ;special:false;keyword:m_all;op:NOTOKEN),                                                            _UNTIL,
      (str:'WHILE'         ;special:false;keyword:m_all;op:NOTOKEN),                                                            _WHILE,
      (str:'WRITE'         ;special:false;keyword:m_none;op:NOTOKEN),                                                           _WRITE,
      (str:'DISPID'        ;special:false;keyword:m_none;op:NOTOKEN),                                                           _DISPID,
      (str:'DIVIDE'        ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _DIVIDE,
      (str:'DOWNTO'        ;special:false;keyword:m_all;op:NOTOKEN),                                                            _DOWNTO,
      (str:'EXCEPT'        ;special:false;keyword:m_except;op:NOTOKEN),                                                         _EXCEPT,
      (str:'EXPORT'        ;special:false;keyword:m_none;op:NOTOKEN),                                                           _EXPORT,
      (str:'HELPER'        ;special:false;keyword:m_none;op:NOTOKEN),                                                           _HELPER,
      (str:'INLINE'        ;special:false;keyword:m_none;op:NOTOKEN),                                                           _INLINE,
      (str:'LEGACY'        ;special:false;keyword:m_none;op:NOTOKEN),   { Syscall variation on MorphOS }                        _LEGACY,
      (str:'NESTED'        ;special:false;keyword:m_none;op:NOTOKEN),                                                           _NESTED,
      (str:'OBJECT'        ;special:false;keyword:m_all;op:NOTOKEN),                                                            _OBJECT,
      (str:'PACKED'        ;special:false;keyword:m_all;op:NOTOKEN),                                                            _PACKED,
      (str:'PASCAL'        ;special:false;keyword:m_none;op:NOTOKEN),                                                           _PASCAL,
      (str:'PUBLIC'        ;special:false;keyword:m_none;op:NOTOKEN),                                                           _PUBLIC,
      (str:'RECORD'        ;special:false;keyword:m_all;op:NOTOKEN),                                                            _RECORD,
      (str:'REPEAT'        ;special:false;keyword:m_all;op:NOTOKEN),                                                            _REPEAT,
      (str:'RESULT'        ;special:false;keyword:m_none;op:NOTOKEN),                                                           _RESULT,
      (str:'RETURN'        ;special:false;keyword:m_mac;op:NOTOKEN),                                                            _RETURN,
      (str:'SEALED'        ;special:false;keyword:m_none;op:NOTOKEN),                                                           _SEALED,
      (str:'STATIC'        ;special:false;keyword:m_none;op:NOTOKEN),                                                           _STATIC,
      (str:'STORED'        ;special:false;keyword:m_none;op:NOTOKEN),                                                           _STORED,
      (str:'STRICT'        ;special:false;keyword:m_none;op:NOTOKEN),                                                           _STRICT,
      (str:'STRING'        ;special:false;keyword:m_all;op:NOTOKEN),                                                            _STRING,
      (str:'SYSTEM'        ;special:false;keyword:m_none;op:NOTOKEN),                                                           _SYSTEM,
      (str:'ASMNAME'       ;special:false;keyword:m_none;op:NOTOKEN),                                                           _ASMNAME,
      (str:'CPPDECL'       ;special:false;keyword:m_none;op:NOTOKEN),                                                           _CPPDECL,
      (str:'DEFAULT'       ;special:false;keyword:m_none;op:NOTOKEN),                                                           _DEFAULT,
      (str:'DYNAMIC'       ;special:false;keyword:m_none;op:NOTOKEN),                                                           _DYNAMIC,
      (str:'EXPORTS'       ;special:false;keyword:m_all;op:NOTOKEN),                                                            _EXPORTS,
      (str:'FINALLY'       ;special:false;keyword:m_except;op:NOTOKEN),                                                         _FINALLY,
      (str:'FORWARD'       ;special:false;keyword:m_none;op:NOTOKEN),                                                           _FORWARD,
      (str:'GENERIC'       ;special:false;keyword:m_none;op:NOTOKEN),                                                           _GENERIC,
      (str:'IOCHECK'       ;special:false;keyword:m_none;op:NOTOKEN),                                                           _IOCHECK,
      (str:'LIBRARY'       ;special:false;keyword:m_all;op:NOTOKEN),                                                            _LIBRARY,
      (str:'MESSAGE'       ;special:false;keyword:m_none;op:NOTOKEN),                                                           _MESSAGE,
      (str:'MODULUS'       ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _MODULUS,
      (str:'PACKAGE'       ;special:false;keyword:m_none;op:NOTOKEN),                                                           _PACKAGE,
      (str:'PRIVATE'       ;special:false;keyword:m_none;op:NOTOKEN),                                                           _PRIVATE,
      (str:'PROGRAM'       ;special:false;keyword:m_all;op:NOTOKEN),                                                            _PROGRAM,
      (str:'R12BASE'       ;special:false;keyword:m_none;op:NOTOKEN),   { Syscall variation on MorphOS }                        _R12BASE,
      (str:'SECTION'       ;special:false;keyword:m_none;op:NOTOKEN),                                                           _SECTION,
      (str:'STDCALL'       ;special:false;keyword:m_none;op:NOTOKEN),                                                           _STDCALL,
      (str:'SYSCALL'       ;special:false;keyword:m_none;op:NOTOKEN),                                                           _SYSCALL,
      (str:'VARARGS'       ;special:false;keyword:m_none;op:NOTOKEN),                                                           _VARARGS,
      (str:'VIRTUAL'       ;special:false;keyword:m_none;op:NOTOKEN),                                                           _VIRTUAL,
      (str:'ABSOLUTE'      ;special:false;keyword:m_none;op:NOTOKEN),                                                           _ABSOLUTE,
      (str:'ABSTRACT'      ;special:false;keyword:m_none;op:NOTOKEN),                                                           _ABSTRACT,
      (str:'BASESYSV'      ;special:false;keyword:m_none;op:NOTOKEN),   { Syscall variation on MorphOS }                        _BASESYSV,
      (str:'CONSTREF'      ;special:false;keyword:m_none;op:NOTOKEN),                                                           _CONSTREF,
      (str:'CONTAINS'      ;special:false;keyword:m_none;op:NOTOKEN),                                                           _CONTAINS,
      (str:'CONTINUE'      ;special:false;keyword:m_none;op:NOTOKEN),                                                           _CONTINUE,
      (str:'CPPCLASS'      ;special:false;keyword:m_fpc;op:NOTOKEN),                                                            _CPPCLASS,
      (str:'EXPLICIT'      ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _EXPLICIT,
      (str:'EXTERNAL'      ;special:false;keyword:m_none;op:NOTOKEN),                                                           _EXTERNAL,
      (str:'FUNCTION'      ;special:false;keyword:m_all;op:NOTOKEN),                                                            _FUNCTION,
      (str:'IMPLICIT'      ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _IMPLICIT,
      (str:'LESSTHAN'      ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _LESSTHAN,
      (str:'LOCATION'      ;special:false;keyword:m_none;op:NOTOKEN),                                                           _LOCATION,
      (str:'MULTIPLY'      ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _MULTIPLY,
      (str:'MWPASCAL'      ;special:false;keyword:m_none;op:NOTOKEN),                                                           _MWPASCAL,
      (str:'NEGATIVE'      ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _NEGATIVE,
      (str:'NOTEQUAL'      ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _NOTEQUAL,
      (str:'OPERATOR'      ;special:false;keyword:m_fpc;op:NOTOKEN),                                                            _OPERATOR,
      (str:'OPTIONAL'      ;special:false;keyword:m_none;op:NOTOKEN), { optional methods in an Objective-C protocol }           _OPTIONAL,
      (str:'OVERLOAD'      ;special:false;keyword:m_none;op:NOTOKEN),                                                           _OVERLOAD,
      (str:'OVERRIDE'      ;special:false;keyword:m_none;op:NOTOKEN),                                                           _OVERRIDE,
      (str:'PLATFORM'      ;special:false;keyword:m_none;op:NOTOKEN),                                                           _PLATFORM,
      (str:'POSITIVE'      ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _POSITIVE,
      (str:'PROPERTY'      ;special:false;keyword:m_property;op:NOTOKEN),                                                       _PROPERTY,
      (str:'READONLY'      ;special:false;keyword:m_none;op:NOTOKEN),                                                           _READONLY,
      (str:'REGISTER'      ;special:false;keyword:m_none;op:NOTOKEN),                                                           _REGISTER,
      (str:'REQUIRED'      ;special:false;keyword:m_none;op:NOTOKEN), { required methods in an Objective-C protocol }           _REQUIRED,
      (str:'REQUIRES'      ;special:false;keyword:m_none;op:NOTOKEN),                                                           _REQUIRES,
      (str:'RESIDENT'      ;special:false;keyword:m_none;op:NOTOKEN),                                                           _RESIDENT,
      (str:'SAFECALL'      ;special:false;keyword:m_none;op:NOTOKEN),                                                           _SAFECALL,
      (str:'SUBTRACT'      ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _SUBTRACT,
      (str:'SYSVBASE'      ;special:false;keyword:m_none;op:NOTOKEN),   { Syscall variation on MorphOS }                        _SYSVBASE,
      (str:'ASSEMBLER'     ;special:false;keyword:m_none;op:NOTOKEN),                                                           _ASSEMBLER,
      (str:'BITPACKED'     ;special:false;keyword:m_all;op:NOTOKEN),                                                            _BITPACKED,
      (str:'BITWISEOR'     ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _BITWISEOR,
      (str:'INHERITED'     ;special:false;keyword:m_all;op:NOTOKEN),                                                            _INHERITED,
      (str:'INTDIVIDE'     ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _INTDIVIDE,
      (str:'INTERFACE'     ;special:false;keyword:m_all;op:NOTOKEN),                                                            _INTERFACE,
      (str:'INTERRUPT'     ;special:false;keyword:m_none;op:NOTOKEN),                                                           _INTERRUPT,
      (str:'LEFTSHIFT'     ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _LEFTSHIFT,
      (str:'LOGICALOR'     ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _LOGICALOR,
      (str:'NODEFAULT'     ;special:false;keyword:m_none;op:NOTOKEN),                                                           _NODEFAULT,
      (str:'OBJCCLASS'     ;special:false;keyword:m_objectivec1;op:NOTOKEN),                                                    _OBJCCLASS,
      (str:'OTHERWISE'     ;special:false;keyword:m_all;op:NOTOKEN),                                                            _OTHERWISE,
      (str:'PROCEDURE'     ;special:false;keyword:m_all;op:NOTOKEN),                                                            _PROCEDURE,
      (str:'PROTECTED'     ;special:false;keyword:m_none;op:NOTOKEN),                                                           _PROTECTED,
      (str:'PUBLISHED'     ;special:false;keyword:m_none;op:NOTOKEN),                                                           _PUBLISHED,
      (str:'SOFTFLOAT'     ;special:false;keyword:m_none;op:NOTOKEN),                                                           _SOFTFLOAT,
      (str:'THREADVAR'     ;special:false;keyword:m_all;op:NOTOKEN),                                                            _THREADVAR,
      (str:'WRITEONLY'     ;special:false;keyword:m_none;op:NOTOKEN),                                                           _WRITEONLY,
      (str:'BITWISEAND'    ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _BITWISEAND,
      (str:'BITWISEXOR'    ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _BITWISEXOR,
      (str:'DEPRECATED'    ;special:false;keyword:m_none;op:NOTOKEN),                                                           _DEPRECATED,
      (str:'DESTRUCTOR'    ;special:false;keyword:m_all;op:NOTOKEN),                                                            _DESTRUCTOR,
      (str:'ENUMERATOR'    ;special:false;keyword:m_none;op:_OP_ENUMERATOR),                                                    _ENUMERATOR,
      (str:'IMPLEMENTS'    ;special:false;keyword:m_none;op:NOTOKEN),                                                           _IMPLEMENTS,
      (str:'INTERNPROC'    ;special:false;keyword:m_none;op:NOTOKEN),                                                           _INTERNPROC,
      (str:'LOGICALAND'    ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _LOGICALAND,
      (str:'LOGICALNOT'    ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _LOGICALNOT,
      (str:'LOGICALXOR'    ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _LOGICALXOR,
      (str:'OLDFPCCALL'    ;special:false;keyword:m_none;op:NOTOKEN),                                                           _OLDFPCCALL,
      (str:'OPENSTRING'    ;special:false;keyword:m_none;op:NOTOKEN),                                                           _OPENSTRING,
      (str:'RIGHTSHIFT'    ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _RIGHTSHIFT,
      (str:'SPECIALIZE'    ;special:false;keyword:m_none;op:NOTOKEN),                                                           _SPECIALIZE,
      (str:'CONSTRUCTOR'   ;special:false;keyword:m_all;op:NOTOKEN),                                                            _CONSTRUCTOR,
      (str:'GREATERTHAN'   ;special:false;keyword:m_none;op:NOTOKEN), { delphi operator name }                                  _GREATERTHAN,
      (str:'INTERNCONST'   ;special:false;keyword:m_none;op:NOTOKEN),                                                           _INTERNCONST,
      (str:'REINTRODUCE'   ;special:false;keyword:m_none;op:NOTOKEN),                                                           _REINTRODUCE,
      (str:'SHORTSTRING'   ;special:false;keyword:m_none;op:NOTOKEN),                                                           _SHORTSTRING,
      (str:'COMPILERPROC'  ;special:false;keyword:m_none;op:NOTOKEN),                                                           _COMPILERPROC,
      (str:'EXPERIMENTAL'  ;special:false;keyword:m_none;op:NOTOKEN),                                                           _EXPERIMENTAL,
      (str:'FINALIZATION'  ;special:false;keyword:m_initfinal;op:NOTOKEN),                                                      _FINALIZATION,
      (str:'NOSTACKFRAME'  ;special:false;keyword:m_none;op:NOTOKEN),                                                           _NOSTACKFRAME,
      (str:'OBJCCATEGORY'  ;special:false;keyword:m_objectivec1;op:NOTOKEN), { Objective-C category }                           _OBJCCATEGORY,
      (str:'OBJCPROTOCOL'  ;special:false;keyword:m_objectivec1;op:NOTOKEN), { Objective-C protocol }                           _OBJCPROTOCOL,
      (str:'WEAKEXTERNAL'  ;special:false;keyword:m_none;op:NOTOKEN),                                                           _WEAKEXTERNAL,
      (str:'DISPINTERFACE' ;special:false;keyword:m_class;op:NOTOKEN),                                                          _DISPINTERFACE,
      (str:'UNIMPLEMENTED' ;special:false;keyword:m_none;op:NOTOKEN),                                                           _UNIMPLEMENTED,
      (str:'IMPLEMENTATION';special:false;keyword:m_all;op:NOTOKEN),                                                            _IMPLEMENTATION,
      (str:'INITIALIZATION';special:false;keyword:m_initfinal;op:NOTOKEN),                                                      _INITIALIZATION,
      (str:'RESOURCESTRING';special:false;keyword:m_all;op:NOTOKEN),                                                            _RESOURCESTRING,
      (str:'LESSTHANOREQUAL';special:false;keyword:m_none;op:NOTOKEN),    { delphi operator name }                              _LESSTHANOREQUAL,
      (str:'GREATERTHANOREQUAL';special:false;keyword:m_none;op:NOTOKEN)  { delphi operator name }                              _GREATERTHANOREQUAL


关键字判定函数
    function is_keyword(const s:string):boolean;
      var
        low,high,mid : longint;
      begin
        if not (length(s) in [tokenlenmin..tokenlenmax]) or    
           not (s[1] in ['a'..'z','A'..'Z']) then
         begin
           is_keyword:=false;
           exit;
         end;
        low:=ord(tokenidx^[length(s),s[1]].first);
        high:=ord(tokenidx^[length(s),s[1]].last);
        while low<high do
         begin
           mid:=(high+low+1) shr 1;
           if pattern<tokeninfo^[ttoken(mid)].str then
            high:=mid-1
           else
            low:=mid;
         end;
        is_keyword:=(pattern=tokeninfo^[ttoken(high)].str) and    
                    (tokeninfo^[ttoken(high)].keyword in current_settings.modeswitches);
      end;
不光要字符串匹配,还要保证模式开关有开。所以开关为m_none可以作为保留字,也可以作为变量,m_all永远不能作为变量,当然也不能被定义宏.
还要注意关键字在二维数组里,ReadToken时就会从这个数组二分查找是否为关键字.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值