📄 ada语法.c
字号:
发信人: InfoMagic (好好学习 天天向上), 信区: PUE
标 题: ada 语法
发信站: 武汉白云黄鹤站 (2001年05月23日22:54:23 星期三), 站内信件
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of shell archive."
# Contents: Makefile ada.l ada.y main.c rw.c yyerror.c
# Wrapped by marshall@angora on Sun May 6 09:35:24 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'Makefile' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Makefile'\"
else
echo shar: Extracting \"'Makefile'\" \(396 characters\)
sed "s/^X//" >'Makefile' <<'END_OF_FILE'
XOBJS = \
X y.tab.o \
X main.o \
X rw.o \
X yyerror.o
X
XCFLAGS = -g
X
X.c.o:
X cc -c $(CFLAGS) $*.c
X
Xall: ada_syntax
X
Xada_syntax: $(OBJS)
X cc -o ada_syntax $(CFLAGS) $(OBJS) -ll
X
Xclean:
X rm -f lex.yy.c lex.yy.o y.tab.c y.tab.h yacc.acts yacc.tmp
X rm -f ada_syntax $(OBJS) core
X
Xlex.yy.c: ada.l
X lex ada.l
X
Xy.tab.h: ada.y
X yacc -d ada.y
Xy.tab.o: lex.yy.c y.tab.h
X cc -w -c $(CFLAGS) y.tab.c
X
Xrw.o: y.tab.h
END_OF_FILE
if test 396 -ne `wc -c <'Makefile'`; then
echo shar: \"'Makefile'\" unpacked with wrong size!
fi
# end of 'Makefile'
fi
if test -f 'ada.l' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'ada.l'\"
else
echo shar: Extracting \"'ada.l'\" \(2605 characters\)
sed "s/^X//" >'ada.l' <<'END_OF_FILE'
X%{
X#include "y.tab.h"
X
Xextern int yylineno;
Xextern void exit();
X
Xstatic int last_token;
X%}
X
XA [a-zA-Z]
XD [0-9]
XH [a-fA-F0-9]
XE [Ee][+-]?{D}(_?{D})*
X
X%%
X
X"&" { last_token = '&'; return '&'; }
X"(" { last_token = '('; return '('; }
X")" { last_token = ')'; return ')'; }
X"*" { last_token = '*'; return '*'; }
X"+" { last_token = '+'; return '+'; }
X"," { last_token = ','; return ','; }
X"-" { last_token = '-'; return '-'; }
X"." { last_token = '.'; return '.'; }
X"/" { last_token = '/'; return '/'; }
X":" { last_token = ':'; return ':'; }
X";" { last_token = ';'; return ';'; }
X"<" { last_token = '<'; return '<'; }
X"=" { last_token = '='; return '='; }
X">" { last_token = '>'; return '>'; }
X"!" | /* alternate character */
X"|" { last_token = '|'; return '|'; }
X
X"**" { last_token = EXP_; return EXP_; }
X".." { last_token = DBLDOT_; return DBLDOT_; }
X"/=" { last_token = NOTEQL_; return NOTEQL_; }
X":=" { last_token = ASSIGN_; return ASSIGN_; }
X"<<" { last_token = L_LBL_; return L_LBL_; }
X"<=" { last_token = LTEQ_; return LTEQ_; }
X"<>" { last_token = BOX_; return BOX_; }
X"=>" { last_token = ARROW_; return ARROW_; }
X">=" { last_token = GTEQL_; return GTEQL_; }
X">>" { last_token = R_LBL_; return R_LBL_; }
X
X"'" {
X /* is it an attribute tic? */
X switch ( last_token ) {
X case ')' :
X case ALL_ :
X case identifier :
X case string_literal :
X case character_literal :
X last_token = '\'';
X return '\'';
X default :
X ;
X }
X
X /* must be a character literal */
X {
X int c = input();
X
X if ( c != '\n' ) {
X c = input();
X
X if ( c == '\'' ) {
X last_token = character_literal;
X return character_literal;
X } else {
X fprintf( stderr,
X "malformed character literal on line %d\n",
X ( c != '\n' ) ? yylineno : --yylineno );
X
X exit( 1 );
X }
X } else {
X fprintf( stderr, "malformed character literal on line %d\n", --yyline
no );
X
X exit( 1 );
X }
X }
X}
X
X{A}(_?({A}|{D}))* {
X extern char yytext[];
X extern int reserved_word();
X
X last_token = reserved_word( yytext );
X return last_token;
X}
X
X{D}(_?{D})*([.]{D}(_?{D})*)?({E})? |
X{D}(_?{D})*:{H}(_?{H})*([.]{H}(_?{H})*)?:({E})? | /* alternate characte
r */
X{D}(_?{D})*#{H}(_?{H})*([.]{H}(_?{H})*)?#({E})? {
X last_token = numeric_literal;
X return numeric_literal;
X}
X
X\%([^%"]|\%\%)*\% | /* alternate character */
X\"([^"]|\"\")*\" {
X last_token = string_literal;
X return string_literal;
X}
X
X"--".* ;
X[ \f\n\r\t\v] ;
X
X. {
X fprintf( stderr, "illegal character on line %d\n", yylineno );
X
X exit( 1 );
X}
END_OF_FILE
if test 2605 -ne `wc -c <'ada.l'`; then
echo shar: \"'ada.l'\" unpacked with wrong size!
fi
# end of 'ada.l'
fi
if test -f 'ada.y' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'ada.y'\"
else
echo shar: Extracting \"'ada.y'\" \(19965 characters\)
sed "s/^X//" >'ada.y' <<'END_OF_FILE'
X%{
X#include "lex.yy.c"
X%}
X
X%token ABORT_ ABS_ ACCEPT_ ACCESS_ ALL_ AND_ ARRAY_ AT_
X%token BEGIN_ BODY_
X%token CASE_ CONSTANT_
X%token DECLARE_ DELAY_ DELTA_ DIGITS_ DO_
X%token ELSE_ ELSIF_ END_ ENTRY_ EXCEPTION_ EXIT_
X%token FOR_ FUNCTION_
X%token GENERIC_ GOTO_
X%token IF_ IN_ IS_
X%token LIMITED_ LOOP_
X%token MOD_
X%token NEW_ NOT_ NULL_
X%token OF_ OR_ OTHERS_ OUT_
X%token PACKAGE_ PRAGMA_ PRIVATE_ PROCEDURE_
X%token RAISE_ RANGE_ RECORD_ REM_ RENAMES_ RETURN_ REVERSE_
X%token SELECT_ SEPARATE_ SUBTYPE_
X%token TASK_ TERMINATE_ THEN_ TYPE_
X%token USE_
X%token WHEN_ WHILE_ WITH_
X%token XOR_
X
X%token identifier numeric_literal string_literal character_literal
X%token ARROW_ DBLDOT_ EXP_ ASSIGN_ NOTEQL_ GTEQL_ LTEQ_ L_LBL_ R_LBL_ BOX_
X
X%start compilation
X
X%%
X/* 2.8 */
Xprag : PRAGMA_ identifier .arg_ascs ';';
X
Xarg_asc :
X expr |
X identifier ARROW_ expr;
X
X
X/* 3.1 */
Xbasic_d :
X object_d |
X ty_d |
X subty_d |
X subprg_d |
X pkg_d |
X task_d |
X gen_d |
X excptn_d |
X gen_inst |
X renaming_d |
X number_d |
X error ';';
X
X
X/* 3.2 */
Xobject_d :
X idents ':' subty_ind ._ASN_expr. ';' |
X idents ':' CONSTANT_ subty_ind ._ASN_expr. ';' |
X idents ':' c_arr_def ._ASN_expr. ';' |
X idents ':' CONSTANT_ c_arr_def ._ASN_expr. ';';
X
Xnumber_d : idents ':' CONSTANT_ ASSIGN_ expr ';';
X
Xidents : identifier ...ident..;
X
X
X/* 3.3.1 */
Xty_d :
X full_ty_d |
X incomplete_ty_d |
X priv_ty_d;
X
Xfull_ty_d :
X TYPE_ identifier IS_ ty_def ';' |
X TYPE_ identifier discr_part IS_ ty_def ';';
X
Xty_def :
X enum_ty_def |
X integer_ty_def |
X real_ty_def |
X array_ty_def |
X rec_ty_def |
X access_ty_def |
X derived_ty_def;
X
X
X/* 3.3.2 */
Xsubty_d : SUBTYPE_ identifier IS_ subty_ind ';';
X
Xsubty_ind : ty_mk .constrt.;
X
Xty_mk : expanded_n;
X
Xconstrt :
X rng_c |
X fltg_point_c |
X fixed_point_c |
X aggr;
X
X
X/* 3.4 */
Xderived_ty_def : NEW_ subty_ind;
X
X
X/* 3.5 */
Xrng_c : RANGE_ rng;
X
Xrng :
X name |
X sim_expr DBLDOT_ sim_expr;
X
X
X/* 3.5.1 */
Xenum_ty_def : '(' enum_lit_spec ...enum_lit_spec.. ')';
X
Xenum_lit_spec : enum_lit;
X
Xenum_lit :
X identifier |
X character_literal;
X
X
X/* 3.5.4 */
Xinteger_ty_def : rng_c;
X
X
X/* 3.5.6 */
Xreal_ty_def :
X fltg_point_c |
X fixed_point_c;
X
X
X/* 3.5.7 */
Xfltg_point_c : fltg_accuracy_def .rng_c.;
X
Xfltg_accuracy_def : DIGITS_ sim_expr;
X
X
X/* 3.5.9 */
Xfixed_point_c : fixed_accuracy_def .rng_c.;
X
Xfixed_accuracy_def : DELTA_ sim_expr;
X
X
X/* 3.6 */
Xarray_ty_def :
X uncnstrnd_array_def |
X c_arr_def;
X
Xuncnstrnd_array_def : ARRAY_ '(' idx_subty_def ...idx_subty_def.. ')' OF_ s
ubty_ind;
X
Xc_arr_def : ARRAY_ idx_c OF_ subty_ind;
X
Xidx_subty_def : name RANGE_ BOX_;
X
Xidx_c : '(' dscr_rng ...dscr_rng.. ')';
X
Xdscr_rng :
X rng |
X name rng_c;
X
X
X/* 3.7 */
Xrec_ty_def :
X RECORD_
X cmpons
X END_ RECORD_;
X
Xcmpons :
X ..prag.. ..cmpon_d.. cmpon_d ..prag.. |
X ..prag.. ..cmpon_d.. variant_part ..prag.. |
X ..prag.. NULL_ ';' ..prag..;
X
Xcmpon_d : idents ':' cmpon_subty_def ._ASN_expr. ';';
X
Xcmpon_subty_def : subty_ind;
X
X
X/* 3.7.1 */
Xdiscr_part : '(' discr_spec ...discr_spec.. ')';
X
Xdiscr_spec : idents ':' ty_mk ._ASN_expr.;
X
X
X/* 3.7.2 */
X
X/*
X * included under aggr
X *
X * discr_c : '(' discr_asc ... discr_asc.. ')';
X * discr_asc : .discr_sim_n ..or_discrim_sim_n.. ARROW. expression;
X */
X
X/* 3.7.3 */
Xvariant_part :
X CASE_ sim_n IS_
X ..prag.. variant ..variant..
X END_ CASE_ ';';
X
Xvariant :
X WHEN_ choice ..or_choice.. ARROW_
X cmpons;
X
Xchoice :
X sim_expr |
X name rng_c |
X sim_expr DBLDOT_ sim_expr |
X OTHERS_;
X
X
X/* 3.8 */
Xaccess_ty_def : ACCESS_ subty_ind;
X
X
X/* 3.8.1 */
Xincomplete_ty_d :
X TYPE_ identifier ';' |
X TYPE_ identifier discr_part ';';
X
X
X/* 3.9 */
Xdecl_part :
X ..basic_decl_item.. |
X ..basic_decl_item.. body ..later_decl_item..;
X
Xbasic_decl_item :
X basic_d |
X rep_cl |
X use_cl;
X
Xlater_decl_item :
X body |
X subprg_d |
X pkg_d |
X task_d |
X gen_d |
X use_cl |
X gen_inst;
X
Xbody :
X proper_body |
X body_stub;
X
Xproper_body :
X subprg_body |
X pkg_body |
X task_body;
X
X
X/* 4.1 */
Xname :
X sim_n |
X character_literal |
X op_symbol |
X idxed_cmpon |
X selected_cmpon |
X attribute;
X
Xsim_n : identifier;
X
Xprefix : name;
X
X
X/* 4.1.1 */
Xidxed_cmpon : prefix aggr;
X
X
X/* 4.1.2 */
X
X/*
X * included under idxed_cmpon
X *
X * slice : prefix '(' dscr_rng ')';
X */
X
X
X/* 4.1.3 */
Xselected_cmpon : prefix '.' selector;
X
Xselector :
X sim_n |
X character_literal |
X op_symbol |
X ALL_;
X
X
X/* 4.1.4 */
X/* prefix can be an attribute, idxed cmpon, slice, or subprg call. */
Xattribute : prefix '\'' attribute_designator;
X
Xattribute_designator :
X sim_n |
X DIGITS_ |
X DELTA_ |
X RANGE_;
X
X
X/* 4.3 */
Xaggr : '(' cmpon_asc ...cmpon_asc.. ')';
X
Xcmpon_asc :
X expr |
X choice ..or_choice.. ARROW_ expr |
X sim_expr DBLDOT_ sim_expr |
X name rng_c;
X
X
X/* 4.4 */
Xexpr :
X rel..AND__rel.. |
X rel..AND__THEN__rel.. |
X rel..OR__rel.. |
X rel..OR__ELSE__rel.. |
X rel..XOR__rel..;
X
Xrel :
X sim_expr .relal_op__sim_expr. |
X sim_expr.NOT.IN__rng_or_sim_expr.NOT.IN__ty_mk;
X
Xsim_expr : .unary_add_op.term..binary_add_op__term..;
X
Xterm : factor..mult_op__factor..;
X
Xfactor :
X pri ._EXP___pri. |
X ABS_ pri |
X NOT_ pri;
X
Xpri :
X numeric_literal |
X NULL_ |
X allocator |
X qualified_expr |
X name |
X aggr;
X
X/* "'(' expr ')'" is included under aggr */
X
X
X/* 4.5 */
X
X/*
X * logical_op :
X * AND_
X * OR_
X * XOR_;
X *
X * This is an unused syntactic class.
X */
X
Xrelal_op :
X '=' |
X NOTEQL_ |
X '<' |
X LTEQ_ |
X '>' |
X GTEQL_;
X
Xbinary_add_op :
X '+' |
X '-' |
X '&';
X
Xunary_add_op :
X '+' |
X '-';
X
Xmult_op :
X '*' |
X '/' |
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -