aboutsummaryrefslogtreecommitdiffstats
path: root/docs/util/RtlilLexer.py
diff options
context:
space:
mode:
Diffstat (limited to 'docs/util/RtlilLexer.py')
-rw-r--r--docs/util/RtlilLexer.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/docs/util/RtlilLexer.py b/docs/util/RtlilLexer.py
new file mode 100644
index 000000000..75aa53ec8
--- /dev/null
+++ b/docs/util/RtlilLexer.py
@@ -0,0 +1,45 @@
+from pygments.lexer import RegexLexer, bygroups, include
+from pygments.token import Comment, Keyword, Name, Number, String, Whitespace
+
+__all__ = ['RtlilLexer']
+
+class RtlilLexer(RegexLexer):
+ name = 'RTLIL'
+ aliases = ['rtlil']
+ filenames = ['*.il']
+
+ keyword_re = r'(always|assign|attribute|autoidx|case|cell|connect|edge|end|global|high|init|inout|input|low|memory|module|negedge|offset|output|parameter|posedge|process|real|signed|size|switch|sync|update|upto|width|wire)'
+
+ tokens = {
+ 'common': [
+ (r'\s+', Whitespace),
+ (r'#.*', Comment.Single),
+ (keyword_re, Keyword),
+ (r'([\\\$][^ \t\r\n]+|\.[0-9]+)', Name.Variable),
+ (r"[0-9]+'[01xzm-]*", Number),
+ (r'-?[0-9]+', Number.Integer),
+ (r'"', String, 'string'),
+ ],
+ 'root': [
+ (r'cell', Keyword, 'cell_definition'),
+ (r'(module|wire|memory|process)', Keyword, 'definition'),
+ include('common'),
+ ],
+ 'definition': [
+ (r'([\\\$][^ \t\r\n]+|\.[0-9]+)', Name.Entity, '#pop'),
+ include('common')
+ ],
+ 'cell_definition': [
+ (r'(\$[^ \t\r\n]+)\b', Name.Function),
+ (r'(\\[^ \t\r\n]+|\.[0-9]+)', Name.Variable),
+ (r'$', Whitespace, '#pop'),
+ include('common'),
+ ],
+ 'string': [
+ (r'"', String, '#pop'),
+ (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', String.Escape),
+ (r'[^\\"\n]+', String), # all other characters
+ (r'(\\)(\n)', bygroups(String.Escape, Whitespace)), # line continuation
+ (r'\\', String), # stray backslash
+ ]
+ }