作为我正在处理的小项目的一部分,我需要能够将字符串解析为自定义对象,该对象表示操作,日期和一些其他属性。棘手的部分是输入字符串可以有各种各样的口味,需要正确解析。
输入字符串可以采用以下格式:
明天上午9点去上班
输出对象看起来像这样:
{
"Action":"Wash my car",
"DateTime":"2011-12-26 3:00PM", // Format is irrelevant at this point
"Recurring":False,
"RecurranceType":""
}
首先,我想到构建某种树来表示不同的状态(On,In,Every等),具有不同的结果和更多的状态(状态机的候选者,对吧?)。但是,我越是想到这一点,它开始看起来就越像语法解析问题。由于句子的形成方式(数量有限),看起来需要实现某种语法分析算法。
另外,我在前端做这个,所以JavaScript是这里的首选语言。后端将用Python编写,如果需要,可以通过调用AJAX方法来使用,但我更喜欢将它全部保存在JavaScript中。 (说实话,我不认为语言在这里是个大问题。)
那么,我是否在我脑海中?我有一个强大的JavaScript背景,但在语言设计,解析等方面没有什么超越学校课程。有没有更好的方法来解决这个问题?非常感谢任何建议。
答案 0 :(得分:1)
我对语法分析知之甚少,但这里的内容可能有所帮助。
我的第一个想法是你的句子语法似乎非常一致
第一个3-4个单词一般是VERB文本NOUN,其次是某种形式的时间。如果总选项仅限于句子可以采用的形式,则可以对某些解析规则进行硬编码。我还遇到了几个js语法解析器,可能会让你到达某个地方:
http://jscc.jmksf.com/ http://pegjs.majda.cz/ http://www.corion.net/perl-dev/Javascript-Grammar.html
这是一个有趣的问题。请稍后使用您的解决方案更新。