sfp 0.3.4 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- 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!
|