⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 复件 my.cup

📁 非常好的编译源代码 将一个l语言转换为中间代码 java版本
💻 CUP
字号:
package parser;import java_cup.runtime.*;/****出错处理:*/parser code  {:   public void report_error(String message, Object info) {    StringBuffer m = new StringBuffer("Error ");    if (info instanceof java_cup.runtime.Symbol)       m.append( "("+info.toString()+")" );         m.append(" : "+message);       System.out.println(m);  }     public void report_fatal_error(String message, Object info) {    report_error(message, info);    throw new RuntimeException("Fatal Syntax Error");  }:};/****终结符 表*/terminal BOOLEAN; // primitive_typeterminal BYTE,   LONG,INTEGER,SHORT, CHAR; // integral_typeterminal FLOAT, REAL; // floating_point_typeterminal ARRAY,LBRACK, RBRACK; // array_typeterminal DOT; // qualified_nameterminal SEMICOLON, MULT, COMMA, LBRACE, RBRACE, EQ, LPAREN, RPAREN, COLON;terminal REPEAT,UNTIL;terminal PROGRAM ;terminal BEGIN,END; terminal VOID;  terminal CALL,PROCEDURE; terminal IF, ELSE,THEN; // if_then_statement, if_then_else_statementterminal SWITCH; // switch_statementterminal CASE, DEFAULT; // switch_labelterminal DO, WHILE; // while_statement, do_statementterminal FOR,TO; // for_statementterminal BREAK; // break_statementterminal CONTINUE; // continue_statementterminal RETURN; // return_statementterminal PLUSPLUS; // postincrement_expressionterminal MINUSMINUS; // postdecrement_expressionterminal PLUS, MINUS, COMP, NOT, DIV, MOD;terminal LSHIFT, RSHIFT; // shift_expressionterminal LT, GT, LTEQ, GTEQ; // relational_expressionterminal EQEQ, NOTEQ; // equality_expressionterminal AND; // and_expressionterminal XOR; // exclusive_or_expressionterminal OR;  // inclusive_or_expressionterminal ANDAND; // conditional_and_expressionterminal OROR; // conditional_or_expressionterminal QUESTION; // conditional_expressionterminal MULTEQ, DIVEQ, MODEQ, PLUSEQ, MINUSEQ; // assignment_operatorterminal LSHIFTEQ, RSHIFTEQ; // assignment_operatorterminal ANDEQ, XOREQ, OREQ,ASSIGN; // assignment_operatorterminal READ,WRITE;terminal java.lang.Number INTEGER_LITERAL;terminal java.lang.Number FLOATING_POINT_LITERAL;terminal java.lang.Boolean BOOLEAN_LITERAL;terminal java.lang.Character CHARACTER_LITERAL;terminal java.lang.String STRING_LITERAL;terminal java.lang.String IDENTIFIER; // nameterminal CONST, GOTO;/****非终结符 表*///  The Syntactic Grammarnon terminal goal;//  Lexical Structurenon terminal literal;//  Types, Values, and Variablesnon terminal type,  numeric_type;non terminal integral_type, floating_point_type;non terminal array_type,array_types;//  Namesnon terminal names;non terminal explanations,explanation;non terminal statements,statement,functionstatements,funinstatements;non terminal define,functionexplanation,functiondefine,variablexplanation,procedurexplanation,proceduredefine,funvariablexplanation;non terminal dims;non terminal parameters,parameter;non terminal inexplanations,inexplanation;non terminal if_then_statement;//  Expressionsnon terminal method_invocation, array_access;non terminal postfix_expression;non terminal postincrement_expression, postdecrement_expression;non terminal unary_expression, unary_expression_not_plus_minus;non terminal preincrement_expression, predecrement_expression;non terminal cast_expression;non terminal multiplicative_expression, additive_expression;non terminal shift_expression, relational_expression, equality_expression;non terminal and_expression, exclusive_or_expression, inclusive_or_expression;non terminal conditional_and_expression, conditional_or_expression;non terminal conditional_expression, assignment_expression;non terminal assignment;non terminal left_hand_side;non terminal assignment_operator;non terminal expression,expressions,statement_expression;non terminal call_list,call_lists;/****文法 :*/start with goal;// The Syntactic Grammargoal	::=	PROGRAM IDENTIFIER SEMICOLON explanations BEGIN statements END {:System.out.println("******************************************************程序分析完毕");:}	;//说明explanations	::=	explanation explanations 		|	{:System.out.println("*****************全局常量,函数,过程:声明完毕,定义,以下为 语句执行 :");:}		;explanation	::=	CONST type define  {:System.out.println("常量定义");:}		|	functionexplanation {:System.out.println("函数声明");:}		|	functiondefine {:System.out.println("********函数定义完毕");:}		|	variablexplanation 		|	procedurexplanation {:System.out.println("过程声明");:}		|	proceduredefine {:System.out.println("********过程定义完毕");:}		;//数组说明array_types	::=	array_type COMMA array_types 		|	array_type		;array_type ::=	IDENTIFIER LBRACK dims RBRACK  		;//数组维数dims	::=	INTEGER_LITERAL COMMA INTEGER_LITERAL	|	INTEGER_LITERAL	;//变量说明variablexplanation	::=	type COLON names SEMICOLON {:System.out.println("变量声明");:}			|	type COLON array_types SEMICOLON {:System.out.println("数组说明");:}			;//标志符表names	::=	IDENTIFIER COMMA names	|	IDENTIFIER	;//常量定义define	::=	IDENTIFIER EQ literal SEMICOLON define	|	IDENTIFIER EQ literal SEMICOLON	;//函数说明functionexplanation	::=	type IDENTIFIER LPAREN parameters RPAREN SEMICOLON			;//函数参数parameter		::=	type IDENTIFIER			;parameters		::=	parameter COMMA parameters			|	parameter			|				;funinstatements		::=	statements  RETURN expression SEMICOLON {:System.out.println("函数返回");:}			;functionstatements	::=	funinstatements functionstatements 			|	statements			;//函数定义functiondefine		::=	type IDENTIFIER LPAREN parameters RPAREN inexplanations BEGIN functionstatements END 			;//函数或过程内 说明inexplanations	::=	inexplanation	inexplanations 		|	{:System.out.println("*****函数(过程)内说明完毕,以下为函数过程内语句执行:");:}		;inexplanation	::=	CONST	define SEMICOLON {:System.out.println("函数(过程)内常量定义");:}		|	funvariablexplanation 		;funvariablexplanation	::=	type COLON names SEMICOLON {:System.out.println("函数(过程)内变量声明");:}			|	type COLON array_types SEMICOLON {:System.out.println("函数(过程)内数组说明");:}			;//过程说明procedurexplanation	::=	PROCEDURE IDENTIFIER SEMICOLON			;//过程定义proceduredefine	::=	PROCEDURE IDENTIFIER inexplanations BEGIN statements END		;//语句说明statements	::=	statement  statements 		|	 		;	if_then_statement	::=	IF expression THEN statement			;statement_expression	::=			assignment  {:System.out.println("赋值语句");:}	|	preincrement_expression {:System.out.println("++表达式");:}	|	predecrement_expression {:System.out.println("--表达式");:}	|	postincrement_expression {:System.out.println("表达式++");:}	|	postdecrement_expression {:System.out.println("表达式--");:}	|	method_invocation {:System.out.println("函数调用");:}	|	CALL IDENTIFIER {:System.out.println("过程调用");:}	;statement	::=	statement_expression SEMICOLON  		|	if_then_statement {:System.out.println("if语句");:}		|	if_then_statement ELSE statement {:System.out.println("if else语句");:}		|	WHILE expression DO statement {:System.out.println("while语句");:}		|	REPEAT statements UNTIL expression SEMICOLON {:System.out.println("repeat 语句");:}		|	FOR  IDENTIFIER ASSIGN expression TO expression DO statement {:System.out.println("for 语句");:}		|	BEGIN statements END {:System.out.println("语句块");:}		|	READ names SEMICOLON {:System.out.println("read 语句");:}		|	WRITE expressions SEMICOLON {:System.out.println("write 语句");:}		|	SEMICOLON {:System.out.println("分号");:}		;/****表达式*/expressions	::=	expression		|	expression SEMICOLON expressions		;//函数,数组 参数列表call_lists	::=	call_list		|	call_list SEMICOLON call_lists		|		;call_list	::=	expression		;method_invocation	::=	IDENTIFIER LPAREN call_lists RPAREN			;		  array_access	::=	IDENTIFIER LBRACK call_lists RBRACK		;postfix_expression	::=	literal			|	method_invocation			|	array_access			|	IDENTIFIER			|	postincrement_expression			|	postdecrement_expression			;postincrement_expression	::=	postfix_expression PLUSPLUS				;postdecrement_expression	::=	postfix_expression MINUSMINUS				;unary_expression	::=	preincrement_expression			|	predecrement_expression			|	PLUS unary_expression			|	MINUS unary_expression			|	unary_expression_not_plus_minus			;preincrement_expression	::=	PLUSPLUS unary_expression			;predecrement_expression ::=	MINUSMINUS unary_expression			;unary_expression_not_plus_minus	::=	postfix_expression				|	NOT unary_expression				;multiplicative_expression	::=	unary_expression				|	multiplicative_expression MULT unary_expression				|	multiplicative_expression DIV unary_expression				|	multiplicative_expression MOD unary_expression				;additive_expression	::=	multiplicative_expression			|	additive_expression PLUS multiplicative_expression			|	additive_expression MINUS multiplicative_expression			;shift_expression	::=	additive_expression			|	shift_expression LSHIFT additive_expression			|	shift_expression RSHIFT additive_expression			;relational_expression ::=		shift_expression	|	relational_expression LT shift_expression	|	relational_expression GT shift_expression	|	relational_expression LTEQ shift_expression	|	relational_expression GTEQ shift_expression		;equality_expression ::=		relational_expression	|	equality_expression EQEQ relational_expression	|	equality_expression NOTEQ relational_expression	;and_expression ::=		equality_expression	|	and_expression AND equality_expression	;exclusive_or_expression ::=		and_expression	|	exclusive_or_expression XOR and_expression	;inclusive_or_expression ::=		exclusive_or_expression	|	inclusive_or_expression OR exclusive_or_expression	;conditional_and_expression ::=		inclusive_or_expression	|	conditional_and_expression ANDAND inclusive_or_expression	;conditional_or_expression ::=		conditional_and_expression	|	conditional_or_expression OROR conditional_and_expression	;conditional_expression ::=		conditional_or_expression	|	conditional_or_expression QUESTION expression 			COLON conditional_expression	;assignment_expression ::=		conditional_expression	|	assignment	;assignment ::=	left_hand_side assignment_operator assignment_expression	;left_hand_side ::=		IDENTIFIER	|	array_access	;assignment_operator ::=		ASSIGN	|	MULTEQ	|	DIVEQ	|	MODEQ	|	PLUSEQ	|	MINUSEQ	|	LSHIFTEQ	|	RSHIFTEQ	|	ANDEQ	|	XOREQ	|	OREQ	;expression ::=	assignment_expression {:System.out.println("表达式");:}	;/***基本元素*/literal ::=	INTEGER_LITERAL	|	FLOATING_POINT_LITERAL	|	BOOLEAN_LITERAL	|	CHARACTER_LITERAL	|	STRING_LITERAL	;type ::=		numeric_type	|	BOOLEAN	;numeric_type::=	integral_type	|	floating_point_type	;integral_type ::= 		BYTE 	|	SHORT 	|	INTEGER 	|	LONG 	|	CHAR 	;floating_point_type ::= 		FLOAT 	|	REAL	;//****************************************************************END	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -