summaryrefslogtreecommitdiff
path: root/pygments/lexers/esoteric.py
diff options
context:
space:
mode:
authorMatthew Fernandez <matthew.fernandez@nicta.com.au>2015-03-26 11:21:00 +1100
committerMatthew Fernandez <matthew.fernandez@nicta.com.au>2015-03-26 11:21:00 +1100
commit915089a6ba9c9e4f65c0eeada21d69598eb7af51 (patch)
treef006072a24a47177784e0ac4cb3a304ff649038c /pygments/lexers/esoteric.py
parent0d7e4c7183fc3a53dfeadb800285debf83eb84b0 (diff)
downloadpygments-915089a6ba9c9e4f65c0eeada21d69598eb7af51.tar.gz
Add a lexer for the CAmkES language.
This changeset adds a lexer to support the input language for the CAmkES component platform (https://sel4.systems/CAmkES/). It is a basic stateless lexer that merely supports keywords and types without tracking context.
Diffstat (limited to 'pygments/lexers/esoteric.py')
-rw-r--r--pygments/lexers/esoteric.py62
1 files changed, 60 insertions, 2 deletions
diff --git a/pygments/lexers/esoteric.py b/pygments/lexers/esoteric.py
index f61b292d..e8e002ba 100644
--- a/pygments/lexers/esoteric.py
+++ b/pygments/lexers/esoteric.py
@@ -9,11 +9,11 @@
:license: BSD, see LICENSE for details.
"""
-from pygments.lexer import RegexLexer, include
+from pygments.lexer import RegexLexer, include, words
from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
Number, Punctuation, Error
-__all__ = ['BrainfuckLexer', 'BefungeLexer', 'RedcodeLexer']
+__all__ = ['BrainfuckLexer', 'BefungeLexer', 'CAmkESLexer', 'RedcodeLexer']
class BrainfuckLexer(RegexLexer):
@@ -78,6 +78,64 @@ class BefungeLexer(RegexLexer):
}
+class CAmkESLexer(RegexLexer):
+ """
+ Basic lexer for the input language for the
+ `CAmkES <https://sel4.systems/CAmkES/>`_ component platform.
+ """
+ name = 'CAmkES'
+ aliases = ['camkes', 'idl4']
+ filenames = ['*.camkes', '*.idl4']
+
+ tokens = {
+ 'root':[
+ # C pre-processor directive
+ (r'^\s*#.*\n', Comment.Preproc),
+
+ # Whitespace, comments
+ (r'\s+', Text),
+ (r'/\*(.|\n)*?\*/', Comment),
+ (r'//.*\n', Comment),
+
+ (r'[\[\(\){},\.;=\]]', Punctuation),
+
+ (words(('assembly', 'attribute', 'component', 'composition',
+ 'configuration', 'connection', 'connector', 'consumes',
+ 'control', 'dataport', 'Dataport', 'emits', 'event',
+ 'Event', 'from', 'group', 'hardware', 'has', 'interface',
+ 'Interface', 'maybe', 'procedure', 'Procedure', 'provides',
+ 'template', 'to', 'uses'), suffix=r'\b'), Keyword),
+
+ (words(('bool', 'boolean', 'Buf', 'char', 'character', 'double',
+ 'float', 'in', 'inout', 'int', 'int16_6', 'int32_t',
+ 'int64_t', 'int8_t', 'integer', 'mutex', 'out', 'real',
+ 'refin', 'semaphore', 'signed', 'string', 'uint16_t',
+ 'uint32_t', 'uint64_t', 'uint8_t', 'uintptr_t', 'unsigned',
+ 'void'), suffix=r'\b'), Keyword.Type),
+
+ # Recognised attributes
+ (r'[a-zA-Z_]\w*_(priority|domain|buffer)', Keyword.Reserved),
+ (words(('dma_pool', 'from_access', 'to_access'), suffix=r'\b'),
+ Keyword.Reserved),
+
+ # CAmkES-level include
+ (r'import\s+(<[^>]*>|"[^"]*");', Comment.Preproc),
+
+ # C-level include
+ (r'include\s+(<[^>]*>|"[^"]*");', Comment.Preproc),
+
+ # Literals
+ (r'0[xX][\da-fA-F]+', Number.Hex),
+ (r'-?[\d]+', Number),
+ (r'-?[\d]+\.[\d]+', Number.Float),
+ (r'"[^"]*"', String),
+
+ # Identifiers
+ (r'[a-zA-Z_]\w*', Name),
+ ],
+ }
+
+
class RedcodeLexer(RegexLexer):
"""
A simple Redcode lexer based on ICWS'94.