Antlr Python公司

2024-10-02 02:43:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为Python中的Antlr语法生成解析树。你知道吗

我的代码:

char_stream = InputStream('a(1)')
lexer = MLexer(char_stream )
stream = CommonTokenStream(lexer)
parser = MParser(stream)
tree = parser.start()

错误:

line 1:0 mismatched input 'a' expecting <INVALID>

当我检查Antlr生成的解析器文件时:

 literalNames = [ "<INVALID>", "' '", "'\t'", "<INVALID>", "<INVALID>", 
                 "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
                 "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
                 "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
                 "':-'", "','", "'('", "')'", "<INVALID>", "<INVALID>", 
                 "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
                 "<INVALID>", "<INVALID>", "'.'" ]

     symbolicNames = [ "<INVALID>", "<INVALID>", "<INVALID>", "DATALOGPROGRAM", 
                  "SCHEMALIST", "SCHEMA", "CLAUSELIST", "RULELIST", 
                  "FACTLIST", "GOALLIST", "FACT", "E_RULE", "GOAL", 
                  "BODY", "LITERALLIST", "LITERAL", "PREDICATE", "GOALSIGN", 
                  "COMMA", "LEFTBRAK", "RIGHTBRAK", "OPERATOR", "VARIABLELIST", 
                  "VARIABLE", "CONSTANTLIST", "CONSTANT", "Numbers", 
                  "Lrr", "Urr", "PERIOD" ]

在antlr生成的解析器文件中有太多的无效字符。我该怎么解决这个问题?你知道吗

请在Antlr中找到以下语法: 在符号名和文字名中有很多“无效”的成分

grammar N;


start               : DATALOGPROGRAM;

LITERAL             :  LEFTBRAK (VARIABLELIST) RIGHTBRAK;

PREDICATE            :Lrr  (Lrr|Urr)+;


GOALSIGN            : ':-';

COMMA               : ',';

LEFTBRAK            : '(';

RIGHTBRAK            : ')';

OPERATOR            :  '>' | '<' | '=' | '!='  | '>=' | '<=' ;

VARIABLELIST        : VARIABLE | VARIABLE (COMMA VARIABLE)*;

VARIABLE            : Urr | Urr (Lrr|Urr)+;   /

CONSTANTLIST        : CONSTANT | CONSTANT (COMMA CONSTANT)*;

CONSTANT            : Lrr | Lrr (Lrr|Urr)+| Numbers ; //Constant must start with Lowercase letter

Numbers             : DIGIT;

Lrr : LOWERCASE;

Urr: UPPERCASE;

PERIOD              : '.';


fragment LOWERCASE  : [a-z] ;

 fragment UPPERCASE  : [A-Z] ;

 fragment DIGIT      : [0-9] ;

 whitespace : (' ' | '\t') ;

Tags: stream语法variablestartnumbersconstantantlrcomma

热门问题