?? sets.at
字號:
# Exercising Bison Grammar Sets. -*- Autotest -*-# Copyright (C) 2001, 2002 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_EXTRACT_SETS(INPUT, OUTPUT)# ------------------------------# Extract the information about the grammar sets from a bison# trace output (INPUT), and save it in OUTPUT.# And remember, there is no alternation in portable sed.m4_define([AT_EXTRACT_SETS],[AT_DATA([extract.sed],[[#n/^NULLABLE$/ { :null p n /^[ ]*$/ !b null}/^FIRSTS$/ { :firsts p n /^[ ]*$/ !b firsts}/^FDERIVES$/ { :fderiv p n /^[ ]*$/ !b fderiv}/^DERIVES$/ { :deriv p n /^[ ]*$/ !b deriv}]])AT_CHECK([sed -f extract.sed $1], 0, [stdout])AT_CHECK([mv stdout $2])])AT_BANNER([[Grammar Sets (Firsts etc.).]])## ---------- #### Nullable. #### ---------- ##AT_SETUP([Nullable])# At some point, nullable had been smoking grass, and managed to say:## Entering set_nullable# NULLABLE# 'e': yes# (null): no# ...AT_DATA([[input.y]],[[%%e: 'e' | /* Nothing */;]])AT_CHECK([[bison --trace=sets input.y]], [], [], [stderr])AT_EXTRACT_SETS([stderr], [sets])AT_CHECK([[cat sets]], [],[[DERIVES $accept derives 0 e $end e derives 1 'e' 2 /* empty */NULLABLE $accept: no e: yesFIRSTS $accept firsts $accept e e firsts eFDERIVES $accept derives 0 e $end 1 'e' 2 /* empty */ e derives 1 'e' 2 /* empty */]])AT_CLEANUP## ---------------- #### Broken Closure. #### ---------------- ### TC was once broken during a massive `simplification' of the code.# It resulted in bison dumping core on the following grammar (the# computation of FIRSTS uses TC). It managed to produce a pretty# exotic closure:## TC: Input## 01234567# +--------+# 0| 1 |# 1| 1 |# 2| 1 |# 3| 1 |# 4| 1 |# 5| 1 |# 6| 1|# 7| |# +--------+## TC: Output## 01234567# +--------+# 0| 1 |# 1| 111 |# 2| 111 |# 3| 1111 |# 4| 111 1 |# 5| 111 1 |# 6| 111 1|# 7| 111 |# +--------+## instead of that below.AT_SETUP([Broken Closure])AT_DATA([input.y],[[%%a: b;b: c;c: d;d: e;e: f;f: g;g: h;h: 'h';]])AT_CHECK([[bison --trace=sets input.y]], [], [], [stderr])AT_CHECK([[sed -n 's/[ ]*$//;/^RTC: Firsts Output BEGIN/,/^RTC: Firsts Output END/p' stderr]], [],[[RTC: Firsts Output BEGIN 012345678 .---------. 0|111111111| 1| 11111111| 2| 1111111| 3| 111111| 4| 11111| 5| 1111| 6| 111| 7| 11| 8| 1| `---------'RTC: Firsts Output END]])AT_CLEANUP## -------- #### Firsts. #### -------- ##AT_SETUP([Firsts])AT_DATA([input.y],[[%nonassoc '<' '>'%left '+' '-'%right '^' '='%%exp: exp '<' exp | exp '>' exp | exp '+' exp | exp '-' exp | exp '^' exp | exp '=' exp | "exp" ;]])AT_CHECK([[bison --trace=sets input.y]], [], [], [stderr])AT_EXTRACT_SETS([stderr], [sets])AT_CHECK([[cat sets]], [],[[DERIVES $accept derives 0 exp $end exp derives 1 exp '<' exp 2 exp '>' exp 3 exp '+' exp 4 exp '-' exp 5 exp '^' exp 6 exp '=' exp 7 "exp"NULLABLE $accept: no exp: noFIRSTS $accept firsts $accept exp exp firsts expFDERIVES $accept derives 0 exp $end 1 exp '<' exp 2 exp '>' exp 3 exp '+' exp 4 exp '-' exp 5 exp '^' exp 6 exp '=' exp 7 "exp" exp derives 1 exp '<' exp 2 exp '>' exp 3 exp '+' exp 4 exp '-' exp 5 exp '^' exp 6 exp '=' exp 7 "exp"]])AT_CLEANUP
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -