2014-10-18 70 views
0

即时新的ANTLR和我不知道如何编译我的语法。 I'm使用ANTLR的V4.4使用包含.g4文件:需要帮助编译一个ANTLR语法文件

grammar JayGrammar; 
program: KEYWORD_VOI KEYWORD_MAI SEPARATOR_PAB SEPARATOR_PCD (declarations statements); 
declarations: (declaration)*; 
declaration: (type identifiers); 
type: (KEYWORD_INT | KEYWORD_BOO); 
identifiers: (IDENTIFIER)*; 
statements: (statement)*; 
statement: (block | assignment | ifstatement | whilestatementk); 
block: SEPARATOR_LAB statements SEPARATOR_LCD; 
assignment: (IDENTIFIER OPERATOR_IGU expression); 
ifstatement: KEYWORD_IF SEPARATOR_PAB expression SEPARATOR_PCD statement (KEYWORD_ELS statement)?; 
whilestatementk: KEYWORD_WHI SEPARATOR_PAB expression SEPARATOR_PCD statement; 
expression: conjunction ((OPERATOR_O) conjunction)*; 
conjunction: relation ((OPERATOR_Y) relation)*; 
relation: addition ((OPERATOR_REL) addition)*; 
addition: term ((OPERATOR_SUM|OPERATOR_RES) term)*; 
term: negation ((OPERATOR_POR|OPERATOR_DIV) negation)*; 
negation:(OPERATOR_NO) factor; 
factor: IDENTIFIER|LITERAL|SEPARATOR_PAB expression SEPARATOR_PCD; 

    INPUTELEMENT: (WHITESPACE|TOKEN); 
    WHITESPACE: (' '|'\t'|'\r'|'\n'|'\f'); 

    TOKEN: (IDENTIFIER|KEYWORD_BOO|KEYWORD_ELS|KEYWORD_IF|KEYWORD_MAI|KEYWORD_VOI|KEYWORD_WHI|LITERAL 
      |SEPARATOR_COM|SEPARATOR_LAB|SEPARATOR_LCD|SEPARATOR_PAB|SEPARATOR_PCD|SEPARATOR_PYC 
      |OPERATOR_REL|OPERATOR_DIV|OPERATOR_IGU|OPERATOR_NO|OPERATOR_O|OPERATOR_POR|OPERATOR_RES|OPERATOR_SUM|OPERATOR_Y); 

    LITERAL: (BOOLEAN INTEGER); 

    KEYWORD_BOO: BOOLEAN; 
    KEYWORD_ELS:'else'; 
    KEYWORD_IF: 'if'; 
    KEYWORD_INT: 'int'; 
    KEYWORD_MAI: 'main'; 
    KEYWORD_VOI: 'void'; 
    KEYWORD_WHI: 'while'; 
    BOOLEAN: ('true'|'false'); 

    INTEGER: (DIGIT+); 
    IDENTIFIER: (LETTER (LETTER| DIGIT)*); 
    DIGIT: ('0'..'9')+; 
    LETTER: ('a'..'z'|'A'..'Z')+; 


    SEPARATOR_PAB: '('; 
    SEPARATOR_PCD: ')'; 
    SEPARATOR_LAB: '{'; 
    SEPARATOR_LCD: '}'; 
    SEPARATOR_PYC: ';'; 
    SEPARATOR_COM: ','; 


    OPERATOR_IGU: ('='); 
    OPERATOR_SUM: ('+'); 
    OPERATOR_RES: ('-'); 
    OPERATOR_POR: ('*'); 
    OPERATOR_DIV: ('/'); 
    OPERATOR_REL: ('<'|'<='|'>'|'>='|'=='|'!='); 
    OPERATOR_Y: ('&&'); 
    OPERATOR_O: ('||'); 
    OPERATOR_NO: ('!'); 

,我会很高兴,如果有人能告诉我如何创建词法分析器和扩展名为”解析器。 java“,然后编译它们来创建类。 我一直在使用NetBeans,但我真的很困惑,如果有另一个IDE我可以使用或其他任何东西,请帮助我。

回答

2

这在Antlr4 "Getting Started"页面中进行了说明。

做手工是如此简单:

$ antlr4 YourGrammar.g4 
$ javac YourGrammar*.java 

...假设你已经安装并配置了一个Java JDK和ANTLR的。


有许多的方式来使用Antrlr的NetBeans IDE中:

  • 只写/生成一个Ant构建脚本,然后修改它包括一个用于运行antlr4诸如此类的规则。 With允许您在没有任何IDE特定集成的情况下将Antlr集成到您的构建中。

  • 按照the instructions here上的Antlr整合到NetBeans,

  • 安装和使用Antlrworks 2 plugin

+0

想你这么多,我生成了解析器和词法分析器并编译它们来创建.class文件。问题是,现在我不知道如何使用它们。 – Setrakus 2014-10-19 14:37:14

+0

尝试使用Altlr4教程。我链接到的第一页(上图)是其中的一部分。 – 2014-10-19 22:30:02