前言
学习框架或第三方库的方法是什么
(1)少量的浏览manual或tutoral,只关注程序所需的特征,再完善其详细内容和特征的认识?
(2)花大量的时间研究详细内容,再考虑程序实现?
这是个先有鸡还是先有蛋的问题,因这是私底下的项目,我倾向于后者。
 
当前已对ANTLR文法有了一些了解,这篇是概览性知识的最后一部分。
初步将ANTLR的涉及的面向应用的内容划分了一下:
[1]文法:lexer, parser, tree parser
[2]动作和属性
[3]内部表示:AST
[4]模板语言StringTemplate
[5]错误报告和恢复
[7]谓词:句法谓词和语义谓词
 
内容
antlrworks常见用法
ANTLR文法级选项
1 language option
2 output option
3 backtrack option
4 memoize option
5 tokenVocab option
6 rewrite option
7 superClass option
8 filter option
9 ASTLabelType option
10 TokenLabelType option
 
antlrworks常见用法
很好的参考URL

1 【记录】尝试使用ANTLRWorks 1.5开发

http://www.crifan.com/try_antlrworks_1_5_development/

2 【已解决】ANTLRWorks 1.5编译代码出错:Compiler failed with result code 1

http://www.crifan.com/antlrworks_1_5_compiler_failed_with_result_code_1/
 
选用了antlrworks-1.4.3.jar(URL 2中提供了下载地址)。
 
打开编辑环境(Java(TM) Platform SE binary)

创建文法或模板

编辑器概览

测试文法(Run->Debug,或ctrl+D),编辑输入

直接识别(Go To End)

观察解析树

计划:记录测试过程中出现的错误。
---------------------------------------------------------------------------------------------------------------------------------------
 
ANTLR文法级选项
1 language option
language指定ANTLR生成的目标语言。
ANTLR在CLASSPATH下搜索路径org/antlr/codegen/templates/,下有各语言对应的模板。
 
2 output option
output仅对混合文法有效,生成输出模板(值为template),生成树(值为AST)。
 
3 backtrack option
backtrack设置为true时,表示ANTLR在静态LL(*)文法分析无法产生确定的决定时应该回溯。
默认为false。
 
4 memoize option
记录部分解析结果,以保证回溯时解析器不会对同一输入用同一规则解析超过一次。
默认为false。
 
5 tokenVocab option
指定ANTLR应该获得预定义的token和token类型。
常在一个文法需要另一个文法的token类型时使用,典型的例子是树文法使用解析文法产生其书生成的token和token类型。
默认不使用。
 
6 rewrite option
与output=template一起使用,在输入源本地修改。
 
7 superClass option
指定生成的识别器的超类。
根据不同的文法,默认为Lexer, Parse, TreeParse。
 
8 filter option
仅用于lexer。
按lexer规则顺序寻找匹配,消费输入中字符直至找到匹配的规则。
默认值为false。
 
9 ASTLabelType option
设置tree标签和值为tree的表达式(tree-valued expression)在目标语言中的类型。
Java中默认值为Object。
 
10 TokenLabelType option
设置token标签和值为token的表达式在目标语言中的类型。
Java中默认值为Token。
 
5.11 k option
向前看token数量。
默认值为*。

ANTLR3完全参考指南读书笔记[04]的更多相关文章

  1. ANTLR3完全参考指南读书笔记[01]

    引用 Terence Parr. The Definitive ANTLR Reference, Building Domain Specific Languages(antlr3 version). ...

  2. ANTLR3完全参考指南读书笔记[06]

    前言 这段时间在公司忙的跟狗似的,但忙的是没多少技术含量的活儿. 终于将AST IR和tree grammar过了一遍,计划明天写完这部分的读书笔记.   内容 1 内部表示AST构建 2 树文法   ...

  3. ANTLR3完全参考指南读书笔记[02]

    前言 程序语言是什么? 用wiki上的描述,程序语言是一种人工设计的语言,用于通过指令与机器交互:程序语言是编程程序的标记,而程序是一种计算或算法的描述.详细介绍和背景信息参考: Programmin ...

  4. ANTLR3完全参考指南读书笔记[08]

    前言 不要让用户被那些“专业术语”吓住! 用心设计的提示和反馈信息是软件设计者的“职业良心”.   内容 1 存在哪些错误? 2 美化错误提示 3 错误恢复策略   1 存在哪些错误? 在DSL语言开 ...

  5. ANTLR3完全参考指南读书笔记[07]

    前言 真正意义上的程序员都很懒,懒的连多余的一行代码也不写. 如果能将底层满手油污的活儿都可以交给别人去做,自己就扮演个智囊团成员的角色,生活会比想象中的还要惬意. 严格的按照指令执行长时间不知疲倦的 ...

  6. ANTLR3完全参考指南读书笔记[05]

    前言 仅生成给出true/false的识别器是没有多大用处的,自然的就有在识别过程中遇到某一结构时执行一段代码.存储该结构中信息的想法. ANTLR提供了在文法中嵌入属性和动作超级混合“文法”,可以生 ...

  7. ANTLR3完全参考指南读书笔记[03]

    前言 文中第4章内容有点多,有点枯燥,但不坚持一下,之前所做的工作就白做了. 再次确认一下总体目标: protege4编辑器中Class Definition中语法解析和错误提示: Java虚拟机规范 ...

  8. HTTP权威指南读书笔记

    HTTP权威指南笔记 读书有两种境界,第一种境界是将书读薄,另一种是读厚.本篇文章就是HTTP权威指南的读书笔记,算是读书的第一重境界,将厚书读薄.文章对HTTP的一些关键概念做了比较详细的概述,通读 ...

  9. css权威指南读书笔记

    今天翻手机,翻到了许久之前看css权威指南时的笔记,遂移到博客中来. 1.属性选择器p.one class名为one的p元素p[class][name] 含有class和name属性的p元素p[cla ...

随机推荐

  1. 如何在 Arch Linux 中安装 DNSCrypt 和 Unbound

    DNSCrypt 是一个用于对 DNS 客户端和 DNS 解析器之间通信进行加密和验证的协议.它可以阻止 DNS 欺骗或中间人攻击. DNSCrypt 可用于大多数的操作系统,包括 Linux,Win ...

  2. javascript作用域(Scope),简述上下文(context)和作用域的定义

    网页制作Webjx文章简介:这篇文章将正面解决这个问题:简述上下文(context)和作用域的定义,分析可以让我们掌控上下文的两种方法,最后深入一种高效的方案,它能有效解决我所碰到的90%的问题. 作 ...

  3. Visual Studio安装过程

    在这里需要先跟老师说一声抱歉,因为编写代码的愿意,我早在大一的时候就已经安装并且购买了正版的VS2013.所以今天在这里实在无法全部描述VS2013的安装过程. 然而,我所知的是,VS2013相对于我 ...

  4. Linux登陆和欢迎信息修改

    edit file: /etc/issue,/etc/motd 这样还改不了,生成的脚本在目录/etc/update-motd.d/中: 假如要打开一个文本文件,可以修改10-help-text: ( ...

  5. Java基础01 ------ 从HelloWorld到面向对象

    Java是完全面向对象的语言.Java通过虚拟机的运行机制,实现“跨平台”的理念.我在这里想要呈现一个适合初学者的教程,希望对大家有用. "Hello World!" 先来看一个H ...

  6. OpenCV之响应鼠标(二):函数cvSetMouseCallback()和其副程式onMouse()的使用(OpenCV2.4.5)

    每當滑鼠在視訊視窗介面點擊一下的時候,都會有固定三個動作 1.點擊(Click) 2.放開(Down)3.滑動(move) 因此,程式執行滑鼠在點擊的時候onMouse()都會連續跑三次,代表滑鼠在點 ...

  7. SharePoint 2010 BCS - 简单实例(二)外部列表创建

    博客地址 http://blog.csdn.net/foxdave 接上篇 由于图片稍多篇幅过长影响阅读,所以分段来写. 添加完数据源之后,我们需要为我们要放到SharePoint上的数据表定义操作, ...

  8. for循环进阶

    [引例] 输出一行10个“*” #include<cstdio> int main(){ printf("**********\n"); ; } 思考: (1)输出一行 ...

  9. hdoj-2019

    #include "stdio.h"void sort(int number[],int n,int m);int main(){ int n,m,i,number[100]; s ...

  10. Fractal Tree扩展

    之前的博客实现了最基础的分形树,在这个基础上略微调整一些参数可以得到很多有趣的由分形树发展出的图案. private void drawShape(Graphics g, double x1, dou ...