2

我想解析句子"i am looking for a java developer"。我需要的输出是language=java.

我创建了一个语法文件,如下所示。

grammar Job;

eval returns [String value]
    :    output=jobExp { $value = $output.text;}
    ;
jobExp returns [String value]
    :    ind=indro whitespace var1=language ' developer'  {$value = $var1.text;}
    ;

indro
    :
    'i am looking for a' |   'i am searching for a'
    ;

language :
    'java' | 'python' | 'cpp'
    ;

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

在这里,按照规则,language我在语法文件本身内对一组语言进行硬编码。是否可以从文件中读取语言并相应地处理语法?输入文件应该是这样的

语言.txt

 java
 python
 cpp

我正在使用antlr 4.5.1-1.

4

1 回答 1

1

不太确定这是否完全满足您的问题,但请查看复合语法:

https://theantlrguy.atlassian.net/wiki/display/ANTLR3/Composite+Grammars

如果您确实需要将其放在文件中,请考虑创建从languages.txt 到languages.grammar 的处理/构建步骤,并将languages.grammar 用作Composite。

于 2015-08-31T11:59:07.580 回答