Definitions.

COMMENT1 = \(\*\(*([^*)]|[^*]\)|\*[^)])*\**\*\)
COMMENT2 = //([^\n]*)
STRING = "(\\\^.|\\.|[^"])*"
QUOTE = '(\\\^.|\\.|[^'])*'

Rules.
%%// Numbers
([0-9]+[.][0-9]+[eE][+-][0-9]+) : {token, {number, TokenLine, TokenChars}}.
([0-9]+[.][0-9]+[eE][0-9]+) : {token, {number, TokenLine, TokenChars}}.
([0-9]+[.][0-9]+)   : {token, {number, TokenLine, TokenChars}}.
([1-9][0-9]*)       : {token, {number, TokenLine, TokenChars}}.
%%([0]*)              : {token, {number, TokenLine, 0}}.
(0x[0-9]+)          : {token, {number, TokenLine, TokenChars}}.

% Number as char with code
\\.                 : {token, {number, TokenLine, TokenChars}}.

% Any atom:
([A-Za-z_][a-z0-9A-Z_]*)    : {token, {atom, TokenLine, TokenChars}}.

%% string

({STRING}|{QUOTE}) :  {token,{string,TokenLine,TokenChars}}.

{COMMENT1}|{COMMENT2} : {token, {comment,TokenLine,TokenChars}}.


>>= : {token, {'>=', TokenLine}}.

<= : {token, {'<=', TokenLine}}.
<> : {token, {'!=', TokenLine}}.
!= : {token, {'!=', TokenLine}}.
=~ : {token, {'=~', TokenLine}}.
-> : {token, {'->', TokenLine}}.
\, : {token, {',', TokenLine}}.
\+ : {token, {'+', TokenLine}}.
\- : {token, {'-', TokenLine}}.
\> : {token, {'>', TokenLine}}.
\< : {token, {'<', TokenLine}}.
=  : {token, {'=', TokenLine}}.
\* : {token, {'*', TokenLine}}.
\: : {token, {':', TokenLine}}.
\/ : {token, {'/', TokenLine}}.
\$ : {token, {'$', TokenLine}}.
\@ : {token, {'@', TokenLine}}.
\% : {token, {'%', TokenLine}}.
\( : {token, {'(', TokenLine}}.
\) : {token, {')', TokenLine}}.

%} : {token, {'}', TokenLine}}.
%{ : {token, {'{', TokenLine}}.
%\[ : {token, {'[', TokenLine}}.
%\] :{token, {']', TokenLine}}.

[\r\t\s] : {token,{whitespace,TokenLine,TokenChars}}.

\n : {token, {'\n', TokenLine}}.

. : {token, {char, TokenLine, TokenChars}}.

Erlang code.

% Skipped 
