xref: /OpenGrok/opengrok-indexer/src/main/jflex/analysis/clojure/Clojure.lexh (revision d219b4cea555a12b602d2d5518daa22134ad4879)
1*d219b4ceSAdam Hornacek/*
2*d219b4ceSAdam Hornacek * CDDL HEADER START
3*d219b4ceSAdam Hornacek *
4*d219b4ceSAdam Hornacek * The contents of this file are subject to the terms of the
5*d219b4ceSAdam Hornacek * Common Development and Distribution License (the "License").
6*d219b4ceSAdam Hornacek * You may not use this file except in compliance with the License.
7*d219b4ceSAdam Hornacek *
8*d219b4ceSAdam Hornacek * See LICENSE.txt included in this distribution for the specific
9*d219b4ceSAdam Hornacek * language governing permissions and limitations under the License.
10*d219b4ceSAdam Hornacek *
11*d219b4ceSAdam Hornacek * When distributing Covered Code, include this CDDL HEADER in each
12*d219b4ceSAdam Hornacek * file and include the License file at LICENSE.txt.
13*d219b4ceSAdam Hornacek * If applicable, add the following below this CDDL HEADER, with the
14*d219b4ceSAdam Hornacek * fields enclosed by brackets "[]" replaced with your own identifying
15*d219b4ceSAdam Hornacek * information: Portions Copyright [yyyy] [name of copyright owner]
16*d219b4ceSAdam Hornacek *
17*d219b4ceSAdam Hornacek * CDDL HEADER END
18*d219b4ceSAdam Hornacek */
19*d219b4ceSAdam Hornacek
20*d219b4ceSAdam Hornacek/*
21*d219b4ceSAdam Hornacek * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
22*d219b4ceSAdam Hornacek * Portions Copyright (c) 2017, Chris Fraire <cfraire@me.com>.
23*d219b4ceSAdam Hornacek */
24*d219b4ceSAdam Hornacek
25*d219b4ceSAdam HornacekIdentifier = {Symbol}
26*d219b4ceSAdam Hornacek
27*d219b4ceSAdam HornacekNumber = ({NumberLong} | {NumberDecimal} | {NumberSci} | {NumberHex} |
28*d219b4ceSAdam Hornacek    {NumberBinary} | {NumberCrazy} | {NumberRatio})
29*d219b4ceSAdam HornacekNumberLong = [\-\+]?[0-9]+
30*d219b4ceSAdam HornacekNumberDecimal = [\-\+]?[0-9]*\.[0-9]+
31*d219b4ceSAdam HornacekNumberSci = ({NumberLong} | {NumberDecimal}) ([eE][+-]?[0-9]+)?
32*d219b4ceSAdam HornacekNumberHex = 0[Xx][0-9A-Fa-f]+
33*d219b4ceSAdam HornacekNumberBinary = 2[Rr][01]+
34*d219b4ceSAdam HornacekNumberCrazy = 36[Rr][0-9A-Za-z]+
35*d219b4ceSAdam HornacekNumberRatio = {NumberLong}"/"{NumberLong}
36*d219b4ceSAdam Hornacek
37*d219b4ceSAdam Hornacek/*
38*d219b4ceSAdam Hornacek * Symbols
39*d219b4ceSAdam Hornacek *
40*d219b4ceSAdam Hornacek * Symbols begin with a non-numeric character and can contain alphanumeric
41*d219b4ceSAdam Hornacek * characters and *, +, !, -, _, ', and ? (other characters may be allowed
42*d219b4ceSAdam Hornacek * eventually).
43*d219b4ceSAdam Hornacek *
44*d219b4ceSAdam Hornacek * N.b. under "Macro Characters", the Quote (') macro is defined -- and that
45*d219b4ceSAdam Hornacek * section implies that Symbols cannot begin with \'
46*d219b4ceSAdam Hornacek */
47*d219b4ceSAdam HornacekSymbol = ({SymbolNormal} | {SymbolSlashed} | {SymbolDotted} | {SymbolColon})
48*d219b4ceSAdam HornacekSymbolNormal = {SymCharLead} {SymCharAny}*
49*d219b4ceSAdam HornacekSymCharSpecial = [\*\+\!\-_\'\?]
50*d219b4ceSAdam HornacekSymCharLead = ([A-Za-z] | [[\*\+\!\-_\'\?]--\']) // i.e. [{SymCharSpecial}--\']
51*d219b4ceSAdam HornacekSymCharAlphanum = [A-Za-z0-9]
52*d219b4ceSAdam HornacekSymCharAny = ({SymCharAlphanum} | {SymCharSpecial})
53*d219b4ceSAdam Hornacek/*
54*d219b4ceSAdam Hornacek * '/' has special meaning, it can be used once in the middle of a symbol to
55*d219b4ceSAdam Hornacek * separate the namespace from the name, e.g. my-namespace/foo. '/' by itself
56*d219b4ceSAdam Hornacek * names the division function.
57*d219b4ceSAdam Hornacek */
58*d219b4ceSAdam HornacekSymbolSlashed = {SymbolNormal} "/" {SymCharAny}+
59*d219b4ceSAdam Hornacek/*
60*d219b4ceSAdam Hornacek * '.' has special meaning - it can be used one or more times in the middle of
61*d219b4ceSAdam Hornacek * a symbol to designate a fully-qualified class name, e.g. java.util.BitSet,
62*d219b4ceSAdam Hornacek * or in namespace names. Symbols beginning or ending with '.' are reserved by
63*d219b4ceSAdam Hornacek * Clojure. Symbols containing / or . are said to be 'qualified'.
64*d219b4ceSAdam Hornacek */
65*d219b4ceSAdam HornacekSymbolDotted = {SymbolNormal} ("." {SymCharAny}+)+
66*d219b4ceSAdam Hornacek/*
67*d219b4ceSAdam Hornacek * Symbols beginning or ending with ':' are reserved by Clojure. A symbol can
68*d219b4ceSAdam Hornacek * contain one or more non-repeating ':'s.
69*d219b4ceSAdam Hornacek */
70*d219b4ceSAdam HornacekSymbolColon = (":" {SymCharAny}+ ":"? | {SymCharAny}+ ":")
71