使用javacc实现语法生成器(基于miniC语法)
来源:互联网 发布:简单无线mesh网络搭建 编辑:程序博客网 时间:2024/06/05 06:45
/********* WRITEN BY ZZG *********//******** DATE: 12,4,2017 ********//** * JJTree template file created by SF JavaCC plugin 1.5.28+ wizard for JavaCC 1.5.0+ */options{ static = true;}PARSER_BEGIN(MyNewGrammar)package test;import java.io.FileInputStream;import java.io.FileNotFoundException;public class MyNewGrammar{ public static void main(String args []) {FileInputStream fileStream;try { fileStream = new FileInputStream("test.c"); MyNewGrammar parser = new MyNewGrammar(fileStream); System.out.println("Reading from file ..."); try { SimpleNode rootNode = parser.Start(); rootNode.dump(" ");//抓取返回的语法树。 } catch (Exception e) { System.out.println("NOK."); System.out.println(e.getMessage()); } catch (Error e) { System.out.println("Oops."); System.out.println(e.getMessage()); } } catch (FileNotFoundException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} }}PARSER_END(MyNewGrammar)SKIP :{ " "| "\t"| "\n"| "\r"| < "//" (~[ "\n", "\r" ])* ( "\n" | "\r" | "\r\n" ) >| < "/*" (~[ "*" ])* "*" ( ~[ "/" ] (~[ "*" ])* "*" )* "/" >}TOKEN :{ < CONSTANT: ( <DIGIT> )+ >| < DIGIT: ["0" - "9"] >}TOKEN : /* LITERALS */{ < INTEGER_LITERAL : < DECIMAL_LITERAL > ([ "l", "L" ])? | < HEX_LITERAL > ([ "l", "L" ])? | < OCTAL_LITERAL > ([ "l", "L" ])? >| < #DECIMAL_LITERAL : [ "1"-"9" ] ([ "0"-"9" ])* >| < #HEX_LITERAL : "0" [ "x", "X" ] ([ "0"-"9", "a"-"f", "A"-"F" ])+ >| < #OCTAL_LITERAL : "0" ([ "0"-"7" ])* >}TOKEN : /* KEYWORDS */{ < MAIN : "main"> | < INT : "int"> | < VOID : "void"> | < IF:"if"> | < ELSE:"else" > | < WHILE:"while" > | < FOR:"for" > | < RETURN:"return">}TOKEN : /* OPERATORS */{ < PLUS:"+"> | < MINUS:"-"> | < MULTIPLY:"*"> | < DIVIDE:"/"> | < ASSIGN:"=">}TOKEN : /* RELATIONSHIPOPERATOR */{< LT:"<" > | < LE:"<=" > | < GT:">" > | < GE:"=>" > | < EQ:"==" > | < NE:"!=" > }TOKEN : /* IDENTIFIERS */{ < IDENTIFIER : < LETTER > ( < LETTER > | < DIGIT > )* >| < #LETTER : [ "_", "a"-"z", "A"-"Z" ] >}TOKEN:{ <LC:"("> | <RC:")"> | <LM:"["> | <RM:"]"> | <LB:"{"> | <RB:"}">}SimpleNode Start() :{}{ Expression() { return jjtThis; }}void Expression() :{}{ < INT >< MAIN >< LC >< RC >< LB > MainStatement() < RB >}void MainStatement():{}{Statement()//|(MainStatement())*}void Statement(): { }{ ( SequenceStatement()//顺序语句| IfStatement()//条件语句| While()//循环语句 )*}//顺序void SequenceStatement(): { }{(declaration()|copy()) ";"//声明和赋值}void declaration() : { }{//(< INT> < IDENTIFIER> ) (< INT> < IDENTIFIER> ("," < IDENTIFIER >)* < ASSIGN>< CONSTANT> )}void copy(): { }{< IDENTIFIER>< ASSIGN> (< CONSTANT>|< IDENTIFIER>)}//条件void IfStatement():{}{ < IF>< LC>Condition()< RC>< LB>(assign() ";")< RB> ElseStatement()}void ElseStatement(): { }{ < ELSE> (< LB> assign() ";" < RB>)|IfStatement()}void assign(): { }{< IDENTIFIER>< ASSIGN>(< CONSTANT>|< IDENTIFIER>)}void Condition() :{ }{expression() (< LT> expression()|< LE> expression()|< GT> expression()|< GE> expression()|< EQ> expression()|< NE> expression())}void expression(): { }{term()((< PLUS >|< MINUS > term()))* }void term(): { }{unary()(( < MULTIPLY >|< DIVIDE> ) unary())*}void unary() :{ }{< IDENTIFIER> | < CONSTANT>|< LC>expression()< RC>}//循环void While():{}{< WHILE>< LC>Condition()< RC>< LB>(copy()";")< RB>}
阅读全文
0 0
- 使用javacc实现语法生成器(基于miniC语法)
- 基于MiniC的语义分析(使用javacc)
- JavaCC语法分析器
- JavaCC、解析树和 XQuery 语法
- lucene javacc 语法解析器结构分析
- lemon语法分析器生成器
- PHP 生成器语法
- php 生成器语法
- JavaCC、解析树和 XQuery 语法第 1 部分
- JavaCC、解析树和 XQuery 语法,第 2 部分
- javacc jjtree 写法 以及 jj写法 基本语法 以及应用
- ES6学习——生成器(Generators):详细语法
- javacc使用
- 语法分析器 (基于预测分析表)
- 013 Python语法之文件与生成器
- 语法
- 语法
- 语法
- MSP430G2553 1602显示字符
- HttpWebRequest HttpClient
- LibZXing 二维码
- linux 安装LAMP环境(centos7.4)
- 系统自带导航栏的注意事项
- 使用javacc实现语法生成器(基于miniC语法)
- Android EventBus 源码解析
- 语义分割网址收集
- 自学Python之Scrapy爬虫:(一)爬虫基础
- DNS
- linux下如何实现mysql数据库每天自动备份定时备份
- RAC中的过滤方法
- Android8.0 修改默认音量
- TJA1050只能RX不能TX