gpt4 book ai didi

c - 使用ANTLRWorks生成C文件时出现ANTLR错误

转载 作者:行者123 更新时间:2023-11-30 17:54:44 26 4
gpt4 key购买 nike

我正在使用 ANTLRWorks 1.5 for C (ANTLR 3.5)。我创建了一个词法分析器和解析器文件。尝试生成代码时,它返回错误 <[18:52:50] error(100): Script.g:57:2: syntax error: antlr: MissingTokenException(inserted [@-1,0:0='<missing EOF>',<-1>,57:1] at options {)> .

这是代码,请告诉我缺少什么。

/* ############################## L E X E R ############################ */

grammar Lexer;

options {

language = C;
output = AST; //generating an AST
ASTLabelType = pANTLT3_BASE_TREE; //specifying a tree walker

k=1; // Only 1 lookahead character required

}

// Define string values - either simple unquoted or complex quoted
STRING : ('a'..'z'|'A'..'Z'|'0'..'9'|'_' | '+')+
| ('"' (~'"')* '"');


// Ignore all whitespace
WS :(' '
| '\t'
| '\r' '\n' { newline(); }
| '\n' { newline(); }
)
{ $setType(Token.SKIP); } ;

// TODO:Single-line comment
LINE_COMMENT : '/*' (~('\n'|'\r'))* ('\n'|'\r'('\n')?)?
{ $setType(Token.SKIP); newline(); } ;

// Punctuation
LBRACE : '<';
RBRACE : '>';
SLASH : '/';
EQUALS : '=';
SEMI : ';';

TRIGGER : ('Trigger');
TRIGGERTYPE : ('Fall') SLASH ('Rise')|('Rise') SLASH ('Fall')|('Fall')|('Rise');
DEFAULT : ('Default TimeSet');
TIMESETVAL : ('TSET_')('0..9')*;

 

/* ############################## P A R S E R ############################ */

grammar Script;

options {
language=C;
output=AST; // Automatically build the AST while parsing
ASTLabelType=pANTLR3_BASE_TREE;
//k=2; // Need lookahead of two for props without keys (to check for the =)
}

/*tokens {
SCRIPT; // Imaginary token inserted at the root of the script
BLOCK; // Imaginary token inserted at the root of a block
COMMAND; // Imaginary token inserted at the root of a command
PROPERTY; // Imaginary token inserted at the root of a property
}*/

/** Rule to parse Trigger line
*/

trigger : TRIGGER EQUALS TRIGGERTYPE SEMI;

/** Rule to parse TimeSet line
*/

timeset : DEFAULT TIMESETVAL;

最佳答案

您的“组合”语法 Lexer 仅具有词法分析器规则,而当您仅定义 grammar 时,ANTLR 预计至少有 1 个解析器规则。

有 3 种不同类型的语法

  • 组合语法:grammar Foo,生成:
    • FooParser 类扩展了 Parser
    • FooLexer 类扩展了 Lexer
  • 解析器语法:解析器语法栏,生成:
    • 类 Bar 扩展了解析器
  • 词法分析器语法:词法分析器语法 Baz,生成:
    • Baz 类扩展了 Lexer

因此,在您的情况下,将 grammar Lexer; 更改为 lexer Grammar ScriptLexer; (不要将您的词法分析器语法命名为 Lexer 因为它是 ANTLR 中的基本词法分析器类!)并将此词法分析器导入到您的解析器语法中:

parser grammar ScriptParser;

import ScriptLexer;

options {
language=C;
output=AST;
ASTLabelType=pANTLR3_BASE_TREE;
}

// ...
<小时/>

相关:

关于c - 使用ANTLRWorks生成C文件时出现ANTLR错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14765057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com