Java中的正则表达式(正则表达式和语法)

时间:2015-11-25 07:27:01

标签: java regex

这就是我的问题:明天我有一份作业(过去几天我一直在研究它),我觉得它有一半,但另一半我只是有一点线索。基本上,我必须写一个代码,用户给我一些单词和类别(如字典)和语法,例如:

A: article adjective A  
A: adjective B  
B: noun  

然后用户将输入一个句子,我将检查单词是否在我的字典中,如果是,我将输出他们的类别和"接受"如果它符合语法和"拒绝"如果它不匹配。

现在,我知道我可能必须使用正则表达式,但到目前为止我找不到任何真正有用的东西。
我将举一个输入和输出的例子:

Input:  
Dictionary:  
word: The  
category: article  
word: big  
category: adjective  
word: blue  
category: adjective  
word: car   
category: noun

Grammar:  
A: article adjective A  
A: adjective B  
B: noun  

Sentences:   
The big blue car  
The car big blue  

Output:  
(first sentence)  
article adjective adjective noun  
Accept  
(second sentence)  
article noun adjective adjective   
Refuse  

所以,我的程序已经输出了正确的类别,但我不知道如何实现语法部分(我已经有一个带有arrayList的类用于语法)。正如我之前所说,我认为我将不得不使用Regex,但到目前为止还没有找到非常有用的。

提前谢谢!

2 个答案:

答案 0 :(得分:1)

语法通常不是作为正则表达式实现的,因为它们是复杂的并且是自引用的,正则表达式对于解析传入的文本更有用。您需要的是比表示语法的列表更好的数据结构,并帮助您验证句子在语法上是否正确。查看抽象语法树。

答案 1 :(得分:0)

您通常不能使用正则表达式实现语法,除非它是常规语言的语法,例如,不包含嵌套语法,例如

 expression: '(' expression ')'

你需要某种类型的下推自动机,例如递归下降或LALR(1)解析器。

请参阅Chomsky hierarchy