ebnf 1.1.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +218 -196
  3. data/UNLICENSE +1 -1
  4. data/VERSION +1 -1
  5. data/bin/ebnf +40 -21
  6. data/etc/abnf-core.ebnf +52 -0
  7. data/etc/abnf.abnf +121 -0
  8. data/etc/abnf.ebnf +124 -0
  9. data/etc/abnf.sxp +45 -0
  10. data/etc/doap.ttl +13 -12
  11. data/etc/ebnf.ebnf +21 -33
  12. data/etc/ebnf.html +171 -160
  13. data/etc/{ebnf.rb → ebnf.ll1.rb} +30 -107
  14. data/etc/ebnf.ll1.sxp +182 -183
  15. data/etc/ebnf.peg.rb +90 -0
  16. data/etc/ebnf.peg.sxp +84 -0
  17. data/etc/ebnf.sxp +40 -41
  18. data/etc/iso-ebnf.ebnf +140 -0
  19. data/etc/iso-ebnf.isoebnf +138 -0
  20. data/etc/iso-ebnf.sxp +65 -0
  21. data/etc/sparql.ebnf +4 -4
  22. data/etc/sparql.html +1603 -1751
  23. data/etc/sparql.ll1.sxp +7372 -7372
  24. data/etc/sparql.peg.rb +532 -0
  25. data/etc/sparql.peg.sxp +597 -0
  26. data/etc/sparql.sxp +363 -362
  27. data/etc/turtle.ebnf +3 -3
  28. data/etc/turtle.html +465 -517
  29. data/etc/{turtle.rb → turtle.ll1.rb} +3 -4
  30. data/etc/turtle.ll1.sxp +425 -425
  31. data/etc/turtle.peg.rb +182 -0
  32. data/etc/turtle.peg.sxp +199 -0
  33. data/etc/turtle.sxp +103 -101
  34. data/lib/ebnf.rb +7 -2
  35. data/lib/ebnf/abnf.rb +301 -0
  36. data/lib/ebnf/abnf/core.rb +23 -0
  37. data/lib/ebnf/abnf/meta.rb +111 -0
  38. data/lib/ebnf/base.rb +128 -87
  39. data/lib/ebnf/bnf.rb +1 -26
  40. data/lib/ebnf/ebnf/meta.rb +90 -0
  41. data/lib/ebnf/isoebnf.rb +229 -0
  42. data/lib/ebnf/isoebnf/meta.rb +75 -0
  43. data/lib/ebnf/ll1.rb +140 -8
  44. data/lib/ebnf/ll1/lexer.rb +37 -32
  45. data/lib/ebnf/ll1/parser.rb +113 -73
  46. data/lib/ebnf/ll1/scanner.rb +84 -51
  47. data/lib/ebnf/native.rb +320 -0
  48. data/lib/ebnf/parser.rb +285 -302
  49. data/lib/ebnf/peg.rb +39 -0
  50. data/lib/ebnf/peg/parser.rb +554 -0
  51. data/lib/ebnf/peg/rule.rb +241 -0
  52. data/lib/ebnf/rule.rb +453 -163
  53. data/lib/ebnf/terminals.rb +21 -0
  54. data/lib/ebnf/writer.rb +554 -85
  55. metadata +98 -20
  56. data/etc/sparql.rb +0 -45773
@@ -0,0 +1,90 @@
1
+ # This file is automatically generated by ebnf version 2.0.0
2
+ # Derived from etc/ebnf.ebnf
3
+ module EBNFMeta
4
+ RULES = [
5
+ EBNF::Rule.new(:ebnf, "1", [:star, :_ebnf_1]).extend(EBNF::PEG::Rule),
6
+ EBNF::Rule.new(:_ebnf_1, "1.1", [:alt, :declaration, :rule]).extend(EBNF::PEG::Rule),
7
+ EBNF::Rule.new(:declaration, "2", [:alt, "@terminals", :pass]).extend(EBNF::PEG::Rule),
8
+ EBNF::Rule.new(:rule, "3", [:seq, :LHS, :expression]).extend(EBNF::PEG::Rule),
9
+ EBNF::Rule.new(:expression, "4", [:seq, :alt]).extend(EBNF::PEG::Rule),
10
+ EBNF::Rule.new(:alt, "5", [:seq, :seq, :_alt_1]).extend(EBNF::PEG::Rule),
11
+ EBNF::Rule.new(:_alt_1, "5.1", [:star, :_alt_2]).extend(EBNF::PEG::Rule),
12
+ EBNF::Rule.new(:_alt_2, "5.2", [:seq, "|", :seq]).extend(EBNF::PEG::Rule),
13
+ EBNF::Rule.new(:seq, "6", [:plus, :diff]).extend(EBNF::PEG::Rule),
14
+ EBNF::Rule.new(:diff, "7", [:seq, :postfix, :_diff_1]).extend(EBNF::PEG::Rule),
15
+ EBNF::Rule.new(:_diff_1, "7.1", [:opt, :_diff_2]).extend(EBNF::PEG::Rule),
16
+ EBNF::Rule.new(:_diff_2, "7.2", [:seq, "-", :postfix]).extend(EBNF::PEG::Rule),
17
+ EBNF::Rule.new(:postfix, "8", [:seq, :primary, :_postfix_1]).extend(EBNF::PEG::Rule),
18
+ EBNF::Rule.new(:_postfix_1, "8.1", [:opt, :POSTFIX]).extend(EBNF::PEG::Rule),
19
+ EBNF::Rule.new(:primary, "9", [:alt, :HEX, :SYMBOL, :O_RANGE, :RANGE, :STRING1, :STRING2, :_primary_1]).extend(EBNF::PEG::Rule),
20
+ EBNF::Rule.new(:_primary_1, "9.1", [:seq, "(", :expression, ")"]).extend(EBNF::PEG::Rule),
21
+ EBNF::Rule.new(:pass, "10", [:seq, "@pass", :expression]).extend(EBNF::PEG::Rule),
22
+ EBNF::Rule.new(:_terminals, nil, [:seq], kind: :terminals).extend(EBNF::PEG::Rule),
23
+ EBNF::Rule.new(:LHS, "11", [:seq, :_LHS_1, :SYMBOL, :_LHS_2, "::="], kind: :terminal).extend(EBNF::PEG::Rule),
24
+ EBNF::Rule.new(:_LHS_1, "11.1", [:opt, :_LHS_3], kind: :terminal).extend(EBNF::PEG::Rule),
25
+ EBNF::Rule.new(:_LHS_3, "11.3", [:seq, "[", :SYMBOL, "]", :_LHS_4], kind: :terminal).extend(EBNF::PEG::Rule),
26
+ EBNF::Rule.new(:_LHS_4, "11.4", [:plus, " "], kind: :terminal).extend(EBNF::PEG::Rule),
27
+ EBNF::Rule.new(:_LHS_2, "11.2", [:star, " "], kind: :terminal).extend(EBNF::PEG::Rule),
28
+ EBNF::Rule.new(:SYMBOL, "12", [:plus, :_SYMBOL_1], kind: :terminal).extend(EBNF::PEG::Rule),
29
+ EBNF::Rule.new(:_SYMBOL_1, "12.1", [:alt, :_SYMBOL_2, :_SYMBOL_3, :_SYMBOL_4, "_", "."], kind: :terminal).extend(EBNF::PEG::Rule),
30
+ EBNF::Rule.new(:_SYMBOL_2, "12.2", [:range, "a-z"], kind: :terminal).extend(EBNF::PEG::Rule),
31
+ EBNF::Rule.new(:_SYMBOL_3, "12.3", [:range, "A-Z"], kind: :terminal).extend(EBNF::PEG::Rule),
32
+ EBNF::Rule.new(:_SYMBOL_4, "12.4", [:range, "0-9"], kind: :terminal).extend(EBNF::PEG::Rule),
33
+ EBNF::Rule.new(:HEX, "13", [:seq, "#x", :_HEX_1], kind: :terminal).extend(EBNF::PEG::Rule),
34
+ EBNF::Rule.new(:_HEX_1, "13.1", [:plus, :_HEX_2], kind: :terminal).extend(EBNF::PEG::Rule),
35
+ EBNF::Rule.new(:_HEX_2, "13.2", [:alt, :_HEX_3, :_HEX_4, :_HEX_5], kind: :terminal).extend(EBNF::PEG::Rule),
36
+ EBNF::Rule.new(:_HEX_3, "13.3", [:range, "a-f"], kind: :terminal).extend(EBNF::PEG::Rule),
37
+ EBNF::Rule.new(:_HEX_4, "13.4", [:range, "A-F"], kind: :terminal).extend(EBNF::PEG::Rule),
38
+ EBNF::Rule.new(:_HEX_5, "13.5", [:range, "0-9"], kind: :terminal).extend(EBNF::PEG::Rule),
39
+ EBNF::Rule.new(:RANGE, "14", [:seq, "[", :_RANGE_1, :_RANGE_2, :_RANGE_3], kind: :terminal).extend(EBNF::PEG::Rule),
40
+ EBNF::Rule.new(:_RANGE_1, "14.1", [:plus, :_RANGE_4], kind: :terminal).extend(EBNF::PEG::Rule),
41
+ EBNF::Rule.new(:_RANGE_4, "14.4", [:alt, :_RANGE_5, :_RANGE_6, :R_CHAR, :HEX], kind: :terminal).extend(EBNF::PEG::Rule),
42
+ EBNF::Rule.new(:_RANGE_5, "14.5", [:seq, :R_CHAR, "-", :R_CHAR], kind: :terminal).extend(EBNF::PEG::Rule),
43
+ EBNF::Rule.new(:_RANGE_6, "14.6", [:seq, :HEX, "-", :HEX], kind: :terminal).extend(EBNF::PEG::Rule),
44
+ EBNF::Rule.new(:_RANGE_2, "14.2", [:opt, "-"], kind: :terminal).extend(EBNF::PEG::Rule),
45
+ EBNF::Rule.new(:_RANGE_3, "14.3", [:diff, "]", :LHS], kind: :terminal).extend(EBNF::PEG::Rule),
46
+ EBNF::Rule.new(:O_RANGE, "15", [:seq, "[^", :_O_RANGE_1, :_O_RANGE_2, "]"], kind: :terminal).extend(EBNF::PEG::Rule),
47
+ EBNF::Rule.new(:_O_RANGE_1, "15.1", [:plus, :_O_RANGE_3], kind: :terminal).extend(EBNF::PEG::Rule),
48
+ EBNF::Rule.new(:_O_RANGE_3, "15.3", [:alt, :_O_RANGE_4, :_O_RANGE_5, :R_CHAR, :HEX], kind: :terminal).extend(EBNF::PEG::Rule),
49
+ EBNF::Rule.new(:_O_RANGE_4, "15.4", [:seq, :R_CHAR, "-", :R_CHAR], kind: :terminal).extend(EBNF::PEG::Rule),
50
+ EBNF::Rule.new(:_O_RANGE_5, "15.5", [:seq, :HEX, "-", :HEX], kind: :terminal).extend(EBNF::PEG::Rule),
51
+ EBNF::Rule.new(:_O_RANGE_2, "15.2", [:opt, "-"], kind: :terminal).extend(EBNF::PEG::Rule),
52
+ EBNF::Rule.new(:STRING1, "16", [:seq, "\"", :_STRING1_1, "\""], kind: :terminal).extend(EBNF::PEG::Rule),
53
+ EBNF::Rule.new(:_STRING1_1, "16.1", [:star, :_STRING1_2], kind: :terminal).extend(EBNF::PEG::Rule),
54
+ EBNF::Rule.new(:_STRING1_2, "16.2", [:diff, :CHAR, "\""], kind: :terminal).extend(EBNF::PEG::Rule),
55
+ EBNF::Rule.new(:STRING2, "17", [:seq, "'", :_STRING2_1, "'"], kind: :terminal).extend(EBNF::PEG::Rule),
56
+ EBNF::Rule.new(:_STRING2_1, "17.1", [:star, :_STRING2_2], kind: :terminal).extend(EBNF::PEG::Rule),
57
+ EBNF::Rule.new(:_STRING2_2, "17.2", [:diff, :CHAR, "'"], kind: :terminal).extend(EBNF::PEG::Rule),
58
+ EBNF::Rule.new(:CHAR, "18", [:alt, :_CHAR_1, :_CHAR_2, :_CHAR_3, :_CHAR_4], kind: :terminal).extend(EBNF::PEG::Rule),
59
+ EBNF::Rule.new(:_CHAR_1, "18.1", [:range, "#x9#xA#xD"], kind: :terminal).extend(EBNF::PEG::Rule),
60
+ EBNF::Rule.new(:_CHAR_2, "18.2", [:range, "#x20-#xD7FF"], kind: :terminal).extend(EBNF::PEG::Rule),
61
+ EBNF::Rule.new(:_CHAR_3, "18.3", [:range, "#xE000-#xFFFD"], kind: :terminal).extend(EBNF::PEG::Rule),
62
+ EBNF::Rule.new(:_CHAR_4, "18.4", [:range, "#x10000-#x10FFFF"], kind: :terminal).extend(EBNF::PEG::Rule),
63
+ EBNF::Rule.new(:R_CHAR, "19", [:diff, :CHAR, :_R_CHAR_1], kind: :terminal).extend(EBNF::PEG::Rule),
64
+ EBNF::Rule.new(:_R_CHAR_1, "19.1", [:alt, "]", "-", :HEX], kind: :terminal).extend(EBNF::PEG::Rule),
65
+ EBNF::Rule.new(:POSTFIX, "20", [:range, "?*+"], kind: :terminal).extend(EBNF::PEG::Rule),
66
+ EBNF::Rule.new(:PASS, "21", [:alt, :_PASS_1, :_PASS_2, :_PASS_3, :_PASS_4], kind: :terminal).extend(EBNF::PEG::Rule),
67
+ EBNF::Rule.new(:_PASS_1, "21.1", [:range, "#x9#xA#xD#x20"], kind: :terminal).extend(EBNF::PEG::Rule),
68
+ EBNF::Rule.new(:_PASS_2, "21.2", [:seq, :_PASS_5, :_PASS_6], kind: :terminal).extend(EBNF::PEG::Rule),
69
+ EBNF::Rule.new(:_PASS_5, "21.5", [:alt, :_PASS_7, "//"], kind: :terminal).extend(EBNF::PEG::Rule),
70
+ EBNF::Rule.new(:_PASS_7, "21.7", [:diff, "#", "#x"], kind: :terminal).extend(EBNF::PEG::Rule),
71
+ EBNF::Rule.new(:_PASS_6, "21.6", [:star, :_PASS_8], kind: :terminal).extend(EBNF::PEG::Rule),
72
+ EBNF::Rule.new(:_PASS_8, "21.8", [:range, "^#xA#xD"], kind: :terminal).extend(EBNF::PEG::Rule),
73
+ EBNF::Rule.new(:_PASS_3, "21.3", [:seq, "/*", :_PASS_9, "*/"], kind: :terminal).extend(EBNF::PEG::Rule),
74
+ EBNF::Rule.new(:_PASS_9, "21.9", [:star, :_PASS_10], kind: :terminal).extend(EBNF::PEG::Rule),
75
+ EBNF::Rule.new(:_PASS_10, "21.10", [:alt, :_PASS_11, :_PASS_12], kind: :terminal).extend(EBNF::PEG::Rule),
76
+ EBNF::Rule.new(:_PASS_11, "21.11", [:opt, :_PASS_13], kind: :terminal).extend(EBNF::PEG::Rule),
77
+ EBNF::Rule.new(:_PASS_13, "21.13", [:seq, "*", :_PASS_14], kind: :terminal).extend(EBNF::PEG::Rule),
78
+ EBNF::Rule.new(:_PASS_14, "21.14", [:range, "^/"], kind: :terminal).extend(EBNF::PEG::Rule),
79
+ EBNF::Rule.new(:_PASS_12, "21.12", [:range, "^*"], kind: :terminal).extend(EBNF::PEG::Rule),
80
+ EBNF::Rule.new(:_PASS_4, "21.4", [:seq, "(*", :_PASS_15, "*)"], kind: :terminal).extend(EBNF::PEG::Rule),
81
+ EBNF::Rule.new(:_PASS_15, "21.15", [:star, :_PASS_16], kind: :terminal).extend(EBNF::PEG::Rule),
82
+ EBNF::Rule.new(:_PASS_16, "21.16", [:alt, :_PASS_17, :_PASS_18], kind: :terminal).extend(EBNF::PEG::Rule),
83
+ EBNF::Rule.new(:_PASS_17, "21.17", [:opt, :_PASS_19], kind: :terminal).extend(EBNF::PEG::Rule),
84
+ EBNF::Rule.new(:_PASS_19, "21.19", [:seq, "*", :_PASS_20], kind: :terminal).extend(EBNF::PEG::Rule),
85
+ EBNF::Rule.new(:_PASS_20, "21.20", [:range, "^)"], kind: :terminal).extend(EBNF::PEG::Rule),
86
+ EBNF::Rule.new(:_PASS_18, "21.18", [:range, "^*"], kind: :terminal).extend(EBNF::PEG::Rule),
87
+ EBNF::Rule.new(:_pass, nil, [:seq, :PASS], kind: :pass).extend(EBNF::PEG::Rule),
88
+ ]
89
+ end
90
+
@@ -0,0 +1,84 @@
1
+ (
2
+ (rule ebnf "1" (star _ebnf_1))
3
+ (rule _ebnf_1 "1.1" (alt declaration rule))
4
+ (rule declaration "2" (alt "@terminals" pass))
5
+ (rule rule "3" (seq LHS expression))
6
+ (rule expression "4" (seq alt))
7
+ (rule alt "5" (seq seq _alt_1))
8
+ (rule _alt_1 "5.1" (star _alt_2))
9
+ (rule _alt_2 "5.2" (seq "|" seq))
10
+ (rule seq "6" (plus diff))
11
+ (rule diff "7" (seq postfix _diff_1))
12
+ (rule _diff_1 "7.1" (opt _diff_2))
13
+ (rule _diff_2 "7.2" (seq "-" postfix))
14
+ (rule postfix "8" (seq primary _postfix_1))
15
+ (rule _postfix_1 "8.1" (opt POSTFIX))
16
+ (rule primary "9" (alt HEX SYMBOL O_RANGE RANGE STRING1 STRING2 _primary_1))
17
+ (rule _primary_1 "9.1" (seq "(" expression ")"))
18
+ (rule pass "10" (seq "@pass" expression))
19
+ (terminals _terminals (seq))
20
+ (terminal LHS "11" (seq _LHS_1 SYMBOL _LHS_2 "::="))
21
+ (terminal _LHS_1 "11.1" (opt _LHS_3))
22
+ (terminal _LHS_3 "11.3" (seq "[" SYMBOL "]" _LHS_4))
23
+ (terminal _LHS_4 "11.4" (plus " "))
24
+ (terminal _LHS_2 "11.2" (star " "))
25
+ (terminal SYMBOL "12" (plus _SYMBOL_1))
26
+ (terminal _SYMBOL_1 "12.1" (alt _SYMBOL_2 _SYMBOL_3 _SYMBOL_4 "_" "."))
27
+ (terminal _SYMBOL_2 "12.2" (range "a-z"))
28
+ (terminal _SYMBOL_3 "12.3" (range "A-Z"))
29
+ (terminal _SYMBOL_4 "12.4" (range "0-9"))
30
+ (terminal HEX "13" (seq "#x" _HEX_1))
31
+ (terminal _HEX_1 "13.1" (plus _HEX_2))
32
+ (terminal _HEX_2 "13.2" (alt _HEX_3 _HEX_4 _HEX_5))
33
+ (terminal _HEX_3 "13.3" (range "a-f"))
34
+ (terminal _HEX_4 "13.4" (range "A-F"))
35
+ (terminal _HEX_5 "13.5" (range "0-9"))
36
+ (terminal RANGE "14" (seq "[" _RANGE_1 _RANGE_2 _RANGE_3))
37
+ (terminal _RANGE_1 "14.1" (plus _RANGE_4))
38
+ (terminal _RANGE_4 "14.4" (alt _RANGE_5 _RANGE_6 R_CHAR HEX))
39
+ (terminal _RANGE_5 "14.5" (seq R_CHAR "-" R_CHAR))
40
+ (terminal _RANGE_6 "14.6" (seq HEX "-" HEX))
41
+ (terminal _RANGE_2 "14.2" (opt "-"))
42
+ (terminal _RANGE_3 "14.3" (diff "]" LHS))
43
+ (terminal O_RANGE "15" (seq "[^" _O_RANGE_1 _O_RANGE_2 "]"))
44
+ (terminal _O_RANGE_1 "15.1" (plus _O_RANGE_3))
45
+ (terminal _O_RANGE_3 "15.3" (alt _O_RANGE_4 _O_RANGE_5 R_CHAR HEX))
46
+ (terminal _O_RANGE_4 "15.4" (seq R_CHAR "-" R_CHAR))
47
+ (terminal _O_RANGE_5 "15.5" (seq HEX "-" HEX))
48
+ (terminal _O_RANGE_2 "15.2" (opt "-"))
49
+ (terminal STRING1 "16" (seq "\"" _STRING1_1 "\""))
50
+ (terminal _STRING1_1 "16.1" (star _STRING1_2))
51
+ (terminal _STRING1_2 "16.2" (diff CHAR "\""))
52
+ (terminal STRING2 "17" (seq "'" _STRING2_1 "'"))
53
+ (terminal _STRING2_1 "17.1" (star _STRING2_2))
54
+ (terminal _STRING2_2 "17.2" (diff CHAR "'"))
55
+ (terminal CHAR "18" (alt _CHAR_1 _CHAR_2 _CHAR_3 _CHAR_4))
56
+ (terminal _CHAR_1 "18.1" (range "#x9#xA#xD"))
57
+ (terminal _CHAR_2 "18.2" (range "#x20-#xD7FF"))
58
+ (terminal _CHAR_3 "18.3" (range "#xE000-#xFFFD"))
59
+ (terminal _CHAR_4 "18.4" (range "#x10000-#x10FFFF"))
60
+ (terminal R_CHAR "19" (diff CHAR _R_CHAR_1))
61
+ (terminal _R_CHAR_1 "19.1" (alt "]" "-" HEX))
62
+ (terminal POSTFIX "20" (range "?*+"))
63
+ (terminal PASS "21" (alt _PASS_1 _PASS_2 _PASS_3 _PASS_4))
64
+ (terminal _PASS_1 "21.1" (range "#x9#xA#xD#x20"))
65
+ (terminal _PASS_2 "21.2" (seq _PASS_5 _PASS_6))
66
+ (terminal _PASS_5 "21.5" (alt _PASS_7 "//"))
67
+ (terminal _PASS_7 "21.7" (diff "#" "#x"))
68
+ (terminal _PASS_6 "21.6" (star _PASS_8))
69
+ (terminal _PASS_8 "21.8" (range "^#xA#xD"))
70
+ (terminal _PASS_3 "21.3" (seq "/*" _PASS_9 "*/"))
71
+ (terminal _PASS_9 "21.9" (star _PASS_10))
72
+ (terminal _PASS_10 "21.10" (alt _PASS_11 _PASS_12))
73
+ (terminal _PASS_11 "21.11" (opt _PASS_13))
74
+ (terminal _PASS_13 "21.13" (seq "*" _PASS_14))
75
+ (terminal _PASS_14 "21.14" (range "^/"))
76
+ (terminal _PASS_12 "21.12" (range "^*"))
77
+ (terminal _PASS_4 "21.4" (seq "(*" _PASS_15 "*)"))
78
+ (terminal _PASS_15 "21.15" (star _PASS_16))
79
+ (terminal _PASS_16 "21.16" (alt _PASS_17 _PASS_18))
80
+ (terminal _PASS_17 "21.17" (opt _PASS_19))
81
+ (terminal _PASS_19 "21.19" (seq "*" _PASS_20))
82
+ (terminal _PASS_20 "21.20" (range "^)"))
83
+ (terminal _PASS_18 "21.18" (range "^*"))
84
+ (pass _pass (seq PASS)))
@@ -1,41 +1,40 @@
1
- (
2
- (pass (seq PASS))
3
- (rule ebnf "1" (star (alt declaration rule)))
4
- (rule declaration "2" (alt "@terminals" pass))
5
- (rule rule "3" (seq LHS expression))
6
- (rule expression "4" (seq alt))
7
- (rule alt "5" (seq seq (star (seq "|" seq))))
8
- (rule seq "6" (plus diff))
9
- (rule diff "7" (seq postfix (opt (seq "-" postfix))))
10
- (rule postfix "8" (seq primary (opt POSTFIX)))
11
- (rule primary "9"
12
- (alt HEX SYMBOL ENUM O_ENUM RANGE O_RANGE STRING1 STRING2 (seq "(" expression ")")))
13
- (rule pass "10" (seq "@pass" expression))
14
- (terminal LHS "11" (seq (opt (seq "[" (plus SYMBOL) "]")) SYMBOL "::="))
15
- (terminal SYMBOL "12" (plus (alt (range "a-z") (range "A-Z") (range "0-9") "_" ".")))
16
- (terminal HEX "13" (seq "#x" (plus (alt (range "0-9") (range "a-f") (range "A-F")))))
17
- (terminal ENUM "14"
18
- (seq "["
19
- (alt (seq R_BEGIN (alt HEX R_CHAR)) (alt HEX R_CHAR)) "-"
20
- (alt (seq R_BEGIN (alt HEX R_CHAR)) (alt HEX R_CHAR)) "]" ))
21
- (terminal O_ENUM "15"
22
- (seq "[^"
23
- (alt (seq R_BEGIN (alt HEX R_CHAR)) (alt HEX R_CHAR)) "-"
24
- (alt (seq R_BEGIN (alt HEX R_CHAR)) (alt HEX R_CHAR)) "]" ))
25
- (terminal RANGE "16"
26
- (seq "[" (plus (alt (seq R_BEGIN (alt HEX R_CHAR)) (alt HEX R_CHAR))) "]"))
27
- (terminal O_RANGE "17"
28
- (seq "[^" (plus (alt (seq R_BEGIN (alt HEX R_CHAR)) (alt HEX R_CHAR))) "]"))
29
- (terminal STRING1 "18" (seq "\"" (star (diff CHAR "\"")) "\""))
30
- (terminal STRING2 "19" (seq "'" (star (diff CHAR "'")) "'"))
31
- (terminal CHAR "20" (alt HEX (range "#x20#x21#x22") (range "#x24-#x00FFFFFF")))
32
- (terminal R_CHAR "21" (diff CHAR "]"))
33
- (terminal R_BEGIN "22" (seq (alt HEX R_CHAR) "-"))
34
- (terminal POSTFIX "23" (range "?*+"))
35
- (terminal PASS "24"
36
- (plus
37
- (alt
38
- (range "#x00-#x20")
39
- (seq (alt "#" "//") (star (range "^#x0A#x0D")))
40
- (seq "/*" (star (alt (opt (seq "*" (range "^/"))) (range "^*"))) "*/")
41
- (seq "(*" (star (alt (opt (seq "*" (range "^)"))) (range "^*"))) "*)")) )) )
1
+ (
2
+ (rule ebnf "1" (star (alt declaration rule)))
3
+ (rule declaration "2" (alt "@terminals" pass))
4
+ (rule rule "3" (seq LHS expression))
5
+ (rule expression "4" (seq alt))
6
+ (rule alt "5" (seq seq (star (seq "|" seq))))
7
+ (rule seq "6" (plus diff))
8
+ (rule diff "7" (seq postfix (opt (seq "-" postfix))))
9
+ (rule postfix "8" (seq primary (opt POSTFIX)))
10
+ (rule primary "9"
11
+ (alt HEX SYMBOL O_RANGE RANGE STRING1 STRING2 (seq "(" expression ")")))
12
+ (rule pass "10" (seq "@pass" expression))
13
+ (terminals _terminals (seq))
14
+ (terminal LHS "11" (seq (opt (seq "[" SYMBOL "]" (plus " "))) SYMBOL (star " ") "::="))
15
+ (terminal SYMBOL "12" (plus (alt (range "a-z") (range "A-Z") (range "0-9") "_" ".")))
16
+ (terminal HEX "13" (seq "#x" (plus (alt (range "a-f") (range "A-F") (range "0-9")))))
17
+ (terminal RANGE "14"
18
+ (seq "["
19
+ (plus (alt (seq R_CHAR "-" R_CHAR) (seq HEX "-" HEX) R_CHAR HEX))
20
+ (opt "-")
21
+ (diff "]" LHS)) )
22
+ (terminal O_RANGE "15"
23
+ (seq "[^" (plus (alt (seq R_CHAR "-" R_CHAR) (seq HEX "-" HEX) R_CHAR HEX)) (opt "-") "]"))
24
+ (terminal STRING1 "16" (seq "\"" (star (diff CHAR "\"")) "\""))
25
+ (terminal STRING2 "17" (seq "'" (star (diff CHAR "'")) "'"))
26
+ (terminal CHAR "18"
27
+ (alt
28
+ (range "#x9#xA#xD")
29
+ (range "#x20-#xD7FF")
30
+ (range "#xE000-#xFFFD")
31
+ (range "#x10000-#x10FFFF")) )
32
+ (terminal R_CHAR "19" (diff CHAR (alt "]" "-" HEX)))
33
+ (terminal POSTFIX "20" (range "?*+"))
34
+ (terminal PASS "21"
35
+ (alt
36
+ (range "#x9#xA#xD#x20")
37
+ (seq (alt (diff "#" "#x") "//") (star (range "^#xA#xD")))
38
+ (seq "/*" (star (alt (opt (seq "*" (range "^/"))) (range "^*"))) "*/")
39
+ (seq "(*" (star (alt (opt (seq "*" (range "^)"))) (range "^*"))) "*)")) )
40
+ (pass _pass (seq PASS)))
@@ -0,0 +1,140 @@
1
+ # W3C EBNF for ISO/IEC 14977 : 1996 EBNF
2
+ # (Scoured from https://www.cl.cam.ac.uk/~mgk25/iso-14977.pdf)
3
+
4
+ # Extended to allow no syntax_rule to be valid.
5
+ syntax ::= syntax_rule*
6
+
7
+ syntax_rule ::= meta_identifier defining_symbol definitions_list terminator_symbol
8
+ (* A <syntax rule> defines the sequences of
9
+ symbols represented by a <meta identifier> *)
10
+
11
+ definitions_list ::= single_definition (definition_separator_symbol definitions_list)*
12
+ (* | separates alternative <single definitions> *)
13
+
14
+ single_definition ::= term (',' term)*
15
+ (* , separates successive <terms> *)
16
+
17
+ term ::= factor ('-' exception)?
18
+ (* A <term> represents any sequence of symbols that is defined by the <factor> but
19
+ not defined by the <exception> *)
20
+
21
+ exception ::= factor
22
+ (* A <factor> may be used as an <exception>
23
+ if it could be replaced by a <factor>
24
+ containingno<metaidentifiers> *)
25
+
26
+ factor ::= (integer '*')? primary
27
+ (* The <integer> specifies the number of repetitions of the <primary> *)
28
+
29
+ primary ::= optional_sequence
30
+ | repeated_sequence
31
+ | special_sequence
32
+ | grouped_sequence
33
+ | meta_identifier
34
+ | terminal_string
35
+ | empty
36
+
37
+ optional_sequence ::= start_option_symbol definitions_list end_option_symbol
38
+ (* The brackets [ and ] enclose symbols which are optional *)
39
+
40
+ repeated_sequence ::= start_repeat_symbol definitions_list end_repeat_symbol
41
+ (* The brackets { and } enclose symbols
42
+ which may be repeated any number of times *)
43
+
44
+ grouped_sequence ::= '(' definitions_list ')'
45
+ (* The brackets ( and ) allow any <definitions list> to be a <primary> *)
46
+
47
+ # Note, the following are nominally terminal rules,
48
+ # although ISO EBNF does not really distinguish between non-terminal and terminal rules.
49
+
50
+ @terminals
51
+
52
+ terminal_string ::= ("'" first_terminal_character+ "'")
53
+ | ('"' second_terminal_character+ '"')
54
+ (* A <terminal string> represents the
55
+ <characters> between the quote symbols '_' or "_" *)
56
+
57
+ meta_identifier ::= letter meta_identifier_character*
58
+ (* A <meta identifier> is the name of a syntactic element of the language being defined *)
59
+
60
+ integer ::= decimal_digit+
61
+
62
+ special_sequence ::= '?' special_sequence_character* '?'
63
+ (* The meaning of a <special sequence> is not defined in the standard metalanguage. *)
64
+
65
+ comment ::= start_comment_symbol comment_symbol* end_comment_symbol
66
+ (* A comment is allowed anywhere outside a
67
+ <terminal string>, <meta identifier>,
68
+ <integer> or <special sequence> *)
69
+
70
+ comment_symbol ::= comment | commentless_symbol | other_character
71
+
72
+ commentless_symbol ::= terminal_character | meta_identifier | integer
73
+ | terminal_string | special_sequence
74
+
75
+ letter ::= [a-zA-Z]
76
+ # gratuitous comment
77
+ decimal_digit ::= [0-9]
78
+
79
+ # Extended to allow '_'
80
+ meta_identifier_character ::= letter | decimal_digit | '_'
81
+
82
+ first_terminal_character ::= terminal_character - "'"
83
+
84
+ second_terminal_character ::= terminal_character - '"'
85
+
86
+ special_sequence_character ::= terminal_character - '?'
87
+
88
+ terminal_character ::= letter
89
+ | decimal_digit
90
+ | concatenate_symbol
91
+ | defining_symbol
92
+ | definition_separator_symbol
93
+ | end_comment_symbol
94
+ | end_group_symbol
95
+ | end_option_symbol
96
+ | end_repeat_symbol
97
+ | except_symbol
98
+ | first_quote_symbol
99
+ | repetition_symbol
100
+ | second_quote_symbol
101
+ | special_sequence_symbol
102
+ | start_comment_symbol
103
+ | start_group_symbol
104
+ | start_option_symbol
105
+ | start_repeat_symbol
106
+ | terminator_symbol
107
+ | other_character
108
+
109
+ other_character ::= [:+_%@&$<>^` ̃#x20#x23] | '\'
110
+
111
+ gap_separator ::= [#x9#xa#xb#xc#xd#x20]
112
+
113
+ @pass gap_separator+ | comment
114
+
115
+ empty ::= ''
116
+
117
+ concatenate_symbol ::= ','
118
+ repetition_symbol ::= '*'
119
+ except_symbol ::= '-'
120
+ first_quote_symbol ::= "'"
121
+ second_quote_symbol ::= '"'
122
+ start_comment_symbol ::= '(*'
123
+ end_comment_symbol ::= '*)'
124
+ start_group_symbol ::= '('
125
+ end_group_symbol ::= ')'
126
+ special_sequence_symbol ::= '?'
127
+
128
+ # Simple terminals that are often extended
129
+ defining_symbol ::= '=' | ':'
130
+ definition_separator_symbol ::= '|' | '/' | '!'
131
+ terminator_symbol ::= ';' | '.'
132
+ start_option_symbol ::= '['
133
+ end_option_symbol ::= ']'
134
+ start_repeat_symbol ::= '{' | '(:'
135
+ end_repeat_symbol ::= '}' | ':)'
136
+
137
+ # Symbols described, but not actually used.
138
+
139
+ gap_free_symbol ::= (terminal_character - ['"])
140
+ | terminal_string
@@ -0,0 +1,138 @@
1
+ (* W3C EBNF for ISO/IEC 14977 : 1996 EBNF *)
2
+ (* Scoured from https://www.cl.cam.ac.uk/~mgk25/iso-14977.pdf *)
3
+
4
+ syntax = syntax_rule, {syntax_rule} ;
5
+
6
+ syntax_rule = meta_identifier, defining_symbol, definitions_list, terminator_symbol
7
+ (* A <syntax rule> defines the sequences of
8
+ symbols represented by a <meta identifier> *);
9
+
10
+ definitions_list = single_definition, {definition_separator_symbol, definitions_list}
11
+ (* | separates alternative <single definitions> *);
12
+
13
+ single_definition = term, {',', term}
14
+ (* , separates successive <terms> *);
15
+
16
+ term = factor, ['-', exception]
17
+ (* A <term> represents any sequence of symbols that is defined by the <factor> but
18
+ not defined by the <exception> *);
19
+
20
+ exception = factor
21
+ (* A <factor> may be used as an <exception>
22
+ if it could be replaced by a <factor>
23
+ containingno<metaidentifiers> *);
24
+
25
+ factor = [integer, '*'], primary
26
+ (* The <integer> specifies the number of repetitions of the <primary> *);
27
+
28
+ primary = optional_sequence
29
+ | repeated_sequence
30
+ | special_sequence
31
+ | grouped_sequence
32
+ | meta_identifier
33
+ | terminal_string
34
+ | empty
35
+ ;
36
+
37
+ optional_sequence = start_option_symbol, definitions_list, end_option_symbol
38
+ (* The brackets [ and ] enclose symbols which are optional *);
39
+
40
+ repeated_sequence = start_repeat_symbol, definitions_list, end_repeat_symbol
41
+ (* The brackets { and } enclose symbols
42
+ which may be repeated any number of times *);
43
+
44
+ grouped_sequence = '(', definitions_list, ')'
45
+ (* The brackets ( and ) allow any <definitions list> to be a <primary> *);
46
+
47
+ terminal_string = ("'", first_terminal_character, {first_terminal_character}, "'")
48
+ | ('"', second_terminal_character, {second_terminal_character}, '"')
49
+ (* A <terminal string> represents the
50
+ <characters> between the quote symbols '_' or "_" *);
51
+
52
+ meta_identifier = letter, {meta_identifier_character}
53
+ (* A <meta identifier> is the name of a syntactic element of the language being defined *);
54
+
55
+ integer = decimal_digit, {decimal_digit} ;
56
+
57
+ special_sequence = '?', {special_sequence_character}, '?'
58
+ (* The meaning of a <special sequence> is not defined in the standard metalanguage. *);
59
+
60
+ comment = '(*', {comment_symbol}, '*)'
61
+ (* A comment is allowed anywhere outside a
62
+ <terminal string>, <meta identifier>,
63
+ <integer> or <special sequence> *);
64
+
65
+ comment_symbol = comment | commentless_symbol | other_character ;
66
+
67
+ commentless_symbol = terminal_character | meta_identifier | integer
68
+ | terminal_string | special_sequence
69
+ ;
70
+
71
+ letter = "A" | "B" | "C" | "D" | "E" | "F" | "G"
72
+ | "H" | "I" | "J" | "K" | "L" | "M" | "N"
73
+ | "O" | "P" | "Q" | "R" | "S" | "T" | "U"
74
+ | "V" | "W" | "X" | "Y" | "Z" | "a" | "b"
75
+ | "c" | "d" | "e" | "f" | "g" | "h" | "i"
76
+ | "j" | "k" | "l" | "m" | "n" | "o" | "p"
77
+ | "q" | "r" | "s" | "t" | "u" | "v" | "w"
78
+ | "x" | "y" | "z"
79
+ ;
80
+
81
+ decimal_digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
82
+
83
+ (* Extended to allow '_' *)
84
+ meta_identifier_character = letter | decimal_digit | '_' ;
85
+
86
+ first_terminal_character = terminal_character - "'" ;
87
+
88
+ second_terminal_character = terminal_character - '"' ;
89
+
90
+ special_sequence_character = terminal_character - '?' ;
91
+
92
+ terminal_character = letter
93
+ | decimal_digit
94
+ | concatenate_symbol
95
+ | defining_symbol
96
+ | definition_separator_symbol
97
+ | end_comment_symbol
98
+ | end_group_symbol
99
+ | end_option_symbol
100
+ | end_repeat_symbol
101
+ | except_symbol
102
+ | first_quote_symbol
103
+ | repetition_symbol
104
+ | second_quote_symbol
105
+ | special_sequence_symbol
106
+ | start_comment_symbol
107
+ | start_group_symbol
108
+ | start_option_symbol
109
+ | start_repeat_symbol
110
+ | terminator_symbol
111
+ | other_character
112
+ ;
113
+
114
+ other_character = ' ' | ':' | '+' | '_' | '%' | '@' | '&'
115
+ | '#' | '$' | '<' | '>' | '\' | '^' | '`'
116
+ | '~' ;
117
+
118
+ empty = ;
119
+
120
+ concatenate_symbol = ',' ;
121
+ repetition_symbol = '*' ;
122
+ except_symbol = '-' ;
123
+ first_quote_symbol = "'" ;
124
+ second_quote_symbol = '"' ;
125
+ start_comment_symbol = '(*' ;
126
+ end_comment_symbol = '*)' ;
127
+ start_group_symbol = '(' ;
128
+ end_group_symbol = ')' ;
129
+ special_sequence_symbol = '?' ;
130
+
131
+ (* Simple terminals that are often extended *)
132
+ defining_symbol = '=' | ':' ;
133
+ definition_separator_symbol = '|' | '/' | '!' ;
134
+ terminator_symbol = ';' | '.' ;
135
+ start_option_symbol = '[' ;
136
+ end_option_symbol = ']' ;
137
+ start_repeat_symbol = '{' | '(:' ;
138
+ end_repeat_symbol = '}' | ':)' ;