`

草稿-不会写

阅读更多
paser规则内不要用fragment


grammar AHK;
@header {
import java.io.*;
}
@members {
String s = "";
String newLine = "<br/>";
String head = "<html><body>";
String foot = "</body></html>";
String begin01 = "<span style=\"color:";
String begin02 = "\">";
String end = "</span>";
String bBegin = "<strong>";
String bEnd = "</strong>";
String comment = "#008000";
String function = "#004080";
String var = "#0000ff";
String ref = "#7f200f";
void fillFile(String s){
	File dest = new File("dest.html");
	try {
		FileWriter fw = new FileWriter(dest);
		s = head + s + foot;
		fw.write(s);
		fw.flush();
	} catch (IOException e) {
		e.printStackTrace();
	}
}
/** 
 * color the value
*/
String c(String value, String color){
	return begin01 + color + begin02 + value + " " + end;
}
/**
 * bold and color the value
*/
String bc(String value, String color){
	return bBegin + c(value, color) + bEnd;
}
}

prog:  stat{System.out.println(s);fillFile(s);} ;
                
stat: (line{s+=$line.v + newLine;})+;
line returns [String v=""]:	   
	 ( function {v+=bc($function.text,function);} 
           ( vars{v+=c($vars.text,var);}
            |guiSet{v+=c($guiSet.text, var);}
            |ref{v+=c($ref.text,ref);})*
          |expr {v += $expr.v;}
         )*
         ( e=NewLine{v+=$e.text;}
          |LINE_COMMENT{v+=c($LINE_COMMENT.text,comment);}
         )
    ;

guiSet	:	
	(ADD|SUB Identifier)+
	;
vars:	Identifier (COMMA Identifier)*;
ref	:	'%'Identifier'%';
function:	Identifier COMMA*;
expr	returns [String v=""]
:	e=Identifier{$v += $e.text;} 
	EQ {$v += $EQ.text;}
	e=Identifier{$v += $e.text;}
	;
WS	:	( '\t'|' '|'\u000C' )+ 	{ $channel = HIDDEN; } ;
fragment
Letter	:	'A'..'Z';
NewLine:'\r'? '\n' ;
LINE_COMMENT
    : ';' ~('\n'|'\r')* '\r'? '\n'
    ;
LPAREN  :   '('  
    ;  
  
RPAREN  :   ')'  
    ;  
  
LBRACK  :   '['  
    ;  
  
RBRACK  :   ']'  
    ;  
  
LBRACE  :   '{'  
    ;  
  
RBRACE  :   '}'  
    ;  
  
COMMA   :   ','  
    ;  
  
SEMICOLON  
    :   ';'  
    ;  
  
ADD :   '+'  
    ;  
  
SUB :   '-'  
    ;  
  
MUL :   '*'  
    ;  
  
DIV :   '/'  
    ;  
  
EQEQ    :   '=='  
    ;  
  
NE  :   '!='  
    ;  
  
LT  :   '<'  
    ;  
  
LE  :   '<='  
    ;  
  
GT  :   '>'  
    ;  
  
GE  :   '>='  
    ;  
  
BANG    :   '!'  
    ;  
  
ANDAND  :   '&&'  
    ;  
  
OROR    :   '||'  
    ;  
  
EQ  :   '='|':='
    ;  
  
IF  :   'if'  
    ;  
  
ELSE    :   'else'  
    ;  
  
WHILE   :   'while'  
    ;  
  
BREAK   :   'break'  
    ;  
  
READ    :   'read'  
    ;  
  
WRITE   :   'write'  
    ;  
  
INT :   'int'  
    ;  
  
REAL    :   'real'  
    ;  
  
Identifier  
    :   LetterOrUnderscore ( LetterOrUnderscore | Digit )*  
    ;  
  
Integer :   Digit+  
    ;  
  
RealNumber  
    :   Digit+ '.' Digit+  
    ;  
  
fragment  
Digit   :   '0'..'9'  
    ;  
  
fragment  
LetterOrUnderscore  
    :   Letter | '_'  
    ;






测试代码:
import org.antlr.runtime.*;

public class TestAHK {
    public static void main(String[] args) throws Exception {
        ANTLRNoCaseFileStream input = new ANTLRNoCaseFileStream("clock.ahk");
        AHKLexer lexer = new AHKLexer(input);
        CommonTokenStream tokens = new CommonTokenStream(lexer);
        AHKParser parser = new AHKParser(tokens);
	try{
        parser.prog();
	}catch(Exception e){
		e.printStackTrace();
	}
    }
}


分享到:
评论

相关推荐

    草稿纸软件5.1.0.2版本

    草稿纸软件对视图区域各种信息进行保存,不会丢失信息,文件保存到本地,也不会泄露信息 草稿纸软件实现输入文字的白色区域透明,文字本身也可以设置透明度,文字不会与图片或其他内容混色,输入体验巨爽,视口效果...

    草稿纸软件5.1版本

    草稿纸实现PC机的草稿纸功能,并...草稿纸对视图区域各种信息进行保存,不会丢失信息,文件保存到本地,也不会泄露信息 草稿纸的截图功能能够使文字在截图中完全镂空,可以帮助您为图片添加弹幕,而且可以是个人汉字

    草稿纸软件(V5.1.0.3)

    草稿纸软件对视图区域各种信息进行保存,不会丢失信息,文件保存到本地,也不会泄露信息 草稿纸软件实现输入文字的白色区域透明,文字本身也可以设置透明度,文字不会与图片或其他内容混色,输入体验巨爽,视口效果...

    草稿纸软件5.1.0.1版本

    草稿纸实现PC机的草稿纸功能 草稿纸实现在视图区域...草稿纸对视图区域各种信息进行保存,不会丢失信息,文件保存到本地,也不会泄露信息 草稿纸实现输入文字的白色区域透明,还可以给输入文字设置透明度,效果非常好

    草稿纸软件5.0版本

    该软件对视图区域各种信息进行保存,不会丢失信息,文件保存到本地,也不会泄露信息 该软件的截图功能能够使文字在截图中完全镂空,可以帮助您为图片添加弹幕,而且可以是个人汉字 本软件致力于像草稿纸一样随意书写...

    行业文档-设计装置-一种可重复使用的新型草稿纸.zip

    草稿纸的可重复使用特性要求材料必须能够承受反复的书写和擦除,而不会产生损害。设计者可能需要对不同材料进行实验,比较其耐久性、擦拭效果、书写的流畅性以及对环境的影响。在选择材料过程中,设计团队可能还会...

    Android Mms之:草稿管理的应用

    线程首先确保ThreadId的正确性,没有正确的ThreadId则不会保存。接着,系统会将消息类型设置为草稿(Draft)并写入数据库。同时,由于一个Thread中只能存在一个草稿,因此保存新的短信草稿时会删除原有的彩信草稿。 ...

    Avro (অভ্র) for Chrome-crx插件

    不论您在草稿中写或保存的内容如何,​​都不要离开浏览器,除非您愿意 -草稿仅保存在本地计算机上,不会发送到任何地方 -它不会收集您的任何个人信息,包括您的IP地址。甚至没有将分析代码明确地放入代码中 -它是...

    CCF NOIP竞赛须知

    - **竞赛用品**:考场提供草稿纸,必要时可向监考老师请求补充 ### 总结 CCF NOIP是一项面向全国青少年的信息学奥林匹克竞赛活动,旨在选拔和培养优秀的计算机科学人才。从报名到竞赛的各个环节都有着严格的规定和...

    fex-team.github.io.zip

    需要注意的是草稿不会出现在首页列表中,如果想本地预览草稿效果,可以加 --drafts 参数,如下所示: jekyll serve --watch --drafts 个人信息 每篇文章都会附上个人相关信息,所以请先编辑 _data\authors.yml ...

    Perl quick reference card

    - **文档状态**: 草稿版 - **检查更新**: [http://johnbokma.com/perl/](http://johnbokma.com/perl/) #### 转义字符 Perl 支持多种转义序列来表示特殊字符或控制字符: | 转义序列 | 描述 | |----------|---------...

    三年级下册数学教师家长会PPT学习教案.pptx

    - 计算错误频繁:基础计算技能不过关,抄错题、漏写答案等。 - 不良的学习习惯:不做草稿或草稿不规范,作业完成质量参差不齐,有的学生依赖性强,错题不及时纠正。 4. **测验中存在的问题**: - 基础知识掌握不...

    小学一年级语文看图写话训练.doc

    对于不会写的字,允许使用拼音,这是培养拼读能力和自我学习能力的一种方式。 4. 情感教育:如第三幅图中描述的情境,可能涉及友谊、互助、尊重自然的主题。通过这些故事,孩子们可以学习到良好的道德品质和社会...

    行业文档-设计装置-一种书写辅助工具.zip

    这可能涉及到人体工程学的应用,确保工具在长时间使用时不会引起不适。 2. **技术实现**:该工具可能采用了传感器技术,如压力感应、运动追踪等,来捕捉使用者的书写动作。同时,可能还利用了无线传输技术,如蓝牙...

    2022年- 考试技巧.pptx

    - 试题本可以用于打草稿,但不能在答题纸或答题卡上做任何与答题无关的标记,否则答题卡将被作废。 - 准备好所有考试必需品,如黑色墨水笔、橡皮、计算器等,并确保提前完成火车票、酒店预订,核算检测以及健康码...

    四川省遂宁市2021-2022学年高二上学期期末统考试题 地理 Word版含答案.docx

    - 超出答题区域的答案视为无效,所有答案均需写在答题卡上,草稿纸上的答案不计分。 - **应试技巧**: - 仔细阅读题目要求,确保理解题目的含义。 - 合理分配答题时间,先解答较为熟悉的问题。 - 对于不确定的...

    烤鸭的Source Insight学习笔记.doc

    - **作用:** 输入函数并回车后,"{”不会自动缩进,而是与函数名称对齐。 - **适用场景:** 适用于函数定义或其他需要保持一致缩进格式的代码段。 ##### 2. TAB 与空格替换 - **路径:** Options 菜单 &gt; Document ...

    协同OA办公管理系统介绍文档.docx

    - **写邮件**: 提供撰写新邮件的功能。 - **添加收件人**: 可通过部门、角色或自定义组选择收件人。 - **附件功能**: 允许用户上传任意数量的附件,并支持在线编辑Office文档。 - **外部邮件**: 可向外部互联网...

Global site tag (gtag.js) - Google Analytics