📄 synclines.at
字号:
# Executing Actions. -*- Autotest -*-# Copyright (C) 2002, 2004 Free Software Foundation, Inc.# This program is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2, or (at your option)# any later version.# This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU General Public License for more details.# You should have received a copy of the GNU General Public License# along with this program; if not, write to the Free Software# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA# 02111-1307, USA.AT_BANNER([[User Actions.]])# AT_SYNCLINES_COMPILE(FILE)# --------------------------# Compile FILE expecting an error, and save in the file stdout the# normalized output. Ignore the exit status, since some compilers# (e.g. c89 on IRIX 6.5) triger warnings on `#error', instead of# errors.m4_define([AT_SYNCLINES_COMPILE],[AT_CHECK([$CC $CFLAGS $CPPFLAGS -c $1], [ignore], [], [stderr])# In case GCC displays column information, strip it down.## input.y:4:2: #error "4" or input.y:4.2: #error "4"# =># input.y:4: #error "4"#AT_CHECK([[sed 's/^\([^:]*:[^:.]*\)[.:][^:]*:\(.*\)$/\1:\2/' stderr]], 0, [stdout])])# AT_TEST_SYNCLINE(TITLE, INPUT, ERROR-MSG)# -----------------------------------------# Check that compiling the parser produced from INPUT cause GCC# to issue ERROR-MSG.m4_define([AT_TEST_SYNCLINE],[AT_SETUP([$1])# It seems impossible to find a generic scheme to check the location# of an error. Even requiring GCC is not sufficient, since for instance# the version modified by Apple:## | Reading specs from /usr/libexec/gcc/darwin/ppc/2.95.2/specs# | Apple Computer, Inc. version gcc-934.3, based on gcc version 2.95.2# | 19991024 (release) configure:2124: $? = 0## instead of:## | input.y:2: #error "2"## it reports:## | input.y:2: "2"# | cpp-precomp: warning: errors during smart preprocessing, retrying in basic modeAT_DATA([syncline.c],[[#error "1"]])AT_SYNCLINES_COMPILE([syncline.c])AT_CHECK([[test "`cat stdout`" = 'syncline.c:1: @%:@error "1"' || exit 77]])AT_DATA([[input.y]], [$2])AT_CHECK([bison -o input.c input.y])AT_SYNCLINES_COMPILE([input.c])AT_CHECK([cat stdout], 0, [$3])AT_CLEANUP])## --------------------- #### Prologue synch line. #### --------------------- ##AT_TEST_SYNCLINE([Prologue synch line],[[%{#error "2"void yyerror (const char *s);int yylex (void);%}%%exp: '0';]],[input.y:2: #error "2"])## ------------------- #### %union synch line. #### ------------------- ##AT_TEST_SYNCLINE([%union synch line],[[%union {#error "2" char dummy;}%{void yyerror (const char *s);int yylex (void);%}%%exp: '0';]],[input.y:2: #error "2"])## ------------------------- #### Postprologue synch line. #### ------------------------- ##AT_TEST_SYNCLINE([Postprologue synch line],[[%{void yyerror (const char *s);int yylex (void);%}%union{ int ival;}%{#error "10"%}%%exp: '0';]],[input.y:10: #error "10"])## ------------------- #### Action synch line. #### ------------------- ##AT_TEST_SYNCLINE([Action synch line],[[%{void yyerror (const char *s);int yylex (void);%}%%exp:{#error "8"};]],[input.y:8: #error "8"])## --------------------- #### Epilogue synch line. #### --------------------- ##AT_TEST_SYNCLINE([Epilogue synch line],[[%{void yyerror (const char *s);int yylex (void);%}%%exp: '0';%%#error "8"]],[input.y:8: #error "8"])
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -