Tôi đang sử dụng pyparsing để phân tích một chuỗi hex và tôi đang tìm kiếm một cách tự động để in cây phân tích cú pháp.In một cây kết quả pyparsing
Cách tiếp cận gần là đổ lệnh nhưng in nhiều thông tin trùng lặp.
Ví dụ:
from pyparsing import * #Word, Optional, OneOrMore, Group, ParseException
data = Forward()
arrayExpr = Forward()
def data_array(s,l,t):
n = int(t[0], 16)
arrayExpr << (n * data)
return t[0]
array = Word(hexnums, exact=2).setParseAction(data_array) + arrayExpr
data << (Literal('01') + array.setResultsName('array')
| Literal('03') + Word(hexnums, exact=2)('char')
| Literal('04') + Word(hexnums, exact=2)('boolean'))
frame = (Word(hexnums, exact=2)('id') \
+ data('data'))('frame')
result = frame.parseString("02010203010302");
print result.dump()
Mục tiêu là kết quả của result.dump() là một cái gì đó tương tự như
- frame: ['02', '01', '03', '03', '01', '04', '02', '03', '02']
- id: 02
- array: ['03', '03', '01', '04', '02', '03', '02']
- char: 01
- boolean: 02
- char: 02
Các in khá là không bắt buộc, nhưng giả vờ là cấu trúc cây .
Có cách nào để tạo bản in này hoặc tôi sẽ cần có setParseAction cho tất cả các quy tắc không?
Cảm ơn, tôi đã thực hiện một cái gì đó giống như SimpleBool – Nine
Tuyệt vời! Tôi nghĩ việc triển khai của bạn trông giống như một khởi đầu hợp lý. –
chính xác những gì tôi đang tìm kiếm! mà không gắn thẻ, thật khó để hiểu được các loại trong cây. – dashesy