mw-parser/docs/cloverage/mw_parser/declarative.clj.html

480 lines
36 KiB
HTML

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="../coverage.css"/> <title> mw_parser/declarative.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;^{:doc&nbsp;&quot;A&nbsp;very&nbsp;simple&nbsp;parser&nbsp;which&nbsp;parses&nbsp;production&nbsp;rules.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:author&nbsp;&quot;Simon&nbsp;Brooke&quot;}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;mw-parser.declarative
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[instaparse.core&nbsp;:refer&nbsp;[parser]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.string&nbsp;:refer&nbsp;[join&nbsp;trim]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[mw-parser.errors&nbsp;:refer&nbsp;[throw-parse-exception]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[mw-parser.generate&nbsp;:refer&nbsp;[generate]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[mw-parser.simplify&nbsp;:refer&nbsp;[simplify-rule]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[mw-parser.utils&nbsp;:refer&nbsp;[rule?]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[trptr.java-wrapper.locale&nbsp;:refer&nbsp;[get-default]])
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
011&nbsp;&nbsp;&nbsp;&nbsp;(:import&nbsp;[java.util&nbsp;Locale]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
012&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
013&nbsp;&nbsp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
014&nbsp;&nbsp;;;;;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
015&nbsp;&nbsp;;;;;&nbsp;mw-parser:&nbsp;a&nbsp;rule&nbsp;parser&nbsp;for&nbsp;MicroWorld.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
016&nbsp;&nbsp;;;;;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
017&nbsp;&nbsp;;;;;&nbsp;This&nbsp;program&nbsp;is&nbsp;free&nbsp;software;&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and&#x2F;or
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
018&nbsp;&nbsp;;;;;&nbsp;modify&nbsp;it&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;;;;;&nbsp;as&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation;&nbsp;either&nbsp;version&nbsp;2
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;;;;;&nbsp;of&nbsp;the&nbsp;License,&nbsp;or&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
021&nbsp;&nbsp;;;;;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
022&nbsp;&nbsp;;;;;&nbsp;This&nbsp;program&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful,
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
023&nbsp;&nbsp;;;;;&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
024&nbsp;&nbsp;;;;;&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;&nbsp;See&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
025&nbsp;&nbsp;;;;;&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
026&nbsp;&nbsp;;;;;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
027&nbsp;&nbsp;;;;;&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
028&nbsp;&nbsp;;;;;&nbsp;along&nbsp;with&nbsp;this&nbsp;program;&nbsp;if&nbsp;not,&nbsp;write&nbsp;to&nbsp;the&nbsp;Free&nbsp;Software
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
029&nbsp;&nbsp;;;;;&nbsp;Foundation,&nbsp;Inc.,&nbsp;51&nbsp;Franklin&nbsp;Street,&nbsp;Fifth&nbsp;Floor,&nbsp;Boston,&nbsp;MA&nbsp;&nbsp;02110-1301,
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
030&nbsp;&nbsp;;;;;&nbsp;USA.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
031&nbsp;&nbsp;;;;;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
032&nbsp;&nbsp;;;;;&nbsp;Copyright&nbsp;(C)&nbsp;2014&nbsp;Simon&nbsp;Brooke
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
033&nbsp;&nbsp;;;;;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
034&nbsp;&nbsp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
035&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
036&nbsp;&nbsp;(def&nbsp;rule-grammar
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;&quot;Basic&nbsp;rule&nbsp;language&nbsp;grammar.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;order&nbsp;to&nbsp;simplify&nbsp;translation&nbsp;into&nbsp;other&nbsp;natural&nbsp;languages,&nbsp;all
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
040&nbsp;&nbsp;&nbsp;&nbsp;TOKENS&nbsp;within&nbsp;the&nbsp;parser&nbsp;should&nbsp;be&nbsp;unambiguou.&quot;
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
041&nbsp;&nbsp;&nbsp;&nbsp;(join&nbsp;&quot;\n&quot;&nbsp;[&quot;RULE&nbsp;:=&nbsp;IF&nbsp;SPACE&nbsp;CONDITIONS&nbsp;SPACE&nbsp;THEN&nbsp;SPACE&nbsp;ACTIONS;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;ACTIONS&nbsp;:=&nbsp;ACTION&nbsp;|&nbsp;ACTION&nbsp;SPACE&nbsp;AND&nbsp;SPACE&nbsp;ACTIONS&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;ACTION&nbsp;:=&nbsp;SIMPLE-ACTION&nbsp;|&nbsp;PROBABLE-ACTION;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;PROBABLE-ACTION&nbsp;:=&nbsp;VALUE&nbsp;SPACE&nbsp;CHANCE-IN&nbsp;SPACE&nbsp;VALUE&nbsp;SPACE&nbsp;SIMPLE-ACTION;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;SIMPLE-ACTION&nbsp;:=&nbsp;SYMBOL&nbsp;SPACE&nbsp;BECOMES&nbsp;SPACE&nbsp;EXPRESSION;&quot;]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
046&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
047&nbsp;&nbsp;(def&nbsp;common-grammar
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
048&nbsp;&nbsp;&nbsp;&nbsp;&quot;Grammar&nbsp;rules&nbsp;used&nbsp;both&nbsp;in&nbsp;the&nbsp;rule&nbsp;grammar&nbsp;and&nbsp;in&nbsp;the&nbsp;flow&nbsp;grammar&quot;
</span><br/>
<span class="covered" title="30 out of 30 forms covered">
049&nbsp;&nbsp;&nbsp;&nbsp;(join&nbsp;&quot;\n&quot;&nbsp;[&quot;COMPARATIVE&nbsp;:=&nbsp;MORE&nbsp;|&nbsp;LESS;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;COMPARATIVE-QUALIFIER&nbsp;:=&nbsp;IS&nbsp;SPACE&nbsp;COMPARATIVE&nbsp;SPACE&nbsp;THAN&nbsp;|&nbsp;COMPARATIVE&nbsp;SPACE&nbsp;THAN;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;CONDITION&nbsp;:=&nbsp;WITHIN-CONDITION&nbsp;|&nbsp;NEIGHBOURS-CONDITION&nbsp;|&nbsp;PROPERTY-CONDITION;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;CONDITIONS&nbsp;:=&nbsp;DISJUNCT-CONDITION&nbsp;|&nbsp;CONJUNCT-CONDITION&nbsp;|&nbsp;CONDITION&nbsp;;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;CONJUNCT-CONDITION&nbsp;:=&nbsp;CONDITION&nbsp;SPACE&nbsp;AND&nbsp;SPACE&nbsp;CONDITIONS;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;DISJUNCT-CONDITION&nbsp;:=&nbsp;CONDITION&nbsp;SPACE&nbsp;OR&nbsp;SPACE&nbsp;CONDITIONS;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;DISJUNCT-EXPRESSION&nbsp;:=&nbsp;IN&nbsp;SPACE&nbsp;DISJUNCT-VALUE;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;DISJUNCT-VALUE&nbsp;:=&nbsp;VALUE&nbsp;|&nbsp;VALUE&nbsp;SPACE&nbsp;OR&nbsp;SPACE&nbsp;DISJUNCT-VALUE;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;EQUIVALENCE&nbsp;:=&nbsp;IS&nbsp;SPACE&nbsp;EQUAL&nbsp;|&nbsp;EQUAL&nbsp;|&nbsp;IS&nbsp;;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;EXPRESSION&nbsp;:=&nbsp;SIMPLE-EXPRESSION&nbsp;|&nbsp;RANGE-EXPRESSION&nbsp;|&nbsp;NUMERIC-EXPRESSION&nbsp;|&nbsp;DISJUNCT-EXPRESSION&nbsp;|&nbsp;VALUE;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;NEGATED-QUALIFIER&nbsp;:=&nbsp;QUALIFIER&nbsp;SPACE&nbsp;NOT&nbsp;|&nbsp;NOT&nbsp;SPACE&nbsp;QUALIFIER;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;NEIGHBOURS-CONDITION&nbsp;:=&nbsp;QUANTIFIER&nbsp;SPACE&nbsp;NEIGHBOURS&nbsp;SPACE&nbsp;IS&nbsp;SPACE&nbsp;PROPERTY-CONDITION&nbsp;|&nbsp;QUALIFIER&nbsp;SPACE&nbsp;NEIGHBOURS-CONDITION;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
061&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;NUMBER&nbsp;:=&nbsp;#&#x27;[0-9]+&#x27;&nbsp;|&nbsp;#&#x27;[0-9]+.[0-9]+&#x27;;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
062&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;NUMERIC-EXPRESSION&nbsp;:=&nbsp;VALUE&nbsp;|&nbsp;VALUE&nbsp;SPACE&nbsp;OPERATOR&nbsp;SPACE&nbsp;NUMERIC-EXPRESSION;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
063&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OPERATOR&nbsp;:=&nbsp;&#x27;+&#x27;&nbsp;|&nbsp;&#x27;-&#x27;&nbsp;|&nbsp;&#x27;*&#x27;&nbsp;|&nbsp;&#x27;&#x2F;&#x27;;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
064&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;PROPERTY&nbsp;:=&nbsp;SYMBOL;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
065&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;PROPERTY-CONDITION&nbsp;:=&nbsp;PROPERTY&nbsp;SPACE&nbsp;QUALIFIER&nbsp;SPACE&nbsp;EXPRESSION&nbsp;|&nbsp;VALUE;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
066&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;PROPERTY-CONDITION-OR-EXPRESSION&nbsp;:=&nbsp;PROPERTY-CONDITION&nbsp;|&nbsp;EXPRESSION;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
067&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;QUALIFIER&nbsp;:=&nbsp;COMPARATIVE-QUALIFIER&nbsp;|&nbsp;NEGATED-QUALIFIER&nbsp;|&nbsp;EQUIVALENCE&nbsp;|&nbsp;IS&nbsp;SPACE&nbsp;QUALIFIER;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
068&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;QUANTIFIER&nbsp;:=&nbsp;NUMBER&nbsp;|&nbsp;SOME&nbsp;|&nbsp;NONE&nbsp;|&nbsp;ALL&nbsp;|&nbsp;COMPARATIVE&nbsp;SPACE&nbsp;THAN&nbsp;SPACE&nbsp;NUMBER;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
069&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;RANGE-EXPRESSION&nbsp;:=&nbsp;BETWEEN&nbsp;SPACE&nbsp;NUMERIC-EXPRESSION&nbsp;SPACE&nbsp;AND&nbsp;SPACE&nbsp;NUMERIC-EXPRESSION;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
070&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;SIMPLE-EXPRESSION&nbsp;:=&nbsp;QUALIFIER&nbsp;SPACE&nbsp;EXPRESSION&nbsp;|&nbsp;VALUE;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
071&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;SPACE&nbsp;:=&nbsp;#&#x27;\\s+&#x27;;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
072&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;VALUE&nbsp;:=&nbsp;SYMBOL&nbsp;|&nbsp;NUMBER;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
073&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;VALUE&nbsp;:=&nbsp;SYMBOL&nbsp;|&nbsp;NUMBER;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
074&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;WITHIN-CONDITION&nbsp;:=&nbsp;QUANTIFIER&nbsp;SPACE&nbsp;NEIGHBOURS&nbsp;SPACE&nbsp;WITHIN&nbsp;SPACE&nbsp;NUMBER&nbsp;SPACE&nbsp;IS&nbsp;SPACE&nbsp;PROPERTY-CONDITION-OR-EXPRESSION;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
075&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
076&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
077&nbsp;&nbsp;(def&nbsp;keywords-en
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
078&nbsp;&nbsp;&nbsp;&nbsp;&quot;English&nbsp;language&nbsp;keyword&nbsp;literals&nbsp;used&nbsp;in&nbsp;rules&nbsp;-&nbsp;both&nbsp;in&nbsp;production
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
079&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rules&nbsp;(this&nbsp;namespace)&nbsp;and&nbsp;in&nbsp;flow&nbsp;rules&nbsp;(see&nbsp;mw-parser.flow).
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
080&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
081&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It&#x27;s&nbsp;a&nbsp;long&nbsp;term&nbsp;aim&nbsp;that&nbsp;the&nbsp;rule&nbsp;language&nbsp;should&nbsp;be&nbsp;easy&nbsp;to&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;internationalise;&nbsp;this&nbsp;isn&#x27;t&nbsp;a&nbsp;full&nbsp;solution&nbsp;but&nbsp;it&#x27;s&nbsp;a&nbsp;step&nbsp;towards
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
083&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;solution.&quot;
</span><br/>
<span class="covered" title="32 out of 32 forms covered">
084&nbsp;&nbsp;&nbsp;&nbsp;(join&nbsp;&quot;\n&quot;&nbsp;[&quot;ALL&nbsp;:=&nbsp;&#x27;all&#x27;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
085&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;AND&nbsp;:=&nbsp;&#x27;and&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
086&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;BECOMES&nbsp;:=&nbsp;&#x27;should&nbsp;be&#x27;&nbsp;|&nbsp;&#x27;becomes&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
087&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;BETWEEN&nbsp;:=&nbsp;&#x27;between&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
088&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;CHANCE-IN&nbsp;:=&nbsp;&#x27;chance&nbsp;in&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
089&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;EACH&nbsp;:=&nbsp;&#x27;each&#x27;&nbsp;|&nbsp;&#x27;every&#x27;&nbsp;|&nbsp;&#x27;all&#x27;;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
090&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;EQUAL&nbsp;:=&nbsp;&#x27;equal&nbsp;to&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
091&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;FIRST&nbsp;:=&nbsp;&#x27;first&#x27;;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
092&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;FLOW&nbsp;:=&nbsp;&#x27;flow&#x27;&nbsp;|&nbsp;&#x27;move&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;FROM&nbsp;:=&nbsp;&#x27;from&#x27;;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;IF&nbsp;:=&nbsp;&#x27;if&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
095&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;IN&nbsp;:=&nbsp;&#x27;in&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;IS&nbsp;:=&nbsp;&#x27;is&#x27;&nbsp;|&nbsp;&#x27;are&#x27;&nbsp;|&nbsp;&#x27;have&#x27;&nbsp;|&nbsp;&#x27;has&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
097&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;LEAST&nbsp;:=&nbsp;&#x27;least&#x27;;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;LESS&nbsp;:=&nbsp;&#x27;less&#x27;&nbsp;|&nbsp;&#x27;fewer&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
099&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;MORE&nbsp;:=&nbsp;&#x27;more&#x27;&nbsp;|&nbsp;&#x27;greater&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;MOST&nbsp;:=&nbsp;&#x27;most&#x27;;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;NEIGHBOURS&nbsp;:=&nbsp;&#x27;neighbour&#x27;&nbsp;|&nbsp;&#x27;neighbor&#x27;&nbsp;|&nbsp;&#x27;neighbours&#x27;&nbsp;|&nbsp;&#x27;neighbors&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;NONE&nbsp;:=&nbsp;&#x27;no&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;NOT&nbsp;:=&nbsp;&#x27;not&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OR&nbsp;:=&nbsp;&#x27;or&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;SOME&nbsp;:=&nbsp;&#x27;some&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;SYMBOL&nbsp;is&nbsp;in&nbsp;the&nbsp;per-language&nbsp;file&nbsp;so&nbsp;that&nbsp;languages&nbsp;that&nbsp;use
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;(e.g.)&nbsp;Cyrillic&nbsp;characters&nbsp;can&nbsp;change&nbsp;the&nbsp;definition.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
108&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;SYMBOL&nbsp;:=&nbsp;#&#x27;[a-z]+&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
109&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;THAN&nbsp;:=&nbsp;&#x27;than&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;THEN&nbsp;:=&nbsp;&#x27;then&#x27;;&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;TO&nbsp;:=&nbsp;&#x27;to&#x27;;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
112&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;WITH&nbsp;:=&nbsp;&#x27;with&#x27;&nbsp;|&nbsp;&#x27;where&#x27;&nbsp;|&nbsp;&#x27;having&#x27;;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
113&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;WITHIN&nbsp;:=&nbsp;&#x27;within&#x27;;&quot;]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
114&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
115&nbsp;&nbsp;(defn&nbsp;keywords-for-locale
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
116&nbsp;&nbsp;&nbsp;&nbsp;&quot;For&nbsp;now,&nbsp;just&nbsp;return&nbsp;`keywords-en`;&nbsp;plan&nbsp;is&nbsp;to&nbsp;have&nbsp;resource&nbsp;files&nbsp;of&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
117&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keywords&nbsp;for&nbsp;different&nbsp;languages&nbsp;in&nbsp;a&nbsp;resource&nbsp;directory,&nbsp;but&nbsp;that&nbsp;isn&#x27;t
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
118&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done&nbsp;yet.&nbsp;It&#x27;s&nbsp;probably&nbsp;not&nbsp;going&nbsp;to&nbsp;work&nbsp;easily&nbsp;for&nbsp;languages&nbsp;that&nbsp;use
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
119&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;non-latin&nbsp;alphabets,&nbsp;anyway.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
120&nbsp;&nbsp;&nbsp;&nbsp;([]
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
121&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keywords-for-locale&nbsp;(get-default)))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
122&nbsp;&nbsp;&nbsp;&nbsp;([^Locale&nbsp;_locale]
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keywords-en))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
124&nbsp;&nbsp;
</span><br/>
<span class="covered" title="58 out of 58 forms covered">
125&nbsp;&nbsp;(defmacro&nbsp;build-parser&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
126&nbsp;&nbsp;&nbsp;&nbsp;&quot;Compose&nbsp;this&nbsp;grammar&nbsp;fragment&nbsp;`g`&nbsp;with&nbsp;the&nbsp;common&nbsp;grammar&nbsp;fragments&nbsp;to&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
127&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;make&nbsp;a&nbsp;complete&nbsp;grammar,&nbsp;and&nbsp;return&nbsp;a&nbsp;parser&nbsp;for&nbsp;that&nbsp;complete&nbsp;grammar.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
128&nbsp;&nbsp;&nbsp;&nbsp;[g]
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
129&nbsp;&nbsp;&nbsp;&nbsp;`(parser&nbsp;(join&nbsp;&quot;\n&quot;&nbsp;[~g&nbsp;common-grammar&nbsp;(keywords-for-locale)])))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
130&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
131&nbsp;&nbsp;(def&nbsp;parse-rule
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
132&nbsp;&nbsp;&nbsp;&nbsp;&quot;Parse&nbsp;the&nbsp;argument,&nbsp;assumed&nbsp;to&nbsp;be&nbsp;a&nbsp;string&nbsp;in&nbsp;the&nbsp;correct&nbsp;syntax,&nbsp;and&nbsp;return&nbsp;a&nbsp;parse&nbsp;tree.&quot;
</span><br/>
<span class="covered" title="6 out of 6 forms covered">
133&nbsp;&nbsp;&nbsp;&nbsp;(build-parser&nbsp;rule-grammar))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
134&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
135&nbsp;&nbsp;(defn&nbsp;compile-rule
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
136&nbsp;&nbsp;&nbsp;&nbsp;&quot;Parse&nbsp;this&nbsp;`rule-text`,&nbsp;a&nbsp;string&nbsp;conforming&nbsp;to&nbsp;the&nbsp;grammar&nbsp;of&nbsp;MicroWorld&nbsp;rules,
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
137&nbsp;&nbsp;&nbsp;&nbsp;into&nbsp;Clojure&nbsp;source,&nbsp;and&nbsp;then&nbsp;compile&nbsp;it&nbsp;into&nbsp;an&nbsp;anonymous
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
138&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;object,&nbsp;getting&nbsp;round&nbsp;the&nbsp;problem&nbsp;of&nbsp;binding&nbsp;mw-engine.utils&nbsp;in
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
139&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;compiling&nbsp;environment.&nbsp;If&nbsp;`return-tuple?`&nbsp;is&nbsp;present&nbsp;and&nbsp;true,&nbsp;return
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
140&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;list&nbsp;comprising&nbsp;the&nbsp;anonymous&nbsp;function&nbsp;compiled,&nbsp;and&nbsp;the&nbsp;function&nbsp;from
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
141&nbsp;&nbsp;&nbsp;&nbsp;which&nbsp;it&nbsp;was&nbsp;compiled.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
142&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
143&nbsp;&nbsp;&nbsp;&nbsp;Throws&nbsp;an&nbsp;exception&nbsp;if&nbsp;parsing&nbsp;fails.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
144&nbsp;&nbsp;&nbsp;&nbsp;([rule-text&nbsp;return-tuple?]
</span><br/>
<span class="partial" title="5 out of 14 forms covered">
145&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(assert&nbsp;(string?&nbsp;rule-text))
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
146&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[rule&nbsp;(trim&nbsp;rule-text)
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
147&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree&nbsp;(simplify-rule&nbsp;(parse-rule&nbsp;rule))
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
148&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;afn&nbsp;(if&nbsp;(rule?&nbsp;tree)&nbsp;(eval&nbsp;(generate&nbsp;tree))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
149&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;else
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
150&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw-parse-exception&nbsp;tree))]
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
151&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;return-tuple?
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
152&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list&nbsp;afn&nbsp;rule)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
153&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;else
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
154&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;afn)))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
155&nbsp;&nbsp;&nbsp;&nbsp;([rule-text]
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
156&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(compile-rule&nbsp;rule-text&nbsp;false)))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
157&nbsp;&nbsp;
</span><br/>
</body>
</html>