Skip to content

Commit f3d2e89

Browse files
committed
Initial lexer
0 parents  commit f3d2e89

6 files changed

Lines changed: 805 additions & 0 deletions

File tree

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
**/__pycache__
2+
build/
3+
dist/
4+
*.egg-info/
5+
*.eggs
6+
.coverage
7+
**/.vscode

LICENSE

Lines changed: 674 additions & 0 deletions
Large diffs are not rendered by default.

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pygments-systemrdl.svg)](https://pypi.org/project/pygments-systemrdl)
2+
3+
# pygments-systemrdl
4+
5+
This module implements a [SystemRDL 2.0](http://accellera.org/downloads/standards/systemrdl)
6+
language lexer for [Pygments](https://pytments.org).
7+
The lexer is published as an entry point and, once installed, Pygments will
8+
pick it up automatically.
9+
10+
The language is registered under the alias: `systemrdl`
11+
12+
## Installation
13+
14+
Install from [PyPi](https://pypi.org/project/pygments-systemrdl) using pip:
15+
16+
python3 -m pip install pygments-systemrdl

rdl_pygments/__init__.py

Whitespace-only changes.

rdl_pygments/rdllexer.py

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
from pygments import lexer
2+
from pygments import token
3+
from pygments.lexers.perl import PerlLexer
4+
5+
class SystemRDLLexer(lexer.RegexLexer):
6+
name = 'SystemRDL'
7+
aliases = ['systemrdl']
8+
filenames = ['*.rdl']
9+
10+
tokens = {
11+
12+
'root': [
13+
lexer.include('comments'),
14+
lexer.include('perl'),
15+
lexer.include('prop-assign'),
16+
lexer.include('comp-def'),
17+
18+
(lexer.words((
19+
'addrmap', 'regfile', 'reg', 'field', 'enum', 'struct',
20+
'constraint', 'signal', 'mem'
21+
), suffix=r'\b'), token.Keyword),
22+
23+
(lexer.words((
24+
'external', 'abstract', 'alias', 'unsigned'
25+
), suffix=r'\b'), token.Keyword),
26+
27+
(lexer.words((
28+
'bit', 'boolean', 'onreadtype', 'onwritetype', 'string',
29+
'accesstype', 'addressingtype', 'component',
30+
), suffix=r'\b'), token.Keyword.Type),
31+
32+
lexer.include('literals'),
33+
(r'[{}()\[\],.;\']', token.Punctuation),
34+
(r'[~!%^&*+-=|?:<>/-@]', token.Operator),
35+
(r'[a-zA-Z][\w]*', token.Name),
36+
(r'\s', token.Text)
37+
],
38+
39+
'comments': [
40+
(r'(?s)/\*.*\*/', token.Comment.Multiline),
41+
(r'//.*?$', token.Comment.Single),
42+
],
43+
44+
'perl': [
45+
(r'(?s)(<%=?)(.+?)(%>)', lexer.bygroups(token.Name.Tag, lexer.using(PerlLexer), token.Name.Tag)),
46+
],
47+
48+
'literals': [
49+
(r'([0-9]+)?(\'h)[0-9a-fA-F_]+', token.Number.Hex),
50+
(r'([0-9]+)?(\'b)[01_]+', token.Number.Bin),
51+
(r'([0-9]+)?(\'d)[0-9_]+', token.Number.Integer),
52+
(r'([0-9]+)?(\'o)[0-7_]+', token.Number.Oct),
53+
(r'0[xX][0-9a-fA-F_]+', token.Number.Hex),
54+
(lexer.words(('true', 'false'), suffix=r'\b'), token.Literal),
55+
(r'\d+', token.Number.Integer),
56+
(r'"', token.String, 'string'),
57+
],
58+
'string': [
59+
(r'"', token.String, '#pop'),
60+
(r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', token.String.Escape),
61+
(r'[^\\"\n]+', token.String), # all other characters
62+
(r'\\\n', token.String), # line continuation
63+
(r'\\', token.String), # stray backslash
64+
],
65+
66+
'prop-assign': [
67+
#(r'(\w+)\s*(;)', lexer.bygroups(token.Name.Attribute, token.Operator)),
68+
(r'(\w+)(\s*)(=)', lexer.bygroups(token.Name.Attribute, token.Text, token.Operator)),
69+
(r'(->)(\s*)(\w+)(\s*)(=)', lexer.bygroups(
70+
token.Operator, token.Text, token.Name.Attribute, token.Text, token.Operator
71+
)),
72+
],
73+
74+
'comp-def': [
75+
(r'(addrmap|regfile|reg|field|mem|signal)(\s+)([a-zA-Z][\w]*)', lexer.bygroups(token.Keyword, token.Text, token.Name.Class))
76+
],
77+
}

setup.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import os
2+
import setuptools
3+
4+
with open("README.md", "r") as fh:
5+
long_description = fh.read()
6+
7+
setuptools.setup (
8+
name='pygments-systemrdl',
9+
version="1.0.0",
10+
author="Alex Mykyta",
11+
author_email="amykyta3@github.com",
12+
description="SystemRDL 2.0 lexer extension for Pygments",
13+
long_description=long_description,
14+
long_description_content_type="text/markdown",
15+
packages=setuptools.find_packages(),
16+
install_requires=["pygments"],
17+
entry_points =
18+
"""
19+
[pygments.lexers]
20+
rdllexer = rdl_pygments.rdllexer:SystemRDLLexer
21+
""",
22+
classifiers=(
23+
"Programming Language :: Python",
24+
"Programming Language :: Python :: 2",
25+
"Programming Language :: Python :: 3",
26+
"Operating System :: OS Independent",
27+
),
28+
project_urls={
29+
"Source": "https://github.com/SystemRDL/systemrdl-pygments",
30+
},
31+
)

0 commit comments

Comments
 (0)