📄 mwbaansyn.msg
字号:
{Grammar for a Baan 4GL (.cln) HighLighter}
{Based on C/C++ Syntax description}
{Copyright 2000 riceball. All right reserved}
{mailto:teditor@mailroom.com}{No syntax check takes Place}
{ DISCLAIMER: This is provided as is, expressly without a warranty of any kind.}
{ You use it at your own risc. }
{ Need Manual Add:
FRoundCount: Integer;
FSquareCount: Integer;
Change KEYS 'date.num' and 'brp.open' from tkKey to tkVariable
}
TBaanSyn {first Identifier is considered to be the Class Name }
tk {second Identifier is considered to be the Identifier Prefix }
{Sensitive : Optional}
IdentStart '_', 'a'..'z', 'A'..'Z':: '.', '$', '_', '0'..'9', 'a'..'z', 'A'..'Z'::
KEYS { all between KEYS and |><| is considered to be a keyword }
__based
__cdecl
__declspe
__except
__export
__far
__fastcal
__fortran
__import
__int16
__int32
__int64
__int8
__interrup
__loadds
__near
__pascal
__segname
__pascal
__rtti
__segment
__self
__stdcall
__thread
__try
_cdecl
_export
_fastcall
_import
_pascal
_stdcall
auto
bool
break
brp.open {Variable}
case
catch
cdecl
char
class
const
continue
date.num {Variable}
default
defined
delete
do
domain
double
else
endselect
enum
explicit
export
endif
extern
false
fastcall
finally
float
for
friend
function
from
goto
if
import
inline
interrupt
int
long
mutable
namespace
new
null
operator
pascal
private
protected
public
register
reinterpr
return
select
selectdo
short
signed
sizeof
sql.close
static
static_ca
stdcall
strip$
string
struct
switch
table
template
this
throw
true
try
typedef
typename
typeid
union
unsigned
using
virtual
void
volatile
wchar_t
where
while
|><| { token names }
Variable
Comment
Directive
Identifier
Key
Null
Number
Space
String
Symbol
Unknown
|><|
CHARS
#0:: Null
BeginProc
fTokenID := tkNull;
EndProc
#10:: LF
BeginProc
fTokenID := tkSpace;
inc(Run);
EndProc
#13:: CR
BeginProc
fTokenID := tkSpace;
Case FLine[Run + 1] of
#10: inc(Run, 2);
else inc(Run);
end;
EndProc
#1..#9, #11, #12, #14..#32:: Space
BeginProc
inc(Run);
fTokenID := tkSpace;
while FLine[Run] in [#1..#9, #11, #12, #14..#32] do inc(Run);
EndProc
#34:: String
BeginProc
fTokenID := tkString;
if (FLine[Run + 1] = #34) and (FLine[Run + 2] = #34) then inc(Run, 2);
repeat
case FLine[Run] of
#0, #10, #13: break;
#92:
if FLine[Run + 1] = #10 then inc(Run);
end;
inc(Run);
until FLine[Run] = #34;
if FLine[Run] <> #0 then inc(Run);
EndProc
#39:: AsciiChar
BeginProc
fTokenID := tkString;
repeat
case FLine[Run] of
#0, #10, #13: break;
end;
inc(Run);
until FLine[Run] = #39;
if FLine[Run] <> #0 then inc(Run);
EndProc
'0'..'9':: Number
BeginProc
inc(Run);
fTokenID := tkNumber;
while FLine[Run] in
['0'..'9', '.', 'u', 'U', 'l', 'L', 'x', 'X', 'e', 'E', 'f', 'F'] do
begin
case FLine[Run] of
'.':
if FLine[Run + 1] = '.' then break;
end;
inc(Run);
end;
EndProc
'A'..'Z', 'a'..'z', '_', '.', '$':: Ident
BeginProc
fTokenID := IdentKind((fLine + Run));
inc(Run, fStringLen);
while Identifiers[fLine[Run]] do inc(Run);
EndProc
'!':: NotSymbol
BeginProc
case FLine[Run + 1] of
'=': {not equal}
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
else {not}
begin
inc(Run);
fTokenID := tkSymbol;
end;
end;
EndProc
'#':: Directive
BeginProc
fTokenID := tkDirective;
repeat
case FLine[Run] of
#0, #10, #13: break;
end;
inc(Run);
until FLine[Run] = #0;
EndProc
'{':: BraceOpen
BeginProc
inc(Run);
fTokenId := tkSymbol;
EndProc
'}':: BraceClose
BeginProc
inc(Run);
fTokenId := tkSymbol;
EndProc
'~':: Tilde
BeginProc
inc(Run);
fTokenId := tkSymbol;
EndProc
'%':: ModSymbol
BeginProc
case FLine[Run + 1] of
'=': {mod assign}
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
else {mod}
begin
inc(Run);
fTokenID := tkSymbol;
end;
end;
EndProc
'&':: AndSymbol
BeginProc
case FLine[Run + 1] of
'=': {and assign}
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
'&': {logical and}
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
else {and}
begin
inc(Run);
fTokenID := tkSymbol;
end;
end;
EndProc
'(':: RoundOpen
BeginProc
inc(Run);
FTokenID := tkSymbol;
inc(FRoundCount);
EndProc
')':: RoundClose
BeginProc
inc(Run);
fTokenID := tkSymbol;
dec(FRoundCount);
EndProc
'*':: Star
BeginProc
case FLine[Run + 1] of
'=': {multiply assign}
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
else {star}
begin
inc(Run);
fTokenID := tkSymbol;
end;
end;
EndProc
'+':: Plus
BeginProc
case FLine[Run + 1] of
'=': {add assign}
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
'+': {increment}
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
else {subtract}
begin
inc(Run);
fTokenID := tkSymbol;
end;
end;
EndProc
',':: Comma
BeginProc
inc(Run);
fTokenID := tkSymbol;
EndProc
'-':: Minus
BeginProc
case FLine[Run + 1] of
'=': {subtract assign}
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
'-': {decrement}
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
'>': {arrow}
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
else {subtract}
begin
inc(Run);
fTokenID := tkSymbol;
end;
end;
EndProc
'|':: Erect
BeginProc
inc(Run, 1); {Bann Comments}
fTokenID := tkComment;
while FLine[Run] <> #0 do
begin
case FLine[Run] of
#10, #13: break;
end; //case
inc(Run);
end; //while
EndProc
'/':: Slash
BeginProc
case FLine[Run + 1] of
'=': {division assign}
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
else {division}
begin
inc(Run);
fTokenID := tkSymbol;
end;
end;
EndProc
':':: Colon
BeginProc
Case FLine[Run + 1] of
':': {scope resolution operator}
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
else {colon}
begin
inc(Run);
fTokenID := tkSymbol;
end;
end;
EndProc
';':: SemiColon
BeginProc
inc(Run);
fTokenID := tkSymbol;
EndProc
'<':: Lower
BeginProc
case FLine[Run + 1] of
'=': {less than or equal to}
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
'<':
begin
if FLine[Run + 2] = '=' then {shift left assign}
inc(Run, 3)
else {shift left}
inc(Run, 2);
fTokenID := tkSymbol;
end;
else {less than}
begin
inc(Run);
fTokenID := tkSymbol;
end;
end;
EndProc
'=':: Equal
BeginProc
case FLine[Run + 1] of
'=': {logical equal}
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
else {assign}
begin
inc(Run);
fTokenID := tkSymbol;
end;
end;
EndProc
'>':: Greater
BeginProc
Case FLine[Run + 1] of
'=': {greater than or equal to}
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
'>':
begin
if FLine[Run + 2] = '=' then {shift right assign}
inc(Run, 3)
else {shift right}
inc(Run, 2);
fTokenID := tkSymbol;
end;
else {greater than}
begin
inc(Run);
fTokenID := tkSymbol;
end;
end;
EndProc
'@':: AtSymbol
BeginProc
fTokenID := tkSymbol;
inc(Run);
EndProc
'[':: SquareOpen
BeginProc
inc(Run);
fTokenID := tkSymbol;
inc(FSquareCount);
EndProc
']':: SquareClose
BeginProc
inc(Run);
fTokenID := tkSymbol;
dec(FSquareCount);
EndProc
'^':: XOrSymbol
BeginProc
Case FLine[Run + 1] of
'=': {xor assign}
begin
inc(Run, 2);
fTokenID := tkSymbol;
end;
else {xor}
begin
inc(Run);
fTokenID := tkSymbol;
end;
end;
EndProc
|><|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -