Làm thế nào tôi có thể mô tả một ngữ pháp sử dụng regex (hoặc pyparsing là tốt hơn?) Cho một languge kịch bản trình bày dưới đây (Backus-Naur Form):Chuyển đổi BNF ngữ pháp để pyparsing
<root> := <tree> | <leaves>
<tree> := <group> [* <group>]
<group> := "{" <leaves> "}" | <leaf>;
<leaves> := {<leaf>;} leaf
<leaf> := <name> = <expression>{;}
<name> := <string_without_spaces_and_tabs>
<expression> := <string_without_spaces_and_tabs>
Ví dụ về kịch bản:
{
stage = 3;
some.param1 = [10, 20];
} *
{
stage = 4;
param3 = [100,150,200,250,300]
} *
endparam = [0, 1]
tôi sử dụng python re.compile và muốn chia mọi thứ thành từng nhóm, một cái gì đó như thế này:
[ [ 'stage', '3'],
[ 'some.param1', '[10, 20]'] ],
[ ['stage', '4'],
['param3', '[100,150,200,250,300]'] ],
[ ['endparam', '[0, 1]'] ]
Cập nhật: Tôi đã phát hiện ra rằng pyparsing là giải pháp tốt hơn nhiều thay vì regex.
Bạn chỉ có thể làm giảm ngữ pháp bằng cách thay thế tất cả các nút không bị đầu cuối để có được một regex. Tuy nhiên, điều này sẽ làm gì tốt? Kết quả sẽ đơn giản trả về một luồng mã thông báo cho chuỗi đầu vào của bạn, nhưng sẽ không giữ lại bất kỳ cấu trúc nào, được yêu cầu để tạo ra ý nghĩa ngữ nghĩa của mã. –
Có bộ chuyển đổi ABNF-sang-regex tại đây: http://www.akr.org/abnf/ –
Cũng xem câu hỏi Stack Overflow có liên quan này: http://stackoverflow.com/questions/8898049/how-to-convert -a-thường-ngữ pháp-to-regular-expression –