如何为两个解析器语法制作相同的词法分析器

时间:2014-11-19 08:14:27

标签: java antlr3

我正在为一种语言编写解析器。实现后,我发现有很多解析器规则。所以,我拆分了语法。我在两个语法中添加了词法分析器规则。但是,现在我发现词法分析器是从第一个语法生成的,并且它们在其他语法中不匹配,因此没有可行的alt异常。

任何人都可以指导我如何在两种语法中使用相同的词法分析器规则吗?

2 个答案:

答案 0 :(得分:1)

你可以使用相同的词法分析器,你可以用起始行设置词法分析器文件,假设' SomeLanguage'作为你的语言:

lexer grammar SomeLanguage;

在你的paser文件上,你应该从:

开始
parser grammar SomeLanguage;
options {
    tokenVocab=SomeLanguage;
}

其中'选项'引用语法的词法分析器。

要编译,我们假设词法分析器位于名为' the_lexer'的文件夹中。和你的解析器在文件夹' the_parser':

java org.antlr.v4.Tool the_lexer\SomeLanguage.g
java org.antlr.v4.Tool -lib the_lexer the_parser\SomeLanguage.g

答案 1 :(得分:0)

您可以使用规则导入在所有语法中使用相同的词法规则。

假设你有像这样的词法分析器规则语法

   lexer grammar MainLexer;

   Protocol
   : 'protocol'
   ;

   Start
   : 'start'
   ;

   Identifier
   : ('a'..'z' | 'A'..'Z')+
   ;

任务是在每个语法中重用这个词法分析器。

编写一个虚拟的Lexer语法(在第二个语法中),它会像这样导入主要的Lexer

    lexer grammar Dummy1Lexer;

    import MainLexer;        

    Dummy1
    : 'dummy1'
    ;

但是你必须在第二个语法项目中提供主要的Lexer语法。