我想解析句子"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
中,我正在对语法文件本身内的一组语言进行硬编码。是否可以从文件中读取语言并相应地处理语法?
输入文件应该是这样的
languages.txt
java
python
cpp
我正在使用antlr 4.5.1-1
。
答案 0 :(得分:1)
不完全确定这是否完全满足您的问题,但请研究复合语法:
https://theantlrguy.atlassian.net/wiki/display/ANTLR3/Composite+Grammars
如果您真的需要它在文件中,请考虑从languages.txt到languages.grammar创建处理/构建步骤,并使用languages.grammar作为Composite。