使用AntlWorks生成C文件时出现ANTLR错误

使用AntlWorks生成C文件时出现ANTLR错误,c,antlr,antlrworks,C,Antlr,Antlrworks,我将ANTLRWorks 1.5用于C(ANTLR 3.5)。 我创建了一个lexer和parser文件。 当试图生成代码时,它返回错误 这是密码,请告诉我遗漏了什么 /* ############################## L E X E R ############################ */ grammar Lexer; options { language = C; output = AST; //generating an AST A

我将ANTLRWorks 1.5用于C(ANTLR 3.5)。 我创建了一个lexer和parser文件。 当试图生成代码时,它返回错误

这是密码,请告诉我遗漏了什么

/* ############################## 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')*;
您的“组合”语法
Lexer
仅具有Lexer规则,而当您仅定义
grammar
时,ANTLR至少需要一个解析器规则

有3种不同类型的语法

  • 组合语法:
    语法Foo
    ,生成:
    • 类FooParser扩展解析器
    • 类愚人扩展Lexer
  • 解析器语法:
    解析器语法栏
    ,生成:
    • 类栏扩展解析器
  • 词法语法:
    词法语法Baz
    ,生成:
    • class Baz扩展Lexer
因此,在你的例子中,改变
语法词法
进入
lexer语法脚本lexer
(不要命名你的lexer语法
lexer
,因为它是ANTLR中的基本lexer类!)并将这个lexer导入你的解析器语法:

parser grammar ScriptParser;

import ScriptLexer;    

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

// ...

相关的:

缺少令牌错误是它报告的“EOF”。
parser grammar ScriptParser;

import ScriptLexer;    

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

// ...