Skip to content

Commit 323a8da

Browse files
authored
Merge pull request #49 from tomchean/master
add Sla operator support and fix operator percedence according to latest IEEE verilog document
2 parents 9f18cd5 + bdbc44a commit 323a8da

File tree

4 files changed

+14
-9
lines changed

4 files changed

+14
-9
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
({{ left }} {{ op }} {{ right }})

pyverilog/utils/op2mark.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
'Uor':'|', 'Unor':'~|', 'Uxor':'^', 'Uxnor':'~^',
1313
'Power':'**', 'Times':'*', 'Divide':'/', 'Mod':'%',
1414
'Plus':'+', 'Minus':'-',
15-
'Sll':'<<', 'Srl':'>>', 'Sra':'>>>',
15+
'Sll':'<<', 'Srl':'>>', 'Sla':'<<<', 'Sra':'>>>',
1616
'LessThan':'<', 'GreaterThan':'>', 'LessEq':'<=', 'GreaterEq':'>=',
1717
'Eq':'==', 'NotEq':'!=', 'Eql':'===', 'NotEql':'!==',
1818
'And':'&', 'Xor':'^', 'Xnor':'~^',
@@ -30,13 +30,14 @@ def op2mark(op):
3030
'Power':1,
3131
'Times':2, 'Divide':2, 'Mod':2,
3232
'Plus':3, 'Minus':3,
33-
'Sll':4, 'Srl':4, 'Sra':4,
33+
'Sll':4, 'Srl':4, 'Sla':4, 'Sra':4,
3434
'LessThan':5, 'GreaterThan':5, 'LessEq':5, 'GreaterEq':5,
3535
'Eq':6, 'NotEq':6, 'Eql':6, 'NotEql':6,
36-
'And':7, 'Xor':7, 'Xnor':7,
37-
'Or':8,
38-
'Land':9,
39-
'Lor':10
36+
'And':7,
37+
'Xor':8, 'Xnor':8,
38+
'Or':9,
39+
'Land':10,
40+
'Lor':11
4041
}
4142

4243
def op2order(op):

pyverilog/vparser/ast.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,9 @@ class Sll(Operator):
585585
class Srl(Operator):
586586
pass
587587

588-
588+
class Sla(Operator):
589+
pass
590+
589591
class Sra(Operator):
590592
pass
591593

pyverilog/vparser/parser.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ class VerilogParser(PLYParser):
3737
('left', 'LOR'),
3838
('left', 'LAND'),
3939
('left', 'OR'),
40-
('left', 'AND', 'XOR', 'XNOR'),
40+
('left', 'XOR', 'XNOR'),
41+
('left', 'AND'),
4142
('left', 'EQ', 'NE', 'EQL', 'NEL'),
4243
('left', 'LT', 'GT', 'LE', 'GE'),
4344
('left', 'LSHIFT', 'RSHIFT', 'LSHIFTA', 'RSHIFTA'),
@@ -1030,7 +1031,7 @@ def p_expression_srl(self, p):
10301031

10311032
def p_expression_sla(self, p):
10321033
'expression : expression LSHIFTA expression'
1033-
p[0] = Sll(p[1], p[3], lineno=p.lineno(1))
1034+
p[0] = Sla(p[1], p[3], lineno=p.lineno(1))
10341035
p.set_lineno(0, p.lineno(1))
10351036

10361037
def p_expression_sra(self, p):

0 commit comments

Comments
 (0)