Я хотел бы использовать 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; }