Как кормить жаворонка грамматикой antlr g4 C #? - PullRequest
0 голосов
/ 05 марта 2019

Я хотел бы использовать lark для генерации парсера для C # 6.

Я нашел грамматику C # 6 antlr , но она не работает "из коробки" с lark.

Есть ли кто-нибудь, кто мог бы рассказать мне, как переформатировать грамматику g4 в нечто, чем я могу кормить жаворонка?

Кажется, что формат между тем, что ожидает lark и g4, немного отличается.

from lark import Lark

filename = 'grammar.bnf'

with open(filename,'r') as file:
    output = file.read()

parser = Lark(output, start='compilation_unit')

grammar.bnf содержит грамматику C # 6, о которой я упоминал выше , с начальной точкой compilation_unit.

Выдержка из исходного файла bnf:

parser grammar CSharpParser;

options { tokenVocab=CSharpLexer; }

// entry point
compilation_unit
    : BYTE_ORDER_MARK? extern_alias_directives? using_directives?
      global_attribute_section* namespace_member_declarations? EOF
    ;

//B.2 Syntactic grammar

//B.2.1 Basic concepts

namespace_or_type_name 
    : (identifier type_argument_list? | qualified_alias_member) ('.' identifier type_argument_list?)*
    ;

[Rest of the file]

Обратите внимание, что я удалил все перед точкой входа compilation_unit:

parser grammar CSharpParser;

options { tokenVocab=CSharpLexer; }
...