sfp 0.3.4 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +9 -29
- data/bin/sfp +1 -1
- data/lib/sfp/SfpLangLexer.rb +65 -65
- data/lib/sfp/SfpLangParser.rb +196 -220
- data/lib/sfp/Sfplib.rb +22 -1
- data/lib/sfp/sas_translator.rb +215 -18
- data/sfp.gemspec +2 -2
- data/src/SfpLang.g +15 -39
- data/src/SfpLang.g.bak +1088 -0
- metadata +8 -17
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
SFP Parser
|
2
|
-
|
1
|
+
SFP Language Parser
|
2
|
+
===================
|
3
3
|
- Author: Herry (herry13@gmail.com)
|
4
|
-
- Version: 0.3.
|
4
|
+
- Version: 0.3.5
|
5
5
|
- License: [BSD License](https://github.com/herry13/sfp-ruby/blob/master/LICENSE)
|
6
6
|
|
7
7
|
A Ruby gem that provides a Ruby interface to parse [SFP language](https://github.com/herry13/nuri/wiki/SFP-language), a declarative language to specify a planning task.
|
@@ -10,6 +10,8 @@ Click [here](https://github.com/herry13/nuri/wiki/SFP-language), for more detail
|
|
10
10
|
|
11
11
|
This is a spin-out project from [Nuri](https://github.com/herry13/nuri).
|
12
12
|
|
13
|
+
**The planner has been moved to another project [sfplanner](https://github.com/herry13/sfplanner)**.
|
14
|
+
|
13
15
|
|
14
16
|
To install
|
15
17
|
----------
|
@@ -24,14 +26,12 @@ Requirements
|
|
24
26
|
- antlr3
|
25
27
|
- json
|
26
28
|
|
27
|
-
Tested on: MacOS X 10.8, Ubuntu 12.04, Scientific Linux 6, Debian Wheeze Raspberry
|
28
|
-
|
29
29
|
|
30
30
|
To use as a command line
|
31
31
|
------------------------
|
32
32
|
- parse a SFP file, and then print the output in JSON
|
33
33
|
|
34
|
-
$ sfp
|
34
|
+
$ sfp <sfp-file>
|
35
35
|
|
36
36
|
To solve a planning task, you can use [sfplanner](https://github.com/herry13/sfplanner)/
|
37
37
|
|
@@ -133,10 +133,10 @@ Example of Planning Task
|
|
133
133
|
and **a** is stopped, and preserves global constraint: **pc** is always
|
134
134
|
referring to a running service.
|
135
135
|
|
136
|
-
- To generate the workflow, we invoke **
|
137
|
-
the path of the task file:
|
136
|
+
- To generate the workflow, we invoke **sfplanner** (see [sfplanner](https://github.com/herry13/sfplanner))
|
137
|
+
command with argument the path of the task file:
|
138
138
|
|
139
|
-
$
|
139
|
+
$ sfplanner task.sfp
|
140
140
|
|
141
141
|
Which will generate a workflow in JSON
|
142
142
|
|
@@ -184,23 +184,3 @@ Example of Planning Task
|
|
184
184
|
This workflow is sequential that has 3 procedures. If you executes
|
185
185
|
the workflow in given order, it will achieves the goal state as well
|
186
186
|
as perserves the global constraints during the execution.
|
187
|
-
|
188
|
-
- To generate and execute the plan using Bash framework, we invoke **sfp**
|
189
|
-
command with an option *--solve-execute* and with an argument the path of
|
190
|
-
the task file:
|
191
|
-
|
192
|
-
$ sfp --solve-execute task.sfp
|
193
|
-
|
194
|
-
It will generate and execute the plan by invoking the Bash scripts in
|
195
|
-
the current directory (or as specified in environment variable SFP_HOME)
|
196
|
-
in the following sequence:
|
197
|
-
|
198
|
-
./modules/b/start
|
199
|
-
./modules/pc/redirect "$.b"
|
200
|
-
./modules/a/stop
|
201
|
-
|
202
|
-
- If you save the plan in a file e.g. **plan.json**, you could execute it
|
203
|
-
later using option *--execute*
|
204
|
-
|
205
|
-
$ sfp --execute plan.json
|
206
|
-
|
data/bin/sfp
CHANGED
data/lib/sfp/SfpLangLexer.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# Generated using ANTLR version: 3.2.1-SNAPSHOT Jul 31, 2010 19:34:52
|
6
6
|
# Ruby runtime library version: 1.8.11
|
7
7
|
# Input grammar file: SfpLang.g
|
8
|
-
# Generated at: 2013-07-
|
8
|
+
# Generated at: 2013-07-18 06:07:24
|
9
9
|
#
|
10
10
|
|
11
11
|
# ~~~> start load path setup
|
@@ -1758,7 +1758,7 @@ module SfpLang
|
|
1758
1758
|
|
1759
1759
|
|
1760
1760
|
# - - - - main rule block - - - -
|
1761
|
-
# at line
|
1761
|
+
# at line 1005:2: ( 'null' | 'nil' )
|
1762
1762
|
alt_1 = 2
|
1763
1763
|
look_1_0 = @input.peek( 1 )
|
1764
1764
|
|
@@ -1777,11 +1777,11 @@ module SfpLang
|
|
1777
1777
|
end
|
1778
1778
|
case alt_1
|
1779
1779
|
when 1
|
1780
|
-
# at line
|
1780
|
+
# at line 1005:4: 'null'
|
1781
1781
|
match( "null" )
|
1782
1782
|
|
1783
1783
|
when 2
|
1784
|
-
# at line
|
1784
|
+
# at line 1006:4: 'nil'
|
1785
1785
|
match( "nil" )
|
1786
1786
|
|
1787
1787
|
end
|
@@ -1806,7 +1806,7 @@ module SfpLang
|
|
1806
1806
|
|
1807
1807
|
|
1808
1808
|
# - - - - main rule block - - - -
|
1809
|
-
# at line
|
1809
|
+
# at line 1010:2: ( 'true' | 'false' | 'off' | 'on' | 'yes' | 'no' )
|
1810
1810
|
alt_2 = 6
|
1811
1811
|
case look_2 = @input.peek( 1 )
|
1812
1812
|
when 0x74 then alt_2 = 1
|
@@ -1827,27 +1827,27 @@ module SfpLang
|
|
1827
1827
|
end
|
1828
1828
|
case alt_2
|
1829
1829
|
when 1
|
1830
|
-
# at line
|
1830
|
+
# at line 1010:4: 'true'
|
1831
1831
|
match( "true" )
|
1832
1832
|
|
1833
1833
|
when 2
|
1834
|
-
# at line
|
1834
|
+
# at line 1011:4: 'false'
|
1835
1835
|
match( "false" )
|
1836
1836
|
|
1837
1837
|
when 3
|
1838
|
-
# at line
|
1838
|
+
# at line 1012:4: 'off'
|
1839
1839
|
match( "off" )
|
1840
1840
|
|
1841
1841
|
when 4
|
1842
|
-
# at line
|
1842
|
+
# at line 1013:4: 'on'
|
1843
1843
|
match( "on" )
|
1844
1844
|
|
1845
1845
|
when 5
|
1846
|
-
# at line
|
1846
|
+
# at line 1014:4: 'yes'
|
1847
1847
|
match( "yes" )
|
1848
1848
|
|
1849
1849
|
when 6
|
1850
|
-
# at line
|
1850
|
+
# at line 1015:4: 'no'
|
1851
1851
|
match( "no" )
|
1852
1852
|
|
1853
1853
|
end
|
@@ -1872,7 +1872,7 @@ module SfpLang
|
|
1872
1872
|
|
1873
1873
|
|
1874
1874
|
# - - - - main rule block - - - -
|
1875
|
-
# at line
|
1875
|
+
# at line 1018:6: ( 'a' .. 'z' | 'A' .. 'Z' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '-' )*
|
1876
1876
|
if @input.peek( 1 ).between?( 0x41, 0x5a ) || @input.peek( 1 ).between?( 0x61, 0x7a )
|
1877
1877
|
@input.consume
|
1878
1878
|
else
|
@@ -1882,7 +1882,7 @@ module SfpLang
|
|
1882
1882
|
end
|
1883
1883
|
|
1884
1884
|
|
1885
|
-
# at line
|
1885
|
+
# at line 1018:26: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '-' )*
|
1886
1886
|
while true # decision 3
|
1887
1887
|
alt_3 = 2
|
1888
1888
|
look_3_0 = @input.peek( 1 )
|
@@ -1930,8 +1930,8 @@ module SfpLang
|
|
1930
1930
|
|
1931
1931
|
|
1932
1932
|
# - - - - main rule block - - - -
|
1933
|
-
# at line
|
1934
|
-
# at line
|
1933
|
+
# at line 1022:4: ( '-' )? ( '0' .. '9' )+
|
1934
|
+
# at line 1022:4: ( '-' )?
|
1935
1935
|
alt_4 = 2
|
1936
1936
|
look_4_0 = @input.peek( 1 )
|
1937
1937
|
|
@@ -1940,11 +1940,11 @@ module SfpLang
|
|
1940
1940
|
end
|
1941
1941
|
case alt_4
|
1942
1942
|
when 1
|
1943
|
-
# at line
|
1943
|
+
# at line 1022:4: '-'
|
1944
1944
|
match( 0x2d )
|
1945
1945
|
|
1946
1946
|
end
|
1947
|
-
# at file
|
1947
|
+
# at file 1022:8: ( '0' .. '9' )+
|
1948
1948
|
match_count_5 = 0
|
1949
1949
|
while true
|
1950
1950
|
alt_5 = 2
|
@@ -1956,7 +1956,7 @@ module SfpLang
|
|
1956
1956
|
end
|
1957
1957
|
case alt_5
|
1958
1958
|
when 1
|
1959
|
-
# at line
|
1959
|
+
# at line 1022:9: '0' .. '9'
|
1960
1960
|
match_range( 0x30, 0x39 )
|
1961
1961
|
|
1962
1962
|
else
|
@@ -1991,7 +1991,7 @@ module SfpLang
|
|
1991
1991
|
|
1992
1992
|
|
1993
1993
|
# - - - - main rule block - - - -
|
1994
|
-
# at line
|
1994
|
+
# at line 1033:2: ( '//' (~ ( '\\n' | '\\r' ) )* | '#' (~ ( '\\n' | '\\r' ) )* | '/*' ( options {greedy=false; } : . )* '*/' )
|
1995
1995
|
alt_9 = 3
|
1996
1996
|
look_9_0 = @input.peek( 1 )
|
1997
1997
|
|
@@ -2012,9 +2012,9 @@ module SfpLang
|
|
2012
2012
|
end
|
2013
2013
|
case alt_9
|
2014
2014
|
when 1
|
2015
|
-
# at line
|
2015
|
+
# at line 1033:4: '//' (~ ( '\\n' | '\\r' ) )*
|
2016
2016
|
match( "//" )
|
2017
|
-
# at line
|
2017
|
+
# at line 1033:9: (~ ( '\\n' | '\\r' ) )*
|
2018
2018
|
while true # decision 6
|
2019
2019
|
alt_6 = 2
|
2020
2020
|
look_6_0 = @input.peek( 1 )
|
@@ -2025,7 +2025,7 @@ module SfpLang
|
|
2025
2025
|
end
|
2026
2026
|
case alt_6
|
2027
2027
|
when 1
|
2028
|
-
# at line
|
2028
|
+
# at line 1033:9: ~ ( '\\n' | '\\r' )
|
2029
2029
|
if @input.peek( 1 ).between?( 0x0, 0x9 ) || @input.peek( 1 ).between?( 0xb, 0xc ) || @input.peek( 1 ).between?( 0xe, 0xff )
|
2030
2030
|
@input.consume
|
2031
2031
|
else
|
@@ -2045,9 +2045,9 @@ module SfpLang
|
|
2045
2045
|
# <-- action
|
2046
2046
|
|
2047
2047
|
when 2
|
2048
|
-
# at line
|
2048
|
+
# at line 1034:4: '#' (~ ( '\\n' | '\\r' ) )*
|
2049
2049
|
match( 0x23 )
|
2050
|
-
# at line
|
2050
|
+
# at line 1034:8: (~ ( '\\n' | '\\r' ) )*
|
2051
2051
|
while true # decision 7
|
2052
2052
|
alt_7 = 2
|
2053
2053
|
look_7_0 = @input.peek( 1 )
|
@@ -2058,7 +2058,7 @@ module SfpLang
|
|
2058
2058
|
end
|
2059
2059
|
case alt_7
|
2060
2060
|
when 1
|
2061
|
-
# at line
|
2061
|
+
# at line 1034:8: ~ ( '\\n' | '\\r' )
|
2062
2062
|
if @input.peek( 1 ).between?( 0x0, 0x9 ) || @input.peek( 1 ).between?( 0xb, 0xc ) || @input.peek( 1 ).between?( 0xe, 0xff )
|
2063
2063
|
@input.consume
|
2064
2064
|
else
|
@@ -2078,9 +2078,9 @@ module SfpLang
|
|
2078
2078
|
# <-- action
|
2079
2079
|
|
2080
2080
|
when 3
|
2081
|
-
# at line
|
2081
|
+
# at line 1035:4: '/*' ( options {greedy=false; } : . )* '*/'
|
2082
2082
|
match( "/*" )
|
2083
|
-
# at line
|
2083
|
+
# at line 1035:9: ( options {greedy=false; } : . )*
|
2084
2084
|
while true # decision 8
|
2085
2085
|
alt_8 = 2
|
2086
2086
|
look_8_0 = @input.peek( 1 )
|
@@ -2100,7 +2100,7 @@ module SfpLang
|
|
2100
2100
|
end
|
2101
2101
|
case alt_8
|
2102
2102
|
when 1
|
2103
|
-
# at line
|
2103
|
+
# at line 1035:37: .
|
2104
2104
|
match_any
|
2105
2105
|
|
2106
2106
|
else
|
@@ -2134,9 +2134,9 @@ module SfpLang
|
|
2134
2134
|
|
2135
2135
|
|
2136
2136
|
# - - - - main rule block - - - -
|
2137
|
-
# at line
|
2137
|
+
# at line 1039:4: 'r\"' ( options {greedy=false; } : . )* '\"'
|
2138
2138
|
match( "r\"" )
|
2139
|
-
# at line
|
2139
|
+
# at line 1039:9: ( options {greedy=false; } : . )*
|
2140
2140
|
while true # decision 10
|
2141
2141
|
alt_10 = 2
|
2142
2142
|
look_10_0 = @input.peek( 1 )
|
@@ -2149,7 +2149,7 @@ module SfpLang
|
|
2149
2149
|
end
|
2150
2150
|
case alt_10
|
2151
2151
|
when 1
|
2152
|
-
# at line
|
2152
|
+
# at line 1039:37: .
|
2153
2153
|
match_any
|
2154
2154
|
|
2155
2155
|
else
|
@@ -2179,8 +2179,8 @@ module SfpLang
|
|
2179
2179
|
|
2180
2180
|
|
2181
2181
|
# - - - - main rule block - - - -
|
2182
|
-
# at line
|
2183
|
-
# at line
|
2182
|
+
# at line 1042:6: ( '\\r' )? '\\n'
|
2183
|
+
# at line 1042:6: ( '\\r' )?
|
2184
2184
|
alt_11 = 2
|
2185
2185
|
look_11_0 = @input.peek( 1 )
|
2186
2186
|
|
@@ -2189,7 +2189,7 @@ module SfpLang
|
|
2189
2189
|
end
|
2190
2190
|
case alt_11
|
2191
2191
|
when 1
|
2192
|
-
# at line
|
2192
|
+
# at line 1042:6: '\\r'
|
2193
2193
|
match( 0xd )
|
2194
2194
|
|
2195
2195
|
end
|
@@ -2216,7 +2216,7 @@ module SfpLang
|
|
2216
2216
|
|
2217
2217
|
|
2218
2218
|
# - - - - main rule block - - - -
|
2219
|
-
# at line
|
2219
|
+
# at line 1045:8: ( ' ' | '\\t' )
|
2220
2220
|
if @input.peek(1) == 0x9 || @input.peek(1) == 0x20
|
2221
2221
|
@input.consume
|
2222
2222
|
else
|
@@ -2251,9 +2251,9 @@ module SfpLang
|
|
2251
2251
|
|
2252
2252
|
|
2253
2253
|
# - - - - main rule block - - - -
|
2254
|
-
# at line
|
2254
|
+
# at line 1049:5: '\"' ( ESC_SEQ | ~ ( '\\\\' | '\"' ) )* '\"'
|
2255
2255
|
match( 0x22 )
|
2256
|
-
# at line
|
2256
|
+
# at line 1049:9: ( ESC_SEQ | ~ ( '\\\\' | '\"' ) )*
|
2257
2257
|
while true # decision 12
|
2258
2258
|
alt_12 = 3
|
2259
2259
|
look_12_0 = @input.peek( 1 )
|
@@ -2266,11 +2266,11 @@ module SfpLang
|
|
2266
2266
|
end
|
2267
2267
|
case alt_12
|
2268
2268
|
when 1
|
2269
|
-
# at line
|
2269
|
+
# at line 1049:11: ESC_SEQ
|
2270
2270
|
esc_seq!
|
2271
2271
|
|
2272
2272
|
when 2
|
2273
|
-
# at line
|
2273
|
+
# at line 1049:21: ~ ( '\\\\' | '\"' )
|
2274
2274
|
if @input.peek( 1 ).between?( 0x0, 0x21 ) || @input.peek( 1 ).between?( 0x23, 0x5b ) || @input.peek( 1 ).between?( 0x5d, 0xff )
|
2275
2275
|
@input.consume
|
2276
2276
|
else
|
@@ -2305,7 +2305,7 @@ module SfpLang
|
|
2305
2305
|
|
2306
2306
|
|
2307
2307
|
# - - - - main rule block - - - -
|
2308
|
-
# at line
|
2308
|
+
# at line 1053:12: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+
|
2309
2309
|
if @input.peek(1) == 0x45 || @input.peek(1) == 0x65
|
2310
2310
|
@input.consume
|
2311
2311
|
else
|
@@ -2315,7 +2315,7 @@ module SfpLang
|
|
2315
2315
|
end
|
2316
2316
|
|
2317
2317
|
|
2318
|
-
# at line
|
2318
|
+
# at line 1053:22: ( '+' | '-' )?
|
2319
2319
|
alt_13 = 2
|
2320
2320
|
look_13_0 = @input.peek( 1 )
|
2321
2321
|
|
@@ -2336,7 +2336,7 @@ module SfpLang
|
|
2336
2336
|
|
2337
2337
|
|
2338
2338
|
end
|
2339
|
-
# at file
|
2339
|
+
# at file 1053:33: ( '0' .. '9' )+
|
2340
2340
|
match_count_14 = 0
|
2341
2341
|
while true
|
2342
2342
|
alt_14 = 2
|
@@ -2348,7 +2348,7 @@ module SfpLang
|
|
2348
2348
|
end
|
2349
2349
|
case alt_14
|
2350
2350
|
when 1
|
2351
|
-
# at line
|
2351
|
+
# at line 1053:34: '0' .. '9'
|
2352
2352
|
match_range( 0x30, 0x39 )
|
2353
2353
|
|
2354
2354
|
else
|
@@ -2376,7 +2376,7 @@ module SfpLang
|
|
2376
2376
|
|
2377
2377
|
|
2378
2378
|
# - - - - main rule block - - - -
|
2379
|
-
# at line
|
2379
|
+
# at line 1056:13: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
|
2380
2380
|
if @input.peek( 1 ).between?( 0x30, 0x39 ) || @input.peek( 1 ).between?( 0x41, 0x46 ) || @input.peek( 1 ).between?( 0x61, 0x66 )
|
2381
2381
|
@input.consume
|
2382
2382
|
else
|
@@ -2401,7 +2401,7 @@ module SfpLang
|
|
2401
2401
|
|
2402
2402
|
|
2403
2403
|
# - - - - main rule block - - - -
|
2404
|
-
# at line
|
2404
|
+
# at line 1060:2: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | UNICODE_ESC | OCTAL_ESC )
|
2405
2405
|
alt_15 = 3
|
2406
2406
|
look_15_0 = @input.peek( 1 )
|
2407
2407
|
|
@@ -2418,7 +2418,7 @@ module SfpLang
|
|
2418
2418
|
end
|
2419
2419
|
case alt_15
|
2420
2420
|
when 1
|
2421
|
-
# at line
|
2421
|
+
# at line 1060:6: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' )
|
2422
2422
|
match( 0x5c )
|
2423
2423
|
if @input.peek(1) == 0x22 || @input.peek(1) == 0x27 || @input.peek(1) == 0x5c || @input.peek(1) == 0x62 || @input.peek(1) == 0x66 || @input.peek(1) == 0x6e || @input.peek(1) == 0x72 || @input.peek(1) == 0x74
|
2424
2424
|
@input.consume
|
@@ -2431,11 +2431,11 @@ module SfpLang
|
|
2431
2431
|
|
2432
2432
|
|
2433
2433
|
when 2
|
2434
|
-
# at line
|
2434
|
+
# at line 1061:6: UNICODE_ESC
|
2435
2435
|
unicode_esc!
|
2436
2436
|
|
2437
2437
|
when 3
|
2438
|
-
# at line
|
2438
|
+
# at line 1062:6: OCTAL_ESC
|
2439
2439
|
octal_esc!
|
2440
2440
|
|
2441
2441
|
end
|
@@ -2453,7 +2453,7 @@ module SfpLang
|
|
2453
2453
|
|
2454
2454
|
|
2455
2455
|
# - - - - main rule block - - - -
|
2456
|
-
# at line
|
2456
|
+
# at line 1067:2: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
|
2457
2457
|
alt_16 = 3
|
2458
2458
|
look_16_0 = @input.peek( 1 )
|
2459
2459
|
|
@@ -2490,38 +2490,38 @@ module SfpLang
|
|
2490
2490
|
end
|
2491
2491
|
case alt_16
|
2492
2492
|
when 1
|
2493
|
-
# at line
|
2493
|
+
# at line 1067:6: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
|
2494
2494
|
match( 0x5c )
|
2495
|
-
# at line
|
2496
|
-
# at line
|
2495
|
+
# at line 1067:11: ( '0' .. '3' )
|
2496
|
+
# at line 1067:12: '0' .. '3'
|
2497
2497
|
match_range( 0x30, 0x33 )
|
2498
2498
|
|
2499
|
-
# at line
|
2500
|
-
# at line
|
2499
|
+
# at line 1067:22: ( '0' .. '7' )
|
2500
|
+
# at line 1067:23: '0' .. '7'
|
2501
2501
|
match_range( 0x30, 0x37 )
|
2502
2502
|
|
2503
|
-
# at line
|
2504
|
-
# at line
|
2503
|
+
# at line 1067:33: ( '0' .. '7' )
|
2504
|
+
# at line 1067:34: '0' .. '7'
|
2505
2505
|
match_range( 0x30, 0x37 )
|
2506
2506
|
|
2507
2507
|
|
2508
2508
|
when 2
|
2509
|
-
# at line
|
2509
|
+
# at line 1068:6: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
|
2510
2510
|
match( 0x5c )
|
2511
|
-
# at line
|
2512
|
-
# at line
|
2511
|
+
# at line 1068:11: ( '0' .. '7' )
|
2512
|
+
# at line 1068:12: '0' .. '7'
|
2513
2513
|
match_range( 0x30, 0x37 )
|
2514
2514
|
|
2515
|
-
# at line
|
2516
|
-
# at line
|
2515
|
+
# at line 1068:22: ( '0' .. '7' )
|
2516
|
+
# at line 1068:23: '0' .. '7'
|
2517
2517
|
match_range( 0x30, 0x37 )
|
2518
2518
|
|
2519
2519
|
|
2520
2520
|
when 3
|
2521
|
-
# at line
|
2521
|
+
# at line 1069:6: '\\\\' ( '0' .. '7' )
|
2522
2522
|
match( 0x5c )
|
2523
|
-
# at line
|
2524
|
-
# at line
|
2523
|
+
# at line 1069:11: ( '0' .. '7' )
|
2524
|
+
# at line 1069:12: '0' .. '7'
|
2525
2525
|
match_range( 0x30, 0x37 )
|
2526
2526
|
|
2527
2527
|
|
@@ -2540,7 +2540,7 @@ module SfpLang
|
|
2540
2540
|
|
2541
2541
|
|
2542
2542
|
# - - - - main rule block - - - -
|
2543
|
-
# at line
|
2543
|
+
# at line 1074:6: '\\\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
|
2544
2544
|
match( 0x5c )
|
2545
2545
|
match( 0x75 )
|
2546
2546
|
hex_digit!
|