antlr return 值作为键值
antlr return values as key-value
我想解析句子"i am looking for a java developer from india"
。
我需要的输出是 language=java 和 place=india
我创建了一个语法文件如下。
grammar Job;
eval returns [String value]
: output=jobExp {System.out.println($output.text); $value = $output.text;}
;
jobExp returns [String value]
: ind=indro whitespace var1=language ' developer from ' var2=place
{
System.out.println($var1.text);
System.out.println($var2.text);
$value = $var1.text+$var2.text; }
;
indro
:
'i am looking for a'
|
'i am searching for a'
;
language :
'java' | 'python' | 'cpp'
;
place :
'india' | 'america' | 'africa'
;
whitespace :
(' '|'\t')+
;
在 jobExp
中,我得到了 place
和 language
的值。我只是返回这两个变量。但是在 eval
中我得到了整个句子(我正在寻找来自印度的 java 开发人员)。我需要什么才能在 eval
中获得完全匹配的输出?是否可以在 antlr
中获得 json
或 hashMap
的输出?
我的java
class用于测试语法如下:
import org.antlr.runtime.*;
public class JobTest {
public static void main(String[] args) throws Exception {
ANTLRStringStream in = new ANTLRStringStream("i am looking for a java developer from india" );
JobLexer lexer = new JobLexer(in);
CommonTokenStream tokens = new CommonTokenStream(lexer);
JobParser parser = new JobParser(tokens);
System.out.println(parser.eval()); // print the value
}
}
您可以在语法中加入 @header
块,将其添加到生成的解析器文件中。
grammar Job;
@header {
import java.util.HashMap;
}
您可以在语法文件上进一步使用 HashMap
class 就像您使用 String
.
还有 @members
块来定义解析器的私有字段。您可以检查使用两个块的示例以在 this tutorial.
中定义表达式计算器
我想解析句子"i am looking for a java developer from india"
。
我需要的输出是 language=java 和 place=india
我创建了一个语法文件如下。
grammar Job;
eval returns [String value]
: output=jobExp {System.out.println($output.text); $value = $output.text;}
;
jobExp returns [String value]
: ind=indro whitespace var1=language ' developer from ' var2=place
{
System.out.println($var1.text);
System.out.println($var2.text);
$value = $var1.text+$var2.text; }
;
indro
:
'i am looking for a'
|
'i am searching for a'
;
language :
'java' | 'python' | 'cpp'
;
place :
'india' | 'america' | 'africa'
;
whitespace :
(' '|'\t')+
;
在 jobExp
中,我得到了 place
和 language
的值。我只是返回这两个变量。但是在 eval
中我得到了整个句子(我正在寻找来自印度的 java 开发人员)。我需要什么才能在 eval
中获得完全匹配的输出?是否可以在 antlr
中获得 json
或 hashMap
的输出?
我的java
class用于测试语法如下:
import org.antlr.runtime.*;
public class JobTest {
public static void main(String[] args) throws Exception {
ANTLRStringStream in = new ANTLRStringStream("i am looking for a java developer from india" );
JobLexer lexer = new JobLexer(in);
CommonTokenStream tokens = new CommonTokenStream(lexer);
JobParser parser = new JobParser(tokens);
System.out.println(parser.eval()); // print the value
}
}
您可以在语法中加入 @header
块,将其添加到生成的解析器文件中。
grammar Job;
@header {
import java.util.HashMap;
}
您可以在语法文件上进一步使用 HashMap
class 就像您使用 String
.
还有 @members
块来定义解析器的私有字段。您可以检查使用两个块的示例以在 this tutorial.