总结:

这个javacc感觉比较复杂,在于stanfordnlp中

p.p1 { margin: 0; font: 11px Monaco }

CoreMapExpressionExtractor这个太过复杂,只需要搞清楚如何写正则就行了

格式就是

p.p1 { margin: 0; font: 11px Monaco }
p.p2 { margin: 0; font: 11px Monaco; min-height: 15px }
span.s1 { text-decoration: underline }

$DAYOFWEEK = "/monday|tuesday|wednesday|thursday|friday|saturday|sunday/"

$TIMEOFDAY = "/morning|afternoon|evening|night|noon|midnight/"

ENV.defaults["ruleType"] = "tokens"

{

ruleType: "tokens",        #类型

pattern: ( $DAYOFWEEK ),   #正则本身

result: "TIME"             #如果匹配后如何生成nlg

}

一、javacc说明文档

  • >>>红色部分

parser_begin 和 parser_end
但是这也是一个声明实例变量的好场所,该实例变量将由您结果中的 Java 语句引用。如果您喜欢,甚至可以在这里插入 Java main() 过程,并且使用它来构建独立的应用程序,以启动和测试您正在生成的解析器

  • >>>绿色部分

绿色部分直接调用黄色函数
该操作作为方法 Parser_1.integerLiteral() 的一部分产生。每当解析器遇到整数时,都执行该操作

  • >>>黄色部分函数

声明了类型 Token (JavaCC 的内置类)的局部变量 t 。当在输入流中遇到整数时会 触发 该规则,该整数(象文本一样)的值被赋给实例变量 t.image 。

  • >>>黑色部分

举个例子
TOKEN : { < NUMBER : ([”0”-”9”])+ > }
说明([”0”-”9”])+. The [”0”- ”9”] part is a regular expression that matches any digit, that is, any character whose unicode encoding is between that of 0 and that of 9. A regular expression of the form (x)+ matches any sequence of one or more strings, each of which is matched by regular expression x. So the regular expression ([”0”-”9”])+ matches any sequence of one or more digits.

  • >>>执行流程

1. 最上面的方法 simpleLang() 调用 integerLiteral() 。
2. integerLiteral() 希望在输入流中立即遇到一个整数,否则该表达式将无效。为了验证这一点,它调用记号赋予器(Tokenizer.java)以返回输入流中的下一个记号。记号赋予器穿过输入流,每次检查一个字符,直到它遇到一个整数或者直至文件结束。如果是前者,则以 <INT> 记号将值“包”起来;如果是后者,则当作 <EOF> ;并将记号返回给 integerLiteral() 做进一步处理。如果记号赋予器未遇到这两个记号,则返回词法错误。
3. 如果记号赋予器返回的记号不是整数记号或 <EOF> ,那么 integerLiteral()抛出 ParseException ,同时解析完成。
4. 如果它是整数记号,表达式仍然可能是有效的, integerLiteral() 再次调用记号赋予器以返回下一个记号。如果返回 <EOF> ,则由单个整数构成的整个表达式都是有效的,解析器将控制返还给调用应用程序。
5. 如果记号赋予器返回加号或减号记号,则表达式仍然是有效的,integerLiteral() 将最后一次调用记号赋予器,以寻找另一个整数。如果遇到一个整数,则表达式是有效的,解析器将完成工作。如果下一个记号不是整数,则解析器抛出异常。

二、stanfordnlp TokenSequenceParser.jj

然后直接调用   new TokenSequenceParser

看看上面定义的规则如何使用呢?如下

最关键的函数是如下

p.p1 { margin: 0; font: 11px Monaco }
span.s1 { color: rgba(147, 26, 104, 1) }

最新文章

  1. 成为Android高手必须掌握的28大项内容和10个建议
  2. http请求及模拟浏览器发送http请求
  3. jQuery中ready与load事件
  4. 【HDOJ】1823 Luck and Love
  5. Java设计模式(学习整理)----装饰模式
  6. macos10.8.5原版系统dmg转iso
  7. Realview MDK 中不用手动开中断的原因
  8. Merge into的使用详解-你Merge了没有
  9. Learning Java 8 Syntax (Java in a Nutshell 6th)
  10. setAttribute设置无效
  11. 修复mysql表
  12. UE4源码笔记
  13. Servlet、Tomcat访问(access)日志配置、记录Post请求参数
  14. docker 启动失败
  15. Asp.Net4.5 mvc4(二) 页面创建与讲解
  16. loadrunner&#160;运行场景-场景运行原理
  17. pandas的to_csv()使用细节和一些参数
  18. HDU 2029 Palindromes _easy version
  19. x=x+1,x+=1,及x++的效率哪个最高,为什么?
  20. java中类的加载顺序介绍(ClassLoader)

热门文章

  1. 家庭账本开发day03
  2. 实验 1 Linux 系统的安装和常用命令
  3. 团队nabcd(校园大事件)
  4. [刘阳Java]_TortoiseSVN基础应用_第1讲
  5. 如何移除本地文件夹与Git的连接
  6. Mysql分区表使用
  7. WIN XP SP2系统经常性死机问题解决历程
  8. videojs文档翻译-EventTarget
  9. 论文笔记:(CVPR2017)PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
  10. 大数据学习(13)—— HBase入门