Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions docs_config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,16 @@ docs_groups:
- stdlib/sys/process
- stdlib/sys/random
- stdlib/sys/time
# TODO: Re-enable when docs are more mature
# Language Constructs:
Language Reference:
- reference/introduction
- reference/lexical_structure:
- reference/lexical_structure/whitespace
- reference/lexical_structure/comments
- reference/lexical_structure/keywords
- reference/lexical_structure/identifiers
- reference/lexical_structure/literals
- reference/lexical_structure/operators
- reference/lexical_structure/delimiters
# - constructs/bindings
# - constructs/numbers
# - constructs/booleans
Expand Down
354 changes: 354 additions & 0 deletions grammars/EBNF.tmLanguage
Original file line number Diff line number Diff line change
@@ -0,0 +1,354 @@
<!-- This is a modified version of the EBNF grammar from https://github.com/ppKrauss/EBNF-W3C.tmbundle used under the MIT license. -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>fileTypes</key>
<array>
<string>ebnf</string>
</array>
<key>foldingStartMarker</key>
<string>\(\*</string>
<key>foldingStopMarker</key>
<string>\*\)</string>
<key>keyEquivalent</key>
<string>^~E</string>
<key>name</key>
<string>EBNF</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#comment</string>
</dict>
<dict>
<key>begin</key>
<string>\s*(\b(?:\w|\s|[\-_0-9])+\b)\s*(=)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>entity.name.function.ebnf</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>keyword.operator.definition.ebnf</string>
</dict>
</dict>
<key>end</key>
<string>;</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.terminator.syntax-rule.ebnf</string>
</dict>
</dict>
<key>name</key>
<string>meta.syntax-rule.ebnf</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#comment</string>
</dict>
<dict>
<key>include</key>
<string>#subrules</string>
</dict>
</array>
</dict>
</array>
<key>repository</key>
<dict>
<key>comment</key>
<dict>
<key>begin</key>
<string>\(\*(?!\))</string>
<key>end</key>
<string>\*\)</string>
<key>name</key>
<string>comment.block.ebnf</string>
</dict>
<key>double-quote-string</key>
<dict>
<key>begin</key>
<string>"</string>
<key>end</key>
<string>"</string>
<key>name</key>
<string>string.quoted.double.ebnf</string>
</dict>
<key>group</key>
<dict>
<key>begin</key>
<string>\(</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>keyword.other.group.begin.ebnf</string>
</dict>
</dict>
<key>end</key>
<string>\)</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>keyword.other.group.end.ebnf</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#subrules</string>
</dict>
</array>
</dict>
<key>invalid</key>
<dict>
<key>match</key>
<string>\(\s*[*:/]\s*\)</string>
<key>name</key>
<string>invalid.illegal.ebnf</string>
</dict>
<key>non-terminal</key>
<dict>
<key>match</key>
<string>\w[\w\-_0-9]*\w</string>
<key>name</key>
<string>variable.other.non-terminal.ebnf</string>
</dict>
<key>token</key>
<dict>
<key>match</key>
<string>[A-Z][A-Z\-_0-9]*</string>
<key>name</key>
<string>support.constant.token.ebnf</string>
</dict>
<key>operator</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#operator-alternative</string>
</dict>
<dict>
<key>include</key>
<string>#operator-concatenation</string>
</dict>
<dict>
<key>include</key>
<string>#operator-exception</string>
</dict>
</array>
</dict>
<key>operator-alternative</key>
<dict>
<key>match</key>
<string>\|</string>
<key>name</key>
<string>keyword.operator.alternative.ebnf</string>
</dict>
<key>operator-concatenation</key>
<dict>
<key>match</key>
<string>,</string>
<key>name</key>
<string>keyword.operator.concatenation.ebnf</string>
</dict>
<key>operator-exception</key>
<dict>
<key>match</key>
<string>-</string>
<key>name</key>
<string>keyword.operator.exception.ebnf</string>
</dict>
<key>optional</key>
<dict>
<key>begin</key>
<string>\[</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>keyword.other.optional.begin.ebnf</string>
</dict>
</dict>
<key>end</key>
<string>\]</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>keyword.other.optional.end.ebnf</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#subrules</string>
</dict>
</array>
</dict>
<key>repetition</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>(\?|\*|\+)</string>
<key>name</key>
<string>keyword.other.repetition.ebnf</string>
</dict>
<dict>
<key>begin</key>
<string>{</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>keyword.other.repetition.begin.ebnf</string>
</dict>
</dict>
<key>end</key>
<string>}</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>keyword.other.repetition.end.ebnf</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#subrules</string>
</dict>
</array>
</dict>
</array>
</dict>
<key>repetition-numbered</key>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>constant.numeric.integer.ebnf</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>keyword.operator.repetition.ebnf</string>
</dict>
</dict>
<key>match</key>
<string>(\d+)\s*(\*)</string>
</dict>
<key>single-quote-string</key>
<dict>
<key>begin</key>
<string>'</string>
<key>end</key>
<string>'</string>
<key>name</key>
<string>string.quoted.single.ebnf</string>
</dict>
<key>special-sequence</key>
<dict>
<key>begin</key>
<string>\?</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>keyword.other.special-sequence.begin.ebnf</string>
</dict>
</dict>
<key>end</key>
<string>\?</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>keyword.other.special-sequence.end.ebnf</string>
</dict>
</dict>
<key>name</key>
<string>entity.other.attribute-name.ebnf</string>
</dict>
<key>subrules</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#invalid</string>
</dict>
<dict>
<key>include</key>
<string>#optional</string>
</dict>
<dict>
<key>include</key>
<string>#repetition</string>
</dict>
<dict>
<key>include</key>
<string>#group</string>
</dict>
<dict>
<key>include</key>
<string>#repetition-numbered</string>
</dict>
<dict>
<key>include</key>
<string>#token</string>
</dict>
<dict>
<key>include</key>
<string>#non-terminal</string>
</dict>
<dict>
<key>include</key>
<string>#operator</string>
</dict>
<dict>
<key>include</key>
<string>#single-quote-string</string>
</dict>
<dict>
<key>include</key>
<string>#double-quote-string</string>
</dict>
<dict>
<key>include</key>
<string>#special-sequence</string>
</dict>
</array>
</dict>
</dict>
<key>scopeName</key>
<string>source.ebnf</string>
<key>uuid</key>
<string>D9954069-097B-4361-818D-EF4986D442E7</string>
</dict>
</plist>
Loading