ebnf 1.1.3 → 2.1.2

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.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +221 -198
  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 +23 -15
  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 +113 -69
  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 +138 -6
  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 +83 -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 +561 -0
  51. data/lib/ebnf/peg/rule.rb +250 -0
  52. data/lib/ebnf/rule.rb +443 -148
  53. data/lib/ebnf/terminals.rb +21 -0
  54. data/lib/ebnf/writer.rb +565 -83
  55. metadata +107 -29
  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 = '}' | ':)' ;