summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pygments/lexers/_mapping.py1
-rwxr-xr-xpygments/lexers/gsql.py85
-rwxr-xr-xtests/examplefiles/gsql/test.gsql223
-rw-r--r--tests/examplefiles/gsql/test.gsql.output1503
4 files changed, 1812 insertions, 0 deletions
diff --git a/pygments/lexers/_mapping.py b/pygments/lexers/_mapping.py
index e28f2502..c7fa5452 100644
--- a/pygments/lexers/_mapping.py
+++ b/pygments/lexers/_mapping.py
@@ -175,6 +175,7 @@ LEXERS = {
'GAPLexer': ('pygments.lexers.algebra', 'GAP', ('gap',), ('*.g', '*.gd', '*.gi', '*.gap'), ()),
'GDScriptLexer': ('pygments.lexers.gdscript', 'GDScript', ('gdscript', 'gd'), ('*.gd',), ('text/x-gdscript', 'application/x-gdscript')),
'GLShaderLexer': ('pygments.lexers.graphics', 'GLSL', ('glsl',), ('*.vert', '*.frag', '*.geo'), ('text/x-glslsrc',)),
+ 'GSQLLexer': ('pygments.lexers.gsql', 'GSQL', ('gsql',), ('*.gsql',), ()),
'GasLexer': ('pygments.lexers.asm', 'GAS', ('gas', 'asm'), ('*.s', '*.S'), ('text/x-gas',)),
'GcodeLexer': ('pygments.lexers.gcodelexer', 'g-code', ('gcode',), ('*.gcode',), ()),
'GenshiLexer': ('pygments.lexers.templates', 'Genshi', ('genshi', 'kid', 'xml+genshi', 'xml+kid'), ('*.kid',), ('application/x-genshi', 'application/x-kid')),
diff --git a/pygments/lexers/gsql.py b/pygments/lexers/gsql.py
new file mode 100755
index 00000000..bab17de6
--- /dev/null
+++ b/pygments/lexers/gsql.py
@@ -0,0 +1,85 @@
+import re
+
+from pygments.lexer import RegexLexer, include, bygroups, using, this, words
+from pygments.token import Keyword, Punctuation, Comment, Operator, Name,\
+ String, Number, Whitespace
+
+
+__all__ = ["GSQLLexer"]
+
+class GSQLLexer(RegexLexer):
+
+ """
+ For `GSQL <https://docs.tigergraph.com/dev/gsql-ref>`_ queries (version 3.x).
+ .. versionadded:: 2.10
+ """
+
+ name = 'GSQL'
+ aliases = ['gsql']
+ filenames = ['*.gsql']
+
+ flags = re.MULTILINE | re.IGNORECASE
+
+ tokens = {
+ 'root': [
+ include('comment'),
+ include('keywords'),
+ include('clauses'),
+ include('accums'),
+ include('relations'),
+ include('strings'),
+ include('whitespace'),
+ include('barewords'),
+ include('operators'),
+ ],
+ 'comment': [
+ (r'.*\#.*\n', Comment.Single),
+ (r'.*\/\*\s*.*\s*\*\/', Comment.Multiline),
+ ],
+ 'keywords': [
+ (words((
+ 'ACCUM', 'AND', 'ANY', 'API', 'AS', 'ASC', 'AVG', 'BAG', 'BATCH', 'BETWEEN', 'BOOL', 'BOTH',
+ 'BREAK', 'BY', 'CASE', 'CATCH', 'COALESCE', 'COMPRESS', 'CONTINUE', 'COUNT',
+ 'CREATE', 'DATETIME', 'DATETIME_ADD', 'DATETIME_SUB', 'DELETE', 'DESC', 'DISTRIBUTED', 'DO',
+ 'DOUBLE', 'EDGE', 'ELSE', 'END', 'ESCAPE', 'EXCEPTION', 'FALSE', 'FILE', 'FILTER', 'FLOAT', 'FOREACH', 'FOR',
+ 'FROM', 'GRAPH', 'GROUP', 'GSQL_INT_MAX', 'GSQL_INT_MIN', 'GSQL_UINT_MAX', 'HAVING', 'IF',
+ 'IN', 'INSERT', 'INT', 'INTERPRET', 'INTERSECT', 'INTERVAL', 'INTO', 'IS', 'ISEMPTY', 'JSONARRAY', 'JSONOBJECT', 'LASTHOP',
+ 'LEADING', 'LIKE', 'LIMIT', 'LIST', 'LOAD_ACCUM', 'LOG', 'MAP', 'MATCH', 'MAX', 'MIN', 'MINUS', 'NOT',
+ 'NOW', 'NULL', 'OFFSET', 'OR', 'ORDER', 'PATH', 'PER', 'PINNED', 'POST_ACCUM', 'POST-ACCUM', 'PRIMARY_ID', 'PRINT',
+ 'QUERY', 'RAISE', 'RANGE', 'REPLACE', 'RESET_COLLECTION_ACCUM', 'RETURN', 'RETURNS', 'RUN', 'SAMPLE', 'SELECT', 'SELECT_VERTEX',
+ 'SET', 'SRC', 'STATIC', 'STRING', 'SUM', 'SYNTAX', 'TARGET', 'TAGSTGT', 'THEN', 'TO', 'TO_CSV', 'TO_DATETIME', 'TRAILING', 'TRIM', 'TRUE',
+ 'TRY', 'TUPLE', 'TYPEDEF', 'UINT', 'UNION', 'UPDATE', 'VALUES', 'VERTEX', 'WHEN', 'WHERE', 'WHILE', 'WITH'), prefix=r'(?<!\.)', suffix=r'\b'), Name.Builtin)
+ ],
+ 'clauses': [
+ (words(('accum', 'having', 'limit', 'order', 'postAccum', 'sample', 'where')), Name.Builtin)
+ ],
+ 'accums': [
+ (words(('andaccum', 'arrayaccum', 'avgaccum', 'bagaccum', 'bitwiseandaccum',
+ 'bitwiseoraccum', 'groupbyaccum', 'heapaccum', 'listaccum', 'MapAccum',
+ 'maxaccum', 'minaccum', 'oraccum', 'setaccum', 'sumaccum')), Name.Builtin),
+ ],
+ # 'name': [
+ # (r'(\@\@w+)\b', Name),
+ # ],
+ 'relations': [
+ (r'(-\s?)(\(.*\:\w?\))(\s?-)', bygroups(Operator, using(this), Operator)),
+ (r'->|<-', Operator),
+ (r'[.*{}]', Punctuation),
+ ],
+ 'strings': [
+ (r'"(?:\\[tbnrf\'"\\]|[^\\"])*"', String),
+ (r'@{1,2}\w+', Name.Variable),
+ (r'(\<\w+)?\<(\w+\>?\,?\s?)+\>+', Name.Constant),
+ ],
+ 'whitespace': [
+ (r'\s+', Whitespace),
+ ],
+ 'barewords': [
+ (r'[a-z]\w*', Name),
+ (r'(\d+\.\d+|\d+)', Number),
+ ],
+ 'operators': [
+ (r'[^0-9|\/|\-](\-\=|\+\=|\*\=|\\\=|\=|\=\=|\=\=\=|\+|\-|\*|\\|\+\=|\>|\<)[^\>|\/]', Operator),
+ (r'(\(|\)|\,|\;|\=|\-|\+|\*|\/|\>|\<|\:)', Operator),
+ ],
+ }
diff --git a/tests/examplefiles/gsql/test.gsql b/tests/examplefiles/gsql/test.gsql
new file mode 100755
index 00000000..c65ab930
--- /dev/null
+++ b/tests/examplefiles/gsql/test.gsql
@@ -0,0 +1,223 @@
+CREATE QUERY Member_Likeness(VERTEX <motionMember> m1, STRING inDate) FOR GRAPH motionData {
+ # TYPEDEF TUPLE <x FLOAT, y FLOAT> XYPair;
+ MapAccum<VERTEX<motionMember>, MapAccum<STRING, FLOAT>> @@likenessAccum;
+ MapAccum<VERTEX<motionMember>, FLOAT> @@BirthYearAccum;
+ MapAccum<VERTEX<motionMember>, FLOAT> @@HeightAccum;
+ MapAccum<VERTEX<motionMember>, FLOAT> @@WeightAccum;
+ ListAccum<VERTEX<location>> @@MemLocAccum;
+ MapAccum<VERTEX<motionMember>, FLOAT> @@LocAccum;
+ MapAccum<VERTEX<motionMember>, BagAccum<VERTEX<incentive>>> @@DayIncentives;
+ MapAccum<VERTEX<motionMember>, MapAccum<STRING, FLOAT>> @@MemberStats;
+ BagAccum<VERTEX<incentive>> @MemberIncentives;
+ AvgAccum @@StepsAccum;
+ AvgAccum @@BoutsAccum;
+ AvgAccum @@MilesAccum;
+
+ # Universal Vars
+ INT lastMax = 0;
+ INT lastMin = 1000;
+ FLOAT mult;
+
+ # Age Vars
+ INT ageRange;
+ INT birthYear;
+
+ # Height Vars
+ INT heightRange;
+ INT height;
+
+ # Height Vars
+ INT weightRange;
+ INT weight;
+
+ # Location Vars
+ FLOAT locRange;
+ VERTEX memLoc;
+
+ # Activity Vars
+ DATETIME lastRecording;
+
+ # lastRecording = to_datetime("2018-05-19");
+ lastRecording = to_datetime(inDate);
+
+ /*
+
+ test comment block
+
+ */
+
+
+ members = {motionMember.*};
+
+ birthYear = Get_Birth_Year(m1);
+ height = m1.Height;
+ weight = m1.Weight;
+ temp = SELECT loc FROM members:member -(:e) - location: loc
+ WHERE member == m1
+ ACCUM
+ @@MemLocAccum += loc;
+ FOREACH loc in @@MemLocAccum DO
+ memLoc = loc;
+ END;
+
+ PRINT memLoc;
+ PRINT birthYear;
+ PRINT height;
+ PRINT weight;
+
+ results = SELECT member FROM members:member
+ ACCUM
+ @@BirthYearAccum += (member -> abs(Get_Birth_Year(member) - birthYear));
+
+ FOREACH (member,bys) in @@BirthYearAccum DO
+ IF bys > lastMax THEN
+ lastMax = bys;
+ END;
+ IF bys < lastMin THEN
+ lastMin = bys;
+ END;
+ END;
+
+ ageRange = lastMax - lastMin;
+ print ageRange;
+ mult = 1.0/ageRange;
+
+
+ FOREACH (member,bys) in @@BirthYearAccum DO
+ bys = 1 - bys * mult;
+ @@likenessAccum += (member -> ("age" -> bys));
+ END;
+
+ lastMax = 0;
+ lastMin = 1000;
+ mult = 0;
+
+ results = SELECT member FROM members:member
+ ACCUM
+ @@HeightAccum += (member -> abs(member.Height - height));
+
+ FOREACH (member,heights) in @@HeightAccum DO
+ IF heights < height THEN
+ IF heights > lastMax THEN
+ lastMax = heights;
+ END;
+ IF heights < lastMin THEN
+ lastMin = heights;
+ END;
+ END;
+ END;
+
+ heightRange = lastMax - lastMin;
+ print heightRange;
+ mult = 1.0/heightRange;
+
+
+ FOREACH (member,heights) in @@HeightAccum DO
+ IF heights < height THEN
+ heights = 1 - heights * mult;
+ ELSE
+ heights = 0;
+ END;
+ @@likenessAccum += (member -> ("height" -> heights));
+ END;
+
+ lastMax = 0;
+ lastMin = 1000;
+ mult = 0;
+
+ results = SELECT member FROM members:member
+ ACCUM
+ @@WeightAccum += (member -> abs(member.Weight - weight));
+
+ FOREACH (member,weights) in @@WeightAccum DO
+ IF weights < weight THEN
+ IF weights > lastMax THEN
+ lastMax = weights;
+ END;
+ IF weights < lastMin THEN
+ lastMin = weights;
+ END;
+ END;
+ END;
+
+ weightRange = lastMax - lastMin;
+ print weightRange;
+ mult = 1.0/weightRange;
+
+
+ FOREACH (member,weights) in @@WeightAccum DO
+ IF weights < weight THEN
+ weights = 1 - weights * mult;
+ ELSE
+ weights = 0;
+ END;
+ @@likenessAccum += (member -> ("weight" -> weights));
+ END;
+
+ lastMax = 0;
+ lastMin = 1000;
+ mult = 0;
+
+ resultsLoc = SELECT loc FROM members:member -(:e) - location: loc
+ ACCUM
+ @@LocAccum += (member -> Check_Distance(loc,memLoc));
+ FOREACH (member,loc) in @@LocAccum DO
+ IF loc < 5800 THEN
+ IF loc > lastMax THEN
+ lastMax = ceil(loc);
+ END;
+ IF loc < lastMin THEN
+ lastMin = floor(loc);
+ END;
+ END;
+ END;
+
+ PRINT lastMax;
+ PRINT lastMin;
+
+ locRange = lastMax - lastMin;
+ print locRange;
+ mult = 1.0/locRange;
+
+ FOREACH (member,loc) in @@LocAccum DO
+ IF loc > 5800 THEN
+ loc = -1;
+ ELSE
+ loc = 1 - loc * mult;
+ END;
+ @@likenessAccum += (member -> ("distance" -> loc));
+ END;
+
+ lastMax = 0;
+ lastMin = 1000;
+ mult = 0;
+
+ incentives = {incentive.*};
+
+ incentives = SELECT incent FROM incentives:incent - (:e) - lookupRule:rule WHERE
+ rule.RuleName == "Tenacity" AND incent.IncentiveDate > datetime_sub(lastRecording, INTERVAL 1 MONTH) AND incent.IncentiveDate < lastRecording;
+
+ members = SELECT member FROM incentives:incent - (:e) - motionMember:member
+ ACCUM
+ @@DayIncentives += (member -> (incent));
+
+ FOREACH (member, incent) IN @@DayIncentives DO
+ @@StepsAccum = 0;
+ FOREACH Incentive IN incent DO
+ @@StepsAccum += Incentive.TotalSteps;
+ @@BoutsAccum += Incentive.TotalBouts;
+ @@MilesAccum += Incentive.Miles;
+ END;
+ @@MemberStats += (member -> ("stepsAvg" -> @@StepsAccum));
+ @@MemberStats += (member -> ("stepsSlope" -> Linear_Regression(incent, 1)));
+ # @@MemberStats += (member -> ("boutsAvg" -> @@BoutsAccum));
+ # @@MemberStats += (member -> ("boutsSlope" -> Linear_Regression(incent, 2)));
+ @@MemberStats += (member -> ("milesAvg" -> @@MilesAccum));
+ @@MemberStats += (member -> ("milesSlope" -> Linear_Regression(incent, 3)));
+ END;
+
+
+ PRINT @@MemberStats;
+ PRINT @@likenessAccum;
+
+} \ No newline at end of file
diff --git a/tests/examplefiles/gsql/test.gsql.output b/tests/examplefiles/gsql/test.gsql.output
new file mode 100644
index 00000000..58fbecaa
--- /dev/null
+++ b/tests/examplefiles/gsql/test.gsql.output
@@ -0,0 +1,1503 @@
+'CREATE' Keyword
+' ' Text.Whitespace
+'QUERY' Keyword
+' ' Text.Whitespace
+'Member_Likeness' Name
+'(' Operator
+'VERTEX' Keyword
+' ' Text.Whitespace
+'<motionMember>' Name.Constant
+' ' Text.Whitespace
+'m1' Name
+',' Operator
+' ' Text.Whitespace
+'STRING' Keyword
+' ' Text.Whitespace
+'inDate' Name
+')' Operator
+' ' Text.Whitespace
+'FOR' Keyword
+' ' Text.Whitespace
+'GRAPH' Keyword
+' ' Text.Whitespace
+'motionData' Name
+' ' Text.Whitespace
+'{' Punctuation
+' \n\t' Text.Whitespace
+'# TYPEDEF TUPLE <x FLOAT, y FLOAT> XYPair;\n' Comment.Single
+
+'\t' Text.Whitespace
+'MapAccum' Keyword
+'<VERTEX<motionMember>' Name.Constant
+',' Operator
+' ' Text.Whitespace
+'MapAccum' Keyword
+'<STRING, FLOAT>>' Name.Constant
+' ' Text.Whitespace
+'@@likenessAccum' Name.Variable
+';' Operator
+'\n\t' Text.Whitespace
+'MapAccum' Keyword
+'<VERTEX<motionMember>, FLOAT>' Name.Constant
+' ' Text.Whitespace
+'@@BirthYearAccum' Name.Variable
+';' Operator
+'\n\t' Text.Whitespace
+'MapAccum' Keyword
+'<VERTEX<motionMember>, FLOAT>' Name.Constant
+' ' Text.Whitespace
+'@@HeightAccum' Name.Variable
+';' Operator
+'\n\t' Text.Whitespace
+'MapAccum' Keyword
+'<VERTEX<motionMember>, FLOAT>' Name.Constant
+' ' Text.Whitespace
+'@@WeightAccum' Name.Variable
+';' Operator
+'\n\t' Text.Whitespace
+'ListAccum' Keyword
+'<VERTEX<location>>' Name.Constant
+' ' Text.Whitespace
+'@@MemLocAccum' Name.Variable
+';' Operator
+'\n\t' Text.Whitespace
+'MapAccum' Keyword
+'<VERTEX<motionMember>, FLOAT>' Name.Constant
+' ' Text.Whitespace
+'@@LocAccum' Name.Variable
+';' Operator
+'\n\t' Text.Whitespace
+'MapAccum' Keyword
+'<VERTEX<motionMember>' Name.Constant
+',' Operator
+' ' Text.Whitespace
+'BagAccum' Keyword
+'<VERTEX<incentive>>>' Name.Constant
+' ' Text.Whitespace
+'@@DayIncentives' Name.Variable
+';' Operator
+'\n\t' Text.Whitespace
+'MapAccum' Keyword
+'<VERTEX<motionMember>' Name.Constant
+',' Operator
+' ' Text.Whitespace
+'MapAccum' Keyword
+'<STRING, FLOAT>>' Name.Constant
+' ' Text.Whitespace
+'@@MemberStats' Name.Variable
+';' Operator
+'\n\t' Text.Whitespace
+'BagAccum' Keyword
+'<VERTEX<incentive>>' Name.Constant
+' ' Text.Whitespace
+'@MemberIncentives' Name.Variable
+';' Operator
+'\n\t' Text.Whitespace
+'AvgAccum' Keyword
+' ' Text.Whitespace
+'@@StepsAccum' Name.Variable
+';' Operator
+'\n\t' Text.Whitespace
+'AvgAccum' Keyword
+' ' Text.Whitespace
+'@@BoutsAccum' Name.Variable
+';' Operator
+'\n\t' Text.Whitespace
+'AvgAccum' Keyword
+' ' Text.Whitespace
+'@@MilesAccum' Name.Variable
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'# Universal Vars\n' Comment.Single
+
+'\t' Text.Whitespace
+'INT' Keyword
+' ' Text.Whitespace
+'lastMax' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'0' Literal.Number
+';' Operator
+'\n\t' Text.Whitespace
+'INT' Keyword
+' ' Text.Whitespace
+'lastMin' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'1000' Literal.Number
+';' Operator
+'\n\t' Text.Whitespace
+'FLOAT' Keyword
+' ' Text.Whitespace
+'mult' Name
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'# Age Vars\n' Comment.Single
+
+'\t' Text.Whitespace
+'INT' Keyword
+' ' Text.Whitespace
+'ageRange' Name
+';' Operator
+'\n\t' Text.Whitespace
+'INT' Keyword
+' ' Text.Whitespace
+'birthYear' Name
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'# Height Vars\n' Comment.Single
+
+'\t' Text.Whitespace
+'INT' Keyword
+' ' Text.Whitespace
+'heightRange' Name
+';' Operator
+'\n\t' Text.Whitespace
+'INT' Keyword
+' ' Text.Whitespace
+'height' Name
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'# Height Vars\n' Comment.Single
+
+'\t' Text.Whitespace
+'INT' Keyword
+' ' Text.Whitespace
+'weightRange' Name
+';' Operator
+'\n\t' Text.Whitespace
+'INT' Keyword
+' ' Text.Whitespace
+'weight' Name
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'# Location Vars\n' Comment.Single
+
+'\t' Text.Whitespace
+'FLOAT' Keyword
+' ' Text.Whitespace
+'locRange' Name
+';' Operator
+'\n\t' Text.Whitespace
+'VERTEX' Keyword
+' ' Text.Whitespace
+'memLoc' Name
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'# Activity Vars\n' Comment.Single
+
+'\t' Text.Whitespace
+'DATETIME' Keyword
+' ' Text.Whitespace
+'lastRecording' Name
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'# lastRecording = to_datetime("2018-05-19");\n' Comment.Single
+
+'\t' Text.Whitespace
+'lastRecording' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'to_datetime' Keyword
+'(' Operator
+'inDate' Name
+')' Operator
+';' Operator
+'\n\n ' Text.Whitespace
+'/*\n\n test comment block \n\n */' Comment.Multiline
+'\n\t\n\t\n\t' Text.Whitespace
+'members' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'{' Punctuation
+'motionMember' Name
+'.' Punctuation
+'*' Punctuation
+'}' Punctuation
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'birthYear' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'Get_Birth_Year' Name
+'(' Operator
+'m1' Name
+')' Operator
+';' Operator
+'\n\t' Text.Whitespace
+'height' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'m1' Name
+'.' Punctuation
+'Height' Name
+';' Operator
+'\n\t' Text.Whitespace
+'weight' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'m1' Name
+'.' Punctuation
+'Weight' Name
+';' Operator
+'\n\t' Text.Whitespace
+'temp' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'SELECT' Keyword
+' ' Text.Whitespace
+'loc' Name
+' ' Text.Whitespace
+'FROM' Keyword
+' ' Text.Whitespace
+'members' Name
+':' Operator
+'member' Name
+' ' Text.Whitespace
+'-' Operator
+'(' Operator
+':' Operator
+'e' Name
+')' Operator
+' -' Operator
+' ' Text.Whitespace
+'location' Name
+':' Operator
+' ' Text.Whitespace
+'loc' Name
+'\n\t ' Text.Whitespace
+'WHERE' Keyword
+' ' Text.Whitespace
+'member' Name
+' ' Text.Whitespace
+'== ' Operator
+'m1' Name
+'\n\t ' Text.Whitespace
+'ACCUM' Keyword
+' \n\t ' Text.Whitespace
+'@@MemLocAccum' Name.Variable
+' ' Text.Whitespace
+'+= ' Operator
+'loc' Name
+';' Operator
+'\n\t' Text.Whitespace
+'FOREACH' Keyword
+' ' Text.Whitespace
+'loc' Name
+' ' Text.Whitespace
+'in' Keyword
+' ' Text.Whitespace
+'@@MemLocAccum' Name.Variable
+' ' Text.Whitespace
+'DO' Keyword
+'\n\t ' Text.Whitespace
+'memLoc' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'loc' Name
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t \n\t' Text.Whitespace
+'PRINT' Keyword
+' ' Text.Whitespace
+'memLoc' Name
+';' Operator
+'\n\t' Text.Whitespace
+'PRINT' Keyword
+' ' Text.Whitespace
+'birthYear' Name
+';' Operator
+'\n\t' Text.Whitespace
+'PRINT' Keyword
+' ' Text.Whitespace
+'height' Name
+';' Operator
+'\n\t' Text.Whitespace
+'PRINT' Keyword
+' ' Text.Whitespace
+'weight' Name
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'results' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'SELECT' Keyword
+' ' Text.Whitespace
+'member' Name
+' ' Text.Whitespace
+'FROM' Keyword
+' ' Text.Whitespace
+'members' Name
+':' Operator
+'member' Name
+'\n\t ' Text.Whitespace
+'ACCUM' Keyword
+' \n\t ' Text.Whitespace
+'@@BirthYearAccum' Name.Variable
+' ' Text.Whitespace
+'+= ' Operator
+'(' Operator
+'member' Name
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'abs' Name
+'(' Operator
+'Get_Birth_Year' Name
+'(' Operator
+'member' Name
+')' Operator
+' ' Text.Whitespace
+'-' Operator
+' ' Text.Whitespace
+'birthYear' Name
+')' Operator
+')' Operator
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'FOREACH' Keyword
+' ' Text.Whitespace
+'(' Operator
+'member' Name
+',' Operator
+'bys' Name
+')' Operator
+' ' Text.Whitespace
+'in' Keyword
+' ' Text.Whitespace
+'@@BirthYearAccum' Name.Variable
+' ' Text.Whitespace
+'DO' Keyword
+'\n\t ' Text.Whitespace
+'IF' Keyword
+' ' Text.Whitespace
+'bys' Name
+' ' Text.Whitespace
+'>' Operator
+' ' Text.Whitespace
+'lastMax' Name
+' ' Text.Whitespace
+'THEN' Keyword
+'\n\t ' Text.Whitespace
+'lastMax' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'bys' Name
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t ' Text.Whitespace
+'IF' Keyword
+' ' Text.Whitespace
+'bys' Name
+' ' Text.Whitespace
+'<' Operator
+' ' Text.Whitespace
+'lastMin' Name
+' ' Text.Whitespace
+'THEN' Keyword
+'\n\t ' Text.Whitespace
+'lastMin' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'bys' Name
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'ageRange' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'lastMax' Name
+' ' Text.Whitespace
+'-' Operator
+' ' Text.Whitespace
+'lastMin' Name
+';' Operator
+'\n\t' Text.Whitespace
+'print' Keyword
+' ' Text.Whitespace
+'ageRange' Name
+';' Operator
+'\n\t' Text.Whitespace
+'mult' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'1.0' Literal.Number
+'/' Operator
+'ageRange' Name
+';' Operator
+'\n\t\n\t\n\t' Text.Whitespace
+'FOREACH' Keyword
+' ' Text.Whitespace
+'(' Operator
+'member' Name
+',' Operator
+'bys' Name
+')' Operator
+' ' Text.Whitespace
+'in' Keyword
+' ' Text.Whitespace
+'@@BirthYearAccum' Name.Variable
+' ' Text.Whitespace
+'DO' Keyword
+'\n\t ' Text.Whitespace
+'bys' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'1' Literal.Number
+' ' Text.Whitespace
+'-' Operator
+' ' Text.Whitespace
+'bys' Name
+' ' Text.Whitespace
+'*' Punctuation
+' ' Text.Whitespace
+'mult' Name
+';' Operator
+'\n\t ' Text.Whitespace
+'@@likenessAccum' Name.Variable
+' ' Text.Whitespace
+'+= ' Operator
+'(' Operator
+'member' Name
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'(' Operator
+'"age"' Literal.String
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'bys' Name
+')' Operator
+')' Operator
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'lastMax' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'0' Literal.Number
+';' Operator
+'\n\t' Text.Whitespace
+'lastMin' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'1000' Literal.Number
+';' Operator
+'\n\t' Text.Whitespace
+'mult' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'0' Literal.Number
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'results' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'SELECT' Keyword
+' ' Text.Whitespace
+'member' Name
+' ' Text.Whitespace
+'FROM' Keyword
+' ' Text.Whitespace
+'members' Name
+':' Operator
+'member' Name
+'\n\t ' Text.Whitespace
+'ACCUM' Keyword
+' \n\t ' Text.Whitespace
+'@@HeightAccum' Name.Variable
+' ' Text.Whitespace
+'+= ' Operator
+'(' Operator
+'member' Name
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'abs' Name
+'(' Operator
+'member' Name
+'.' Punctuation
+'Height' Name
+' ' Text.Whitespace
+'-' Operator
+' ' Text.Whitespace
+'height' Name
+')' Operator
+')' Operator
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'FOREACH' Keyword
+' ' Text.Whitespace
+'(' Operator
+'member' Name
+',' Operator
+'heights' Name
+')' Operator
+' ' Text.Whitespace
+'in' Keyword
+' ' Text.Whitespace
+'@@HeightAccum' Name.Variable
+' ' Text.Whitespace
+'DO' Keyword
+'\n\t ' Text.Whitespace
+'IF' Keyword
+' ' Text.Whitespace
+'heights' Name
+' ' Text.Whitespace
+'<' Operator
+' ' Text.Whitespace
+'height' Name
+' ' Text.Whitespace
+'THEN' Keyword
+'\n\t ' Text.Whitespace
+'IF' Keyword
+' ' Text.Whitespace
+'heights' Name
+' ' Text.Whitespace
+'>' Operator
+' ' Text.Whitespace
+'lastMax' Name
+' ' Text.Whitespace
+'THEN' Keyword
+'\n\t ' Text.Whitespace
+'lastMax' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'heights' Name
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t ' Text.Whitespace
+'IF' Keyword
+' ' Text.Whitespace
+'heights' Name
+' ' Text.Whitespace
+'<' Operator
+' ' Text.Whitespace
+'lastMin' Name
+' ' Text.Whitespace
+'THEN' Keyword
+'\n\t ' Text.Whitespace
+'lastMin' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'heights' Name
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'heightRange' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'lastMax' Name
+' ' Text.Whitespace
+'-' Operator
+' ' Text.Whitespace
+'lastMin' Name
+';' Operator
+'\n\t' Text.Whitespace
+'print' Keyword
+' ' Text.Whitespace
+'heightRange' Name
+';' Operator
+'\n\t' Text.Whitespace
+'mult' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'1.0' Literal.Number
+'/' Operator
+'heightRange' Name
+';' Operator
+'\n\t\n\t\n\t' Text.Whitespace
+'FOREACH' Keyword
+' ' Text.Whitespace
+'(' Operator
+'member' Name
+',' Operator
+'heights' Name
+')' Operator
+' ' Text.Whitespace
+'in' Keyword
+' ' Text.Whitespace
+'@@HeightAccum' Name.Variable
+' ' Text.Whitespace
+'DO' Keyword
+'\n\t ' Text.Whitespace
+'IF' Keyword
+' ' Text.Whitespace
+'heights' Name
+' ' Text.Whitespace
+'<' Operator
+' ' Text.Whitespace
+'height' Name
+' ' Text.Whitespace
+'THEN' Keyword
+'\n\t ' Text.Whitespace
+'heights' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'1' Literal.Number
+' ' Text.Whitespace
+'-' Operator
+' ' Text.Whitespace
+'heights' Name
+' ' Text.Whitespace
+'*' Punctuation
+' ' Text.Whitespace
+'mult' Name
+';' Operator
+'\n\t ' Text.Whitespace
+'ELSE' Keyword
+'\n\t ' Text.Whitespace
+'heights' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'0' Literal.Number
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t ' Text.Whitespace
+'@@likenessAccum' Name.Variable
+' ' Text.Whitespace
+'+= ' Operator
+'(' Operator
+'member' Name
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'(' Operator
+'"height"' Literal.String
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'heights' Name
+')' Operator
+')' Operator
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'lastMax' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'0' Literal.Number
+';' Operator
+'\n\t' Text.Whitespace
+'lastMin' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'1000' Literal.Number
+';' Operator
+'\n\t' Text.Whitespace
+'mult' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'0' Literal.Number
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'results' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'SELECT' Keyword
+' ' Text.Whitespace
+'member' Name
+' ' Text.Whitespace
+'FROM' Keyword
+' ' Text.Whitespace
+'members' Name
+':' Operator
+'member' Name
+'\n\t ' Text.Whitespace
+'ACCUM' Keyword
+' \n\t ' Text.Whitespace
+'@@WeightAccum' Name.Variable
+' ' Text.Whitespace
+'+= ' Operator
+'(' Operator
+'member' Name
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'abs' Name
+'(' Operator
+'member' Name
+'.' Punctuation
+'Weight' Name
+' ' Text.Whitespace
+'-' Operator
+' ' Text.Whitespace
+'weight' Name
+')' Operator
+')' Operator
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'FOREACH' Keyword
+' ' Text.Whitespace
+'(' Operator
+'member' Name
+',' Operator
+'weights' Name
+')' Operator
+' ' Text.Whitespace
+'in' Keyword
+' ' Text.Whitespace
+'@@WeightAccum' Name.Variable
+' ' Text.Whitespace
+'DO' Keyword
+'\n\t ' Text.Whitespace
+'IF' Keyword
+' ' Text.Whitespace
+'weights' Name
+' ' Text.Whitespace
+'<' Operator
+' ' Text.Whitespace
+'weight' Name
+' ' Text.Whitespace
+'THEN' Keyword
+'\n\t ' Text.Whitespace
+'IF' Keyword
+' ' Text.Whitespace
+'weights' Name
+' ' Text.Whitespace
+'>' Operator
+' ' Text.Whitespace
+'lastMax' Name
+' ' Text.Whitespace
+'THEN' Keyword
+'\n\t ' Text.Whitespace
+'lastMax' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'weights' Name
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t ' Text.Whitespace
+'IF' Keyword
+' ' Text.Whitespace
+'weights' Name
+' ' Text.Whitespace
+'<' Operator
+' ' Text.Whitespace
+'lastMin' Name
+' ' Text.Whitespace
+'THEN' Keyword
+'\n\t ' Text.Whitespace
+'lastMin' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'weights' Name
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'weightRange' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'lastMax' Name
+' ' Text.Whitespace
+'-' Operator
+' ' Text.Whitespace
+'lastMin' Name
+';' Operator
+'\n\t' Text.Whitespace
+'print' Keyword
+' ' Text.Whitespace
+'weightRange' Name
+';' Operator
+'\n\t' Text.Whitespace
+'mult' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'1.0' Literal.Number
+'/' Operator
+'weightRange' Name
+';' Operator
+'\n\t\n\t\n\t' Text.Whitespace
+'FOREACH' Keyword
+' ' Text.Whitespace
+'(' Operator
+'member' Name
+',' Operator
+'weights' Name
+')' Operator
+' ' Text.Whitespace
+'in' Keyword
+' ' Text.Whitespace
+'@@WeightAccum' Name.Variable
+' ' Text.Whitespace
+'DO' Keyword
+'\n\t ' Text.Whitespace
+'IF' Keyword
+' ' Text.Whitespace
+'weights' Name
+' ' Text.Whitespace
+'<' Operator
+' ' Text.Whitespace
+'weight' Name
+' ' Text.Whitespace
+'THEN' Keyword
+'\n\t ' Text.Whitespace
+'weights' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'1' Literal.Number
+' ' Text.Whitespace
+'-' Operator
+' ' Text.Whitespace
+'weights' Name
+' ' Text.Whitespace
+'*' Punctuation
+' ' Text.Whitespace
+'mult' Name
+';' Operator
+'\n\t ' Text.Whitespace
+'ELSE' Keyword
+'\n\t ' Text.Whitespace
+'weights' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'0' Literal.Number
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t ' Text.Whitespace
+'@@likenessAccum' Name.Variable
+' ' Text.Whitespace
+'+= ' Operator
+'(' Operator
+'member' Name
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'(' Operator
+'"weight"' Literal.String
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'weights' Name
+')' Operator
+')' Operator
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'lastMax' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'0' Literal.Number
+';' Operator
+'\n\t' Text.Whitespace
+'lastMin' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'1000' Literal.Number
+';' Operator
+'\n\t' Text.Whitespace
+'mult' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'0' Literal.Number
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'resultsLoc' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'SELECT' Keyword
+' ' Text.Whitespace
+'loc' Name
+' ' Text.Whitespace
+'FROM' Keyword
+' ' Text.Whitespace
+'members' Name
+':' Operator
+'member' Name
+' ' Text.Whitespace
+'-' Operator
+'(' Operator
+':' Operator
+'e' Name
+')' Operator
+' -' Operator
+' ' Text.Whitespace
+'location' Name
+':' Operator
+' ' Text.Whitespace
+'loc' Name
+'\n\t ' Text.Whitespace
+'ACCUM' Keyword
+' \n\t ' Text.Whitespace
+'@@LocAccum' Name.Variable
+' ' Text.Whitespace
+'+= ' Operator
+'(' Operator
+'member' Name
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'Check_Distance' Name
+'(' Operator
+'loc' Name
+',' Operator
+'memLoc' Name
+')' Operator
+')' Operator
+';' Operator
+'\n\t' Text.Whitespace
+'FOREACH' Keyword
+' ' Text.Whitespace
+'(' Operator
+'member' Name
+',' Operator
+'loc' Name
+')' Operator
+' ' Text.Whitespace
+'in' Keyword
+' ' Text.Whitespace
+'@@LocAccum' Name.Variable
+' ' Text.Whitespace
+'DO' Keyword
+'\n\t ' Text.Whitespace
+'IF' Keyword
+' ' Text.Whitespace
+'loc' Name
+' ' Text.Whitespace
+'<' Operator
+' ' Text.Whitespace
+'5800' Literal.Number
+' ' Text.Whitespace
+'THEN' Keyword
+'\n\t ' Text.Whitespace
+'IF' Keyword
+' ' Text.Whitespace
+'loc' Name
+' ' Text.Whitespace
+'>' Operator
+' ' Text.Whitespace
+'lastMax' Name
+' ' Text.Whitespace
+'THEN' Keyword
+'\n\t ' Text.Whitespace
+'lastMax' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'ceil' Name
+'(' Operator
+'loc' Name
+')' Operator
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t ' Text.Whitespace
+'IF' Keyword
+' ' Text.Whitespace
+'loc' Name
+' ' Text.Whitespace
+'<' Operator
+' ' Text.Whitespace
+'lastMin' Name
+' ' Text.Whitespace
+'THEN' Keyword
+'\n\t ' Text.Whitespace
+'lastMin' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'floor' Name
+'(' Operator
+'loc' Name
+')' Operator
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'PRINT' Keyword
+' ' Text.Whitespace
+'lastMax' Name
+';' Operator
+'\n\t' Text.Whitespace
+'PRINT' Keyword
+' ' Text.Whitespace
+'lastMin' Name
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'locRange' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'lastMax' Name
+' ' Text.Whitespace
+'-' Operator
+' ' Text.Whitespace
+'lastMin' Name
+';' Operator
+'\n\t' Text.Whitespace
+'print' Keyword
+' ' Text.Whitespace
+'locRange' Name
+';' Operator
+'\n\t' Text.Whitespace
+'mult' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'1.0' Literal.Number
+'/' Operator
+'locRange' Name
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'FOREACH' Keyword
+' ' Text.Whitespace
+'(' Operator
+'member' Name
+',' Operator
+'loc' Name
+')' Operator
+' ' Text.Whitespace
+'in' Keyword
+' ' Text.Whitespace
+'@@LocAccum' Name.Variable
+' ' Text.Whitespace
+'DO' Keyword
+'\n\t ' Text.Whitespace
+'IF' Keyword
+' ' Text.Whitespace
+'loc' Name
+' ' Text.Whitespace
+'>' Operator
+' ' Text.Whitespace
+'5800' Literal.Number
+' ' Text.Whitespace
+'THEN' Keyword
+'\n\t ' Text.Whitespace
+'loc' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'-' Operator
+'1' Literal.Number
+';' Operator
+'\n\t ' Text.Whitespace
+'ELSE' Keyword
+'\n\t ' Text.Whitespace
+'loc' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'1' Literal.Number
+' ' Text.Whitespace
+'-' Operator
+' ' Text.Whitespace
+'loc' Name
+' ' Text.Whitespace
+'*' Punctuation
+' ' Text.Whitespace
+'mult' Name
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t ' Text.Whitespace
+'@@likenessAccum' Name.Variable
+' ' Text.Whitespace
+'+= ' Operator
+'(' Operator
+'member' Name
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'(' Operator
+'"distance"' Literal.String
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'loc' Name
+')' Operator
+')' Operator
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'lastMax' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'0' Literal.Number
+';' Operator
+'\n\t' Text.Whitespace
+'lastMin' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'1000' Literal.Number
+';' Operator
+'\n\t' Text.Whitespace
+'mult' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'0' Literal.Number
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'incentives' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'{' Punctuation
+'incentive' Name
+'.' Punctuation
+'*' Punctuation
+'}' Punctuation
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'incentives' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'SELECT' Keyword
+' ' Text.Whitespace
+'incent' Name
+' ' Text.Whitespace
+'FROM' Keyword
+' ' Text.Whitespace
+'incentives' Name
+':' Operator
+'incent' Name
+' ' Text.Whitespace
+'- ' Operator
+'(' Operator
+':' Operator
+'e' Name
+')' Operator
+' -' Operator
+' ' Text.Whitespace
+'lookupRule' Name
+':' Operator
+'rule' Name
+' ' Text.Whitespace
+'WHERE' Keyword
+'\n\t ' Text.Whitespace
+'rule' Name
+'.' Punctuation
+'RuleName' Name
+' ' Text.Whitespace
+'== ' Operator
+'"Tenacity"' Literal.String
+' ' Text.Whitespace
+'AND' Keyword
+' ' Text.Whitespace
+'incent' Name
+'.' Punctuation
+'IncentiveDate' Name
+' ' Text.Whitespace
+'>' Operator
+' ' Text.Whitespace
+'datetime_sub' Keyword
+'(' Operator
+'lastRecording' Name
+',' Operator
+' ' Text.Whitespace
+'INTERVAL' Keyword
+' ' Text.Whitespace
+'1' Literal.Number
+' ' Text.Whitespace
+'MONTH' Name
+')' Operator
+' ' Text.Whitespace
+'AND' Keyword
+' ' Text.Whitespace
+'incent' Name
+'.' Punctuation
+'IncentiveDate' Name
+' ' Text.Whitespace
+'<' Operator
+' ' Text.Whitespace
+'lastRecording' Name
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'members' Name
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'SELECT' Keyword
+' ' Text.Whitespace
+'member' Name
+' ' Text.Whitespace
+'FROM' Keyword
+' ' Text.Whitespace
+'incentives' Name
+':' Operator
+'incent' Name
+' ' Text.Whitespace
+'- ' Operator
+'(' Operator
+':' Operator
+'e' Name
+')' Operator
+' -' Operator
+' ' Text.Whitespace
+'motionMember' Name
+':' Operator
+'member' Name
+'\n\t ' Text.Whitespace
+'ACCUM' Keyword
+'\n\t ' Text.Whitespace
+'@@DayIncentives' Name.Variable
+' ' Text.Whitespace
+'+= ' Operator
+'(' Operator
+'member' Name
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'(' Operator
+'incent' Name
+')' Operator
+')' Operator
+';' Operator
+'\n\t\n\t' Text.Whitespace
+'FOREACH' Keyword
+' ' Text.Whitespace
+'(' Operator
+'member' Name
+',' Operator
+' ' Text.Whitespace
+'incent' Name
+')' Operator
+' ' Text.Whitespace
+'IN' Keyword
+' ' Text.Whitespace
+'@@DayIncentives' Name.Variable
+' ' Text.Whitespace
+'DO' Keyword
+'\n\t ' Text.Whitespace
+'@@StepsAccum' Name.Variable
+' ' Text.Whitespace
+'=' Operator
+' ' Text.Whitespace
+'0' Literal.Number
+';' Operator
+'\n\t ' Text.Whitespace
+'FOREACH' Keyword
+' ' Text.Whitespace
+'Incentive' Name
+' ' Text.Whitespace
+'IN' Keyword
+' ' Text.Whitespace
+'incent' Name
+' ' Text.Whitespace
+'DO' Keyword
+'\n\t ' Text.Whitespace
+'@@StepsAccum' Name.Variable
+' ' Text.Whitespace
+'+= ' Operator
+'Incentive' Name
+'.' Punctuation
+'TotalSteps' Name
+';' Operator
+'\n\t ' Text.Whitespace
+'@@BoutsAccum' Name.Variable
+' ' Text.Whitespace
+'+= ' Operator
+'Incentive' Name
+'.' Punctuation
+'TotalBouts' Name
+';' Operator
+'\n\t ' Text.Whitespace
+'@@MilesAccum' Name.Variable
+' ' Text.Whitespace
+'+= ' Operator
+'Incentive' Name
+'.' Punctuation
+'Miles' Name
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t ' Text.Whitespace
+'@@MemberStats' Name.Variable
+' ' Text.Whitespace
+'+= ' Operator
+'(' Operator
+'member' Name
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'(' Operator
+'"stepsAvg"' Literal.String
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'@@StepsAccum' Name.Variable
+')' Operator
+')' Operator
+';' Operator
+'\n\t ' Text.Whitespace
+'@@MemberStats' Name.Variable
+' ' Text.Whitespace
+'+= ' Operator
+'(' Operator
+'member' Name
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'(' Operator
+'"stepsSlope"' Literal.String
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'Linear_Regression' Name
+'(' Operator
+'incent' Name
+',' Operator
+' ' Text.Whitespace
+'1' Literal.Number
+')' Operator
+')' Operator
+')' Operator
+';' Operator
+'\n\t ' Text.Whitespace
+'# @@MemberStats += (member -> ("boutsAvg" -> @@BoutsAccum));\n' Comment.Single
+
+'\t # @@MemberStats += (member -> ("boutsSlope" -> Linear_Regression(incent, 2)));\n' Comment.Single
+
+'\t ' Text.Whitespace
+'@@MemberStats' Name.Variable
+' ' Text.Whitespace
+'+= ' Operator
+'(' Operator
+'member' Name
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'(' Operator
+'"milesAvg"' Literal.String
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'@@MilesAccum' Name.Variable
+')' Operator
+')' Operator
+';' Operator
+'\n\t ' Text.Whitespace
+'@@MemberStats' Name.Variable
+' ' Text.Whitespace
+'+= ' Operator
+'(' Operator
+'member' Name
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'(' Operator
+'"milesSlope"' Literal.String
+' ' Text.Whitespace
+'->' Operator
+' ' Text.Whitespace
+'Linear_Regression' Name
+'(' Operator
+'incent' Name
+',' Operator
+' ' Text.Whitespace
+'3' Literal.Number
+')' Operator
+')' Operator
+')' Operator
+';' Operator
+'\n\t ' Text.Whitespace
+'END' Keyword
+';' Operator
+'\n\t\n\t\n\t' Text.Whitespace
+'PRINT' Keyword
+' ' Text.Whitespace
+'@@MemberStats' Name.Variable
+';' Operator
+'\n\t' Text.Whitespace
+'PRINT' Keyword
+' ' Text.Whitespace
+'@@likenessAccum' Name.Variable
+';' Operator
+'\n\t\n' Text.Whitespace
+
+'}' Punctuation
+'\n' Text.Whitespace