זוהי הפקודה bcposix שניתן להפעיל בספק האירוח החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות המרובות שלנו, כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS
תָכְנִית:
שֵׁם
bc - שפה אריתמטית בעלת דיוק שרירותי
תַקצִיר
bc [−ל] [פילה...]
תיאור
השמיים bc השירות יישם מחשבון דיוק שרירותי. זה ייקח קלט מ
כל הקבצים שניתנו, ולאחר מכן קרא מהקלט הסטנדרטי. אם הקלט הסטנדרטי והתקן
פלט אל bc מחוברים לטרמינל, הקריאה של bc ייחשב ככזה
אינטראקטיבי, הגורם לאילוצי התנהגות המתוארים בסעיפים הבאים.
אפשרויות
השמיים bc כלי השירות יתאים לנפח הגדרות הבסיס של POSIX.1-2008, סעיף 12.2,
שירות תחביר הנחיות.
האפשרות הבאה תהיה נתמכת:
−ל (האות ell.) הגדירו את הפונקציות המתמטיות ואתחול סולם עד 20, במקום זאת
של אפס ברירת המחדל; עיין בסעיף תיאור מורחב.
אופרנדים
האופרנד הבא יהיה נתמך:
פילה שם נתיב של קובץ טקסט המכיל bc הצהרות התוכנית. אחרי הכל פילהיש
נקרא, bc יקרא את הקלט הסטנדרטי.
STDIN
עיין בסעיף קבצי קלט.
קלט קבצים
קבצי קלט יהיו קבצי טקסט המכילים רצף של הערות, הצהרות ו
הגדרות פונקציות שיבוצעו תוך כדי קריאתן.
הסביבה וריאציות
משתני הסביבה הבאים ישפיעו על הביצוע של bc:
שפה ספק ערך ברירת מחדל עבור משתני הבינאום שאינם מוגדרים או
ריק. (ראה את הכרך של הגדרות הבסיס של POSIX.1-2008, סעיף 8.2,
בינאום משתנים בעד הבכורה של בינאום
משתנים המשמשים לקביעת הערכים של קטגוריות מקומיות.)
LC_ALL אם מוגדר לערך מחרוזת לא ריקה, עוקף את הערכים של כל האחרים
משתני בינאום.
LC_CTYPE קבע את המקום לפרשנות של רצפים של בתים של נתוני טקסט
כתווים (לדוגמה, בייט בודד לעומת תווים מרובי בייטים ב
ארגומנטים וקבצי קלט).
LC_MESSAGES
קבע את המקום שבו יש להשתמש כדי להשפיע על הפורמט והתוכן של
הודעות אבחון שנכתבו לפי שגיאת תקן.
NLSPATH קבע את המיקום של קטלוגי הודעות לעיבוד של LC_MESSAGES.
אסינכרוני אירועים
בְּרִירַת מֶחדָל.
STDOUT
התפוקה של bc השירות יהיה נשלט על ידי קריאת התוכנית, ומורכב מאפס
או יותר שורות המכילות את הערך של כל הביטויים המבוצעים ללא הקצאות. ה
הרדיוס והדיוק של הפלט יהיו נשלטים על ידי ערכי ה- בּוֹס ו סולם
משתנים; עיין בסעיף תיאור מורחב.
STDERR
השגיאה הסטנדרטית תשמש רק עבור הודעות אבחון.
תפוקה קבצים
אין.
מורחבים תיאור
דקדוק
הדקדוק בסעיף זה והמוסכמות המילוניות בסעיף הבא יהיו
יחד לתאר את התחביר עבור bc תוכניות. המוסכמות הכלליות לסגנון זה של
דקדוק מתואר ב סעיף 1.3, דקדוק אמנות. תוכנית חוקית יכולה להיות
מיוצג כסמל הלא-טרמינלי התוכנית בדקדוק. תחביר פורמלי זה יהיה
עדיפות על תיאור תחביר הטקסט.
%אֲסִימוֹן EOF שורה חדשה STRING מִכְתָב מספר
%token MUL_OP
/* '*', '/', '%' */
%token ASSIGN_OP
/* '=', '+=', '−=', '*=', '/=', '%=', '^=' */
%token REL_OP
/* '==', '<=', '>=', '!=', '<', '>' */
%token INCR_DECR
/* '++', '−−' */
%token הגדר את משך הפסקת הפסקה
/* 'הגדיר', 'הפסק', 'צא', 'אורך' */
%token Return For If While Sqrt
/* 'return', 'for', 'if', 'while', 'sqrt' */
%token Scale Ibase Obase Auto
/* 'scale', 'ibase', 'obase', 'auto' */
%התחל את התוכנית
%%
תוכנית: EOF
| תוכנית input_item
;
input_item : נקודה-פסיק NEWLINE
| פוּנקצִיָה
;
semicolon_list : /* ריק */
| הַצהָרָה
| ';' הַצהָרָה
| ';'
;
statement_list : /* ריק */
| הַצהָרָה
| statement_list NEWLINE
| statement_list הצהרת NEWLINE
| statement_list ';'
| statement_list ';' הַצהָרָה
;
אמירה: ביטוי
| חוּט
| לשבור
| לְהַפְסִיק
| לַחֲזוֹר
| החזר '(' return_expression ')'
| עבור '(' ביטוי ';'
ביטוי_יחסי ';'
ביטוי ')'
| אם הצהרת '(' ביטוי_יחסי ')'
| בעוד הצהרת '(' ביטוי_יחסי ')'
| '{' statement_list '}'
;
function : הגדר את LETTER '(' opt_parameter_list ')'
'{' NEWLINE opt_auto_define_list
statement_list '}'
;
opt_parameter_list : /* ריק */
| parameter_list
;
parameter_list : LETTER
| define_list ',' LETTER
;
opt_auto_define_list : /* ריק */
| Auto define_list NEWLINE
| Auto define_list ';'
;
define_list : LETTER
| אות '[' ']'
| define_list ',' LETTER
| define_list ',' LETTER '[' ']'
;
opt_argument_list : /* ריק */
| רשימה_ארגומנטים
;
argument_list : ביטוי
| LETTER '[' ']' ',' argument_list
;
ביטוי_יחסי: ביטוי
| ביטוי REL_OP ביטוי
;
return_expression: /* ריק */
| ביטוי
;
ביטוי: ביטוי בשם
| מספר
| '(' ביטוי ')'
| LETTER '(' opt_argument_list ')'
| ביטוי '-'
| ביטוי '+'
| ביטוי '−'
| ביטוי MUL_OP ביטוי
| ביטוי '^'
| INCR_DECR name_expression
| ביטוי בשם INCR_DECR
| named_expression ASSIGN_OP ביטוי
| אורך '(' ביטוי ')'
| Sqrt '(' ביטוי ')'
| קנה מידה '(' ביטוי ')'
;
named_expression : LETTER
| אות '[' ביטוי ']'
| סוּלָם
| איבייס
| אובס
;
לֵקסִיקָלִי אמנות in bc
המוסכמות המילוניות עבור bc תוכניות, ביחס לדקדוק הקודם, יהיו
באופן הבא:
1. למעט כפי שצוין, bc יזהה את התחלת האסימון או המפריד הארוך ביותר האפשרי
בנקודה נתונה.
2. הערה תהיה מורכבת מכל תווים שמתחילים בשני התווים הסמוכים
"/*" והסתיים בהופעה הבאה של שני התווים הסמוכים "*/".
להערות לא תהיה השפעה פרט לתיחום אסימונים מילוניים.
3. ה יוכר כאסימון שורה חדשה.
4. האסימון STRING ייצג קבוע מחרוזת; זה יהיה מורכב מכל תווים
מתחיל עם המירכאה הכפולה ('"') והופסק על ידי אירוע אחר
של תו המרכאות הכפולות. הערך של המחרוזת הוא הרצף של כולם
תווים בין, אך לא כולל, שתי התווים במירכאות כפולות. כל הדמויות
יילקח מילולית מהקלט, ואין דרך לציין מחרוזת
המכיל תו מרכאות כפולות. אורך הערך של כל מחרוזת יהיה
מוגבל ל-{BC_STRING_MAX} בייטים.
5. א לא תהיה השפעה אלא כתו רגיל אם הוא מופיע בתוך a
STRING אסימון, או לתחום אסימון מילוני מלבד STRING.
6. השילוב של א תו מיד ואחריו א יהיה
אין להם שום השפעה מלבד לתחום אסימונים מילוניים עם החריגים הבאים:
* זה יתפרש כרצף התווים "\ " in STRING אסימונים.
* יש להתעלם ממנו כחלק מרב-קו מספר אֲסִימוֹן.
7. האסימון מספר ייצג קבוע מספרי. זה יוכר על ידי ה
הדקדוק הבא:
מספר : מספר שלם
| '.' מספר שלם
| מספר שלם '.'
| מספר שלם '.' מספר שלם
;
מספר שלם: ספרה
| ספרה שלמה
;
ספרה: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
| 8 | 9 | א | ב | ג | ד | ה | ו
;
8. הערך של א מספר אסימון יתפרש כספרה בבסיס שצוין על ידי
ערך הפנקס הפנימי בסיס מ (מתואר להלן). כל אחד מה ספרה
לתווים יהיה הערך מ-0 עד 15 בסדר המפורט כאן, וה-
התו ייצג את נקודת הרדיוס. ההתנהגות אינה מוגדרת אם
ספרות גדולות או שווה לערך של בסיס מ מופיעים באסימון. עם זאת, שימו לב
החריג עבור ערכים חד ספרתיים שמוקצים להם בסיס מ ו בּוֹס עצמם, ב
תפעול in bc.
9. מילות המפתח הבאות יוכרו כאסימונים:
המכונית בסיס מ אורך לַחֲזוֹר בזמן
לשבור if בּוֹס סולם
לְהַגדִיר ל להפסיק מ"ר
10. כל אחד מהתווים הבאים המופיע בכל מקום מלבד מילת מפתח יהיה
מוכר כאסימון מִכְתָב:
a b c d e f g h i j k l m n o p q r s t u v w x y z
11. הרצפים הבאים של תווים בודדים ושני תווים יוכרו כ-
אסימון ASSIGN_OP:
= += −= *= /= %= ^=
12. אם א '=' תו, כתחילתו של אסימון, ואחריו א '-' דמות עם
ללא תוחם מתערב, ההתנהגות אינה מוגדרת.
13. התווים הבודדים הבאים יוכרו כאסימון MUL_OP:
* / %
14. הרצפים הבאים של תווים בודדים ושני תווים יוכרו כ-
אסימון REL_OP:
== <= >= != < >
15. רצפי שני התווים הבאים יוכרו כאסימון INCR_DECR:
++ −−
16. התווים הבודדים הבאים יוכרו כאסימונים ששמותיהם הם
אופי:
( ) , + - ; [ ] ^ { }
17. האסימון EOF מוחזר כאשר מגיעים לסוף הקלט.
תפעול in bc
ישנם שלושה סוגים של מזהים: מזהים רגילים, מזהי מערך ו
מזהי פונקציות. כל שלושת הסוגים מורכבים מאותיות קטנות בודדות. מַעֲרָך
אחרי המזהים יופיעו סוגריים מרובעים ("[]"). נדרש מנוי למערך
מלבד ארגומנט או רשימה אוטומטית. מערכים הם במימד יחיד ויכולים להכיל עד
{BC_DIM_MAX} אלמנטים. יצירת האינדקס יתחיל באפס, כך שמערך יוכנס לאינדקס מ-0 עד
{BC_DIM_MAX}-1. מנויים יקוצצו למספרים שלמים. הבקשה תבטיח
שמזהי פונקציות עוקבים אחריהם בסוגריים, אולי מקיפים ארגומנטים. ה
שלושה סוגי מזהים אינם מתנגשים.
הטבלה הבאה מסכמת את כללי הבכורה והאסוציאטיביות של כולם
מפעילים. למפעילים באותו קו תהיה אותה עדיפות; השורות הן לפי הסדר של
קדימות הולכת ופוחתת.
שולחן: מפעילים in bc
┌───────────────────────────┬──────
│ מַפעִיל │ אסוציאטיביות │
├──────────────────────────┼───────────
│++, −− │ לא רלוונטי │
│נארי − │ לא זמין │
│^ │ מימין לשמאל │
│*, /, % │ משמאל לימין │
│+, בינארי − │ משמאל לימין │
│=, +=, −=, *=, /=, %=, ^= │ מימין לשמאל │
│==, <=, >=, !=, <, > │ אין │
└──────────────────────────┴────────
לכל ביטוי או ביטוי בשם יש א סולם, שהוא מספר הספרות העשרוניות
זה יישמר כחלק השבר של הביטוי.
שם ביטויים הם מקומות שבהם מאוחסנים ערכים. ביטויים בעלי שם יהיו תקפים ב
הצד השמאלי של מטלה. הערך של ביטוי בעל שם יהיה הערך המאוחסן
במקום הנקוב. מזהים ורכיבי מערך פשוטים נקראים ביטויים; יש להם
ערך התחלתי של אפס וסולם התחלתי של אפס.
הרישומים הפנימיים סולם, בסיס מ, ו בּוֹס כולם ביטויים בעלי שם. קנה המידה של an
ביטוי המורכב מהשם של אחד מהאוגרים הללו יהיה אפס; ערכים שהוקצו
לכל אחד מהאוגרים הללו קטועים למספרים שלמים. ה סולם הפנקס יכיל א
ערך גלובלי בשימוש בחישוב סולם הביטויים (כפי שמתואר להלן). הערך של
הקופה סולם מוגבל ל-0 ≤ סולם ≤ {BC_SCALE_MAX} ויהיה בעל ערך ברירת מחדל
של אפס. ה בסיס מ ו בּוֹס אוגרים הם רדיוס מספרי הקלט והפלט,
בהתאמה. הערך של בסיס מ יוגבל ל:
2 ≤ בסיס מ ≤ 16
הערך של בּוֹס יוגבל ל:
2 ≤ בּוֹס ≤ {BC_BASE_MAX}
מתי גם בסיס מ or בּוֹס מוקצה סינגל ספרה ערך מהרשימה ב לֵקסִיקָלִי
אמנות in bc, הערך יונח בהקסדצימלי. (לדוגמה, בסיס מ=א סטים
לבסיס עשר, ללא קשר לזרם בסיס מ ערך.) אחרת, ההתנהגות אינה מוגדרת
כאשר ספרות גדולות או שוות לערך של בסיס מ מופיעים בקלט. שניהם בסיס מ
ו בּוֹס יהיו בעלי ערכים התחלתיים של 10.
חישובים פנימיים יתנהלו כאילו בעשרוניים, ללא קשר לקלט ו
בסיסי פלט, למספר שצוין של ספרות עשרוניות. כאשר אין תוצאה מדויקת
הושג (לדוגמה, סולם=0; 3.2/1), התוצאה תקוצר.
לכל הערכים של בּוֹס המצוין בכרך זה של POSIX.1-2008, bc יפלוט מספרי
ערכים על ידי ביצוע כל אחד מהשלבים הבאים לפי הסדר:
1. אם הערך קטן מאפס, א ('-') תו ייצא בפלט.
2. אחד מהאפשרויות הבאות הוא פלט, בהתאם לערך המספרי:
* אם הערך המוחלט של הערך המספרי גדול או שווה לאחד, ה-
חלק שלם של הערך ייפלט כסדרה של ספרות המתאימות ל
בּוֹס (כמתואר להלן), הספרה המשמעותית ביותר תחילה. המשמעותי ביותר
ספרה שאינה אפס תוצא לאחר מכן, ואחריה כל אחת פחות ברציפות
ספרה משמעותית.
* אם הערך המוחלט של הערך המספרי קטן מאחד אך גדול מ
אפס וסולם הערך המספרי גדול מאפס, הוא לא מצוין
האם התו 0 מופק.
* אם הערך המספרי הוא אפס, התו 0 ייפלט.
3. אם קנה המידה של הערך גדול מאפס והערך המספרי אינו אפס,
תו ייפלט, ואחריו סדרה של ספרות המתאימות ל
בּוֹס (כמתואר להלן) המייצג את החלק המשמעותי ביותר של השבר
חלק מהערך. אם s מייצג את קנה המידה של הערך המופק, את המספר של
פלט ספרות יהיה s if בּוֹס הוא 10, קטן או שווה ל s if בּוֹס הוא גדול יותר
מ-10, או גדול או שווה ל s if בּוֹס הוא פחות מ-10. עבור בּוֹס ערכים
מלבד 10, זה צריך להיות מספר הספרות הדרושות כדי לייצג דיוק של
10s.
בעד בּוֹס ערכים מ-2 עד 16, ספרות חוקיות הן הראשונות בּוֹס מהדמויות הבודדות:
0 1 2 3 4 5 6 7 8 9 A B C D E F
המייצגים את הערכים אפס עד 15, כולל, בהתאמה.
עבור בסיסים גדולים מ-16, כל ספרה תיכתב כמספר עשרוני נפרד
מספר. לפני כל ספרה, מלבד הספרה השברית המשמעותית ביותר, א
יחיד . עבור בסיסים מ-17 עד 100, bc יכתוב מספרים עשרוניים דו ספרתיים; ל
בסיסים מ-101 עד 1000, מחרוזות עשרוניות תלת ספרתיות וכן הלאה. לדוגמה, העשרוני
מספר 1024 בבסיס 25 ייכתב כך:
01 15 24
ובבסיס 125, כמו:
008 024
מספרים גדולים מאוד יחולקו על פני שורות עם 70 תווים לכל שורה ב-POSIX
מקומי; אזורים אחרים עשויים להתפצל בגבולות אופי שונים. קווים שהם
המשך יסתיים בא .
קריאת פונקציה תהיה מורכבת משם פונקציה ואחריו סוגריים המכילים א
-רשימה מופרדת של ביטויים, שהם הארגומנטים של הפונקציה. מערך שלם
שהועבר כארגומנט יצוין על ידי שם המערך ואחריו ריבוע ריק
סוֹגְרַיִם. כל הארגומנטים של הפונקציה יועברו לפי ערך. כתוצאה מכך, בוצעו שינויים ב
לפרמטרים הפורמליים לא תהיה השפעה על הטיעונים בפועל. אם הפונקציה
מסתיים על ידי ביצוע א לַחֲזוֹר משפט, הערך של הפונקציה יהיה הערך
של הביטוי בסוגריים של ה לַחֲזוֹר משפט או יהיה אפס אם לא
ביטוי מסופק או אם אין לַחֲזוֹר הצהרה.
התוצאה של מ"ר(ביטוי) יהיה השורש הריבועי של הביטוי. התוצאה
יקוצץ במקום העשרוני הפחות משמעותי. קנה המידה של התוצאה יהיה
להיות קנה המידה של הביטוי או הערך של סולם, הגדול מביניהם.
התוצאה של אורך(ביטוי) יהיה המספר הכולל של הספרות העשרוניות המשמעותיות
בביטוי. קנה המידה של התוצאה יהיה אפס.
התוצאה של סולם(ביטוי) יהיה קנה המידה של הביטוי. קנה המידה של ה
התוצאה תהיה אפס.
קבוע מספרי יהיה ביטוי. הסולם יהיה מספר הספרות
עקוב אחר נקודת הרדיוס בקלט המייצג את הקבוע, או אפס אם אין נקודת רדיוס
מופיע.
הרצף ( ביטוי ) יהיה ביטוי בעל אותו ערך וקנה מידה כמו
ביטוי. ניתן להשתמש בסוגריים כדי לשנות את העדיפות הרגילה.
הסמנטיקה של האופרטורים האנריים והבינאריים היא כדלקמן:
-ביטוי
התוצאה תהיה שלילית של ביטוי. קנה המידה של התוצאה יהיה
להיות בקנה מידה של ביטוי.
אופרטורי ההגדלה וההפחתה לא ישנו את קנה המידה של השמות
הביטוי שעליו הם פועלים. קנה המידה של התוצאה יהיה קנה המידה של זה
ביטוי בשם.
++ביטוי בשם
הביטוי הנקוב יוגדל באחד. התוצאה תהיה הערך של
הביטוי הנקרא לאחר הגדלה.
−−ביטוי בשם
הביטוי הנקוב יופחת באחד. התוצאה תהיה הערך של
הביטוי הנקרא לאחר הפחתה.
ביטוי בשם++
הביטוי הנקוב יוגדל באחד. התוצאה תהיה הערך של
הביטוי הנקוב לפני ההגדלה.
ביטוי בשם−−
הביטוי הנקוב יופחת באחד. התוצאה תהיה הערך של
הביטוי הנקוב לפני ההפחתה.
אופרטור האקספונציה, ('^'), יחייב ימין לשמאל.
ביטוי^ביטוי
התוצאה תהיה הראשונה ביטוי מורם לכוח השני
ביטוי. אם הביטוי השני אינו מספר שלם, ההתנהגות אינה מוגדרת.
If a הוא קנה המידה של הביטוי השמאלי ו b הוא הערך המוחלט של הזכות
ביטוי, קנה המידה של התוצאה יהיה:
if b >= 0 min(a * b, max(scale, א)) if b < 0 סולם
האופרטורים הכפלים ('*', '/', '%') יחייב משמאל לימין.
ביטוי*ביטוי
התוצאה תהיה תוצר של שני הביטויים. אם a ו b הם המאזניים של
שני הביטויים, אז קנה המידה של התוצאה יהיה:
min(a+b,max(scale,a,b))
ביטוי/ביטוי
התוצאה תהיה המנה של שני הביטויים. קנה המידה של התוצאה
יהיה הערך של סולם.
ביטוי%ביטוי
לביטויים a ו b, a%b יוערך שווה ערך לשלבים:
1. חישוב a/b לקנה המידה הנוכחי.
2. השתמש בתוצאה כדי לחשב:
a - (a / b) * b
לקנה מידה:
max(scale + סולם (ב), סולם (א))
קנה המידה של התוצאה יהיה:
max(scale + סולם (ב), סולם (א))
מתי סולם הוא אפס, ה '%' אופרטור הוא אופרטור השאריות המתמטי.
מפעילי התוספים ('+', '-') יחייב משמאל לימין.
ביטוי+ביטוי
התוצאה תהיה הסכום של שני הביטויים. קנה המידה של התוצאה יהיה
המקסימום של סולמות הביטויים.
ביטוי-ביטוי
התוצאה תהיה ההבדל בין שני הביטויים. קנה המידה של התוצאה
יהיה המקסימום של סולמות הביטויים.
מפעילי ההקצאה ('=', "+=", "−=", "*=", "/=", "%=", "^=") יחייב את הזכות ל
שמאלה.
ביטוי בשם=ביטוי
ביטוי זה יגרום להקצאת הערך של הביטוי מימין
לביטוי הנקרא בצד שמאל. קנה המידה של הביטוי שנקרא וגם של
התוצאה תהיה בקנה מידה של ביטוי.
טפסי המטלה המורכבת:
ביטוי בשם <מפעיל>= ביטוי
יהיה שווה ערך ל:
ביטוי בשם=ביטוי בשם <מפעיל> ביטוי
אלא שה- ביטוי בשם ייבדק פעם אחת בלבד.
שלא כמו כל האופרטורים האחרים, האופרטורים היחסים ('<', '>', "<=", ">=", "==", "! =")
יהיה תקף רק כמושא של if, בזמן, או בתוך א ל הצהרה.
ביטוי 1<ביטוי 2
היחס יהיה נכון אם הערך של ביטוי 1 הוא בהחלט פחות מה-
ערך של ביטוי 2.
ביטוי 1>ביטוי 2
היחס יהיה נכון אם הערך של ביטוי 1 הוא בהחלט גדול יותר מאשר
ערך של ביטוי 2.
ביטוי 1<=ביטוי 2
היחס יהיה נכון אם הערך של ביטוי 1 קטן או שווה ל-
ערך של ביטוי 2.
ביטוי 1>=ביטוי 2
היחס יהיה נכון אם הערך של ביטוי 1 גדול או שווה ל-
את הערך של ביטוי 2.
ביטוי 1==ביטוי 2
היחס יהיה נכון אם הערכים של ביטוי 1 ו ביטוי 2 שווים.
ביטוי 1!=ביטוי 2
היחס יהיה נכון אם הערכים של ביטוי 1 ו ביטוי 2 אינם שווים.
יש רק שתי מחלקות אחסון ב bc: גלובלי ואוטומטי (מקומי). רק מזהים
שהן מקומיות לפונקציה יש להצהיר עם ה- המכונית פקודה. הטיעונים לא
הפונקציה תהיה מקומית לפונקציה. ההנחה היא שכל המזהים האחרים הם גלובליים
וזמין לכל הפונקציות. לכל המזהים, גלובליים ומקומיים, יש ערכים ראשוניים של
אֶפֶס. מזהים שהוכרזו כאוטומטיים יוקצו בכניסה לפונקציה ו
שוחרר עם החזרה מהפונקציה. לכן הם לא שומרים על ערכים ביניהם
קריאות פונקציה. מערכים אוטומטיים יצוינו על ידי שם המערך ואחריו ריבוע ריק
סוֹגְרַיִם. בכניסה לפונקציה, הערכים הישנים של השמות המופיעים כפרמטרים
וכמשתנים אוטומטיים יידחקו לערימה. עד שהפונקציה תחזור,
התייחסות לשמות אלה תתייחס רק לערכים החדשים.
הפניות לכל אחד מהשמות הללו מפונקציות אחרות שנקראות מפונקציה זו
התייחס גם לערך החדש עד שאחת מהפונקציות הללו תשתמש באותו שם עבור מקומי
משתנה
כאשר הצהרה היא ביטוי, אלא אם המפעיל הראשי הוא הקצאה, ביצוע של
ההצהרה תכתוב את ערך הביטוי ואחריו א .
כאשר הצהרה היא מחרוזת, ביצוע ההצהרה יכתוב את הערך של
מחרוזת.
הצהרות מופרדות ב אוֹ תווים יבוצעו
ברצף. בקריאה אינטראקטיבית של bc, בכל פעם א קוראים את זה
מספק את ההפקה הדקדוקית:
input_item : נקודה-פסיק שורה חדשה
הרשימה הרציפה של ההצהרות המרכיבות את נקודה-פסיק יוצא להורג
באופן מיידי וכל פלט שיופק על ידי אותה ביצוע ייכתב ללא כל דיחוי
עקב חציצה.
ב if הצהרה (if(יחס) הצהרה,) הצהרה יבוצע אם
היחס נכון.
השמיים בזמן הצהרה (בזמן(יחס) הצהרה) מיישמת לולאה שבה ה יחס is
בָּדוּק; בכל פעם את יחס נכון, ה הצהרה יבוצע וה יחס
נבדק מחדש. כאשר יחס הוא שקרי, הביצוע יחודש לאחר מכן הצהרה.
A ל הַצהָרָה(ל(ביטוי; יחס; ביטוי) הצהרה) יהיה זהה ל:
ביטוי ראשון
בזמן (יחס) {
הצהרה
ביטוי אחרון
}
הבקשה תוודא ששלושת הביטויים קיימים.
השמיים לשבור הצהרה תגרום לסיום א ל or בזמן הצהרה.
השמיים המכונית הצהרה (המכונית מזהה [,מזהה] ...) יגרום לערכים של
מזהים שיש לדחוף למטה. המזהים יכולים להיות מזהים רגילים או מערך
מזהים. מזהי מערך יצוינו על ידי ביצוע ריק לפי שם המערך
סוגריים מרובעים. הבקשה תבטיח כי המכונית הצהרה היא הראשונה
משפט בהגדרת פונקציה.
A לְהַגדִיר הצהרה:
לְהַגדִיר מִכְתָב ( opt_parameter_list ) {
opt_auto_define_list
statement_list
}
מגדיר פונקציה בשם מִכְתָב. אם פונקציה בשם מִכְתָב הוגדר בעבר, ה
לְהַגדִיר ההצהרה תחליף את ההגדרה הקודמת. הביטוי:
מִכְתָב ( opt_argument_list )
יפעיל את הפונקציה ששמה מִכְתָב. ההתנהגות אינה מוגדרת אם המספר של
ארגומנטים בהזמנה אינם תואמים את מספר הפרמטרים בהגדרה.
פונקציות יוגדרו לפני הפעלתן. פונקציה תיחשב ככזו
מוגדר בתוך הגוף שלו, כך ששיחות רקורסיביות תקפות. הערכים של קבועים מספריים
בתוך פונקציה יתפרש בבסיס המצוין על ידי הערך של בסיס מ
הירשם כאשר הפונקציה מופעלת.
השמיים לַחֲזוֹר הצהרות (לַחֲזוֹר ו לַחֲזוֹר(ביטוי)) יגרום לסיום א
פונקציה, פיצוץ של המשתנים האוטומטיים שלה, ופירוט התוצאה של הפונקציה.
הטופס הראשון יהיה שווה ערך ל לַחֲזוֹר(0). הערך והקנה מידה של התוצאה
המוחזר על ידי הפונקציה יהיו הערך והקנה מידה של הביטוי המוחזר.
השמיים להפסיק הצהרה (להפסיק) יפסיק את ביצוע א bc תוכנית בנקודה שבה ה
המשפט מתרחש בקלט, גם אם הוא מתרחש בהגדרת פונקציה, או ב-an if,
ל, או בזמן הצהרה.
הפונקציות הבאות יוגדרו כאשר ה −ל האופציה צוינה:
s( ביטוי )
סינוס הטיעון ברדיאנים.
c( ביטוי )
קוסינוס הטיעון ברדיאנים.
a( ביטוי )
ארקטנגנט של טיעון.
l( ביטוי )
לוגריתם טיעון טבעי.
e( ביטוי )
פונקציה אקספוננציאלית של ארגומנט.
j( ביטוי, ביטוי )
פונקציית Bessel בסדר מספר שלם.
קנה המידה של התוצאה המוחזרת על ידי פונקציות אלה יהיה הערך של סולם
הירשם בזמן הפעלת הפונקציה. הערך של ה סולם להירשם אחרי אלה
פונקציות שסיימו את ביצוען יהיו באותו ערך שהיה לה בעת הפעלתן.
ההתנהגות אינה מוגדרת אם אחת מהפונקציות הללו מופעלת עם ארגומנט בחוץ
תחום הפונקציה המתמטית.
יְצִיאָה סטָטוּס
יוחזרו ערכי היציאה הבאים:
0 כל קבצי הקלט עובדו בהצלחה.
שלא פורטו
התרחשה שגיאה.
השלכות OF שגיאות
אם בכלל פילה אופרנד מצוין ולא ניתן לגשת לקובץ בעל השם, bc יכתוב א
הודעת אבחון לשגיאה סטנדרטית ולהסתיים ללא כל פעולה נוספת.
בקריאה אינטראקטיבית של bc, על כלי השירות להדפיס הודעת שגיאה ולהתאושש
בעקבות שגיאה כלשהי בקלט. בקריאה לא אינטראקטיבית של bc, קלט לא תקין
גורם להתנהגות לא מוגדרת.
השמיים הבא סעיפים יש לו אִינפוֹרמָטִיבִי.
בקשה נוהג
משתנים אוטומטיים ב bc לא פועלים בדיוק באותו אופן כמו ב-C או ב-PL/1.
מסיבות היסטוריות, סטטוס היציאה מ bc לא ניתן להסתמך על כך שיצביע על כך שא
אירעה שגיאה. החזרת אפס לאחר שגיאה אפשרית. לָכֵן, bc צריך להיות
משמש בעיקר על ידי משתמשים אינטראקטיביים (שיכולים להגיב להודעות שגיאה) או על ידי אפליקציה
תוכניות שיכולות איכשהו לאמת את התשובות שהוחזרו כלא כוללות הודעות שגיאה.
השמיים bc כלי השירות תמיד משתמש ב- ('.') תו לייצג נקודת רדיוס,
ללא קשר לכל תו של נקודה עשרונית שצוין כחלק מהמקום הנוכחי. ב
שפות כמו C או awk, ה התו משמש במקור התוכנית, אז זה יכול להיות
נייד וחד משמעי, בעוד התו הספציפי לאזור משמש בקלט ופלט.
כי אין הבחנה בין מקור לקלט ב bc, הסדר זה לא היה
להיות אפשרי. שימוש בתו הספציפי לאזור ב bcהקלט של זה יציג אי בהירות
לתוך השפה; שקול את הדוגמה הבאה במקום עם א בתור ה
תו בנקודה עשרונית:
לְהַגדִיר f(א,ב) {
...
}
...
f(1,2,3)
בגלל אי בהירות כאלה, ה תו משמש בקלט. לאחר קלט בצע
מוסכמות שונות מהפלט יהיו מבלבלות בשימוש בצינור או
שימוש אינטראקטיבי, אז ה משמש גם בפלט.
דוגמאות
במעטפת, הבא מקצה קירוב של עשר הספרות הראשונות של 'π' אל ה
משתנה x:
x=$(printf "%s\n" 'סוּלָם = 10; 104348 / 33215 ' | לִפנֵי הַסְפִירָה)
הבא bc התוכנית מדפיסה את אותו הקירוב של 'π', עם תווית, לתקן
תְפוּקָה:
סולם = 10
"פאי שווים "
104348 / 33215
להלן פונקציה לחישוב ערך משוער של האקספוננציאלי
פונקציה (שים לב שפונקציה כזו מוגדרת מראש אם −ל האופציה צוינה):
סולם = 20
לְהַגדִיר לְשֶׁעָבַר){
המכונית a, b, c, i, s
a = 1
b = 1
s = 1
ל (i = 1; 1 == 1; i++){
a = גַרזֶן
b = דוּ
c = / b
if (c == 0) {
החזרות)
}
s = s+c
}
}
להלן מדפיסים ערכים משוערים של הפונקציה המעריכית של עשרת הראשונים
מספרים שלמים:
ל (i = 1; i <= 10; ++i) {
e(i)
}
Rationalale
השמיים bc כלי השירות מיושם באופן היסטורי כמעבד חזיתי עבור dc; dc לא היה
נבחר להיות חלק מכרך זה של POSIX.1-2008 בגלל bc חשבו שיש לו יותר
ממשק פרוגרמטי אינטואיטיבי. יישומים נוכחיים שמיישמים bc באמצעות dc יש לו
צפוי לעמוד בדרישות.
סטטוס היציאה עבור תנאי שגיאה לא צוין מכמה סיבות:
* bc כלי השירות משמש גם במצבים אינטראקטיביים וגם במצבים לא אינטראקטיביים. שונה
קודי יציאה עשויים להתאים לשני השימושים.
* לא ברור מתי יש לתת יציאה שאינה אפס; חלק באפס, לא מוגדר
פונקציות ושגיאות תחביר הן כל האפשרויות.
* לא ברור איזה תועלת יש לסטטוס היציאה.
* ביישומי 4.3 BSD, System V ו-Ninth Edition, bc עובד בשיתוף פעולה
עם dc. ה dc השירות הוא ההורה, bc הוא הילד. זה נעשה בצורה נקייה
לסיים bc if dc הופסק.
ההחלטה לקבל bc יציאה בעת מפגש עם קובץ קלט בלתי נגיש מבוסס על
האמונה בכך bc file1 file2 משמש לרוב כאשר לפחות file1 מכיל נתונים/פונקציה
הצהרות/אתחולים. לאחר bc המשך עם קבצים מוקדמים חסרים
כנראה לא שימושי. אין שום משמעות בסעיף ההשלכות של שגיאות לכך bc
חייב לבדוק את נגישות כל הקבצים שלו לפני פתיחת כל אחד מהם.
היה ויכוח לא מבוטל על ההתאמה של השפה המקובלת על ידי bc.
כמה מבקרים העדיפו לראות תת-קבוצה טהורה של שפת C או שינויים מסוימים
כדי להפוך את השפה לתואמת יותר עם C. בעוד שה bc לשפה יש משהו ברור
דמיון ל-C, הוא מעולם לא טען שהוא תואם לגרסה כלשהי של C. An
מתורגמן עבור תת-קבוצה של C עשוי להיות כלי עזר מאוד כדאי, והוא עשוי להיות פוטנציאלי
לעשות bc מְיוּשָׁן. עם זאת, לא ידוע על שימוש כזה בפרקטיקה ההיסטורית, וזה לא היה
במסגרת הכרך הזה של POSIX.1-2008 כדי להגדיר שפה וכלי עזר כאלה. אם
וכאשר הם מוגדרים, ייתכן שיהיה מתאים לכלול אותם בגרסה עתידית של
התקן הזה. זה השאיר את החלופות הבאות:
1. אל תכלול כל שפת מחשבון מכרך זה של POSIX.1-2008.
הקונצנזוס של המפתחים הסטנדרטיים היה כי מחשבון תכנותי פשוט
השפה שימושית מאוד הן ליישומים והן למשתמשים אינטראקטיביים. היחיד
הטיעונים להחרגת כל מחשבון היו שהוא יתיישן אם וכאשר
הופיע תואם C, או שהעדר יעודד את התפתחותו
כזה תואם C. טיעונים אלה לא התייחסו מספיק לצרכיו של
מפתחי אפליקציות נוכחיים.
2. תקן את ההיסטורי dc, אולי עם שינויים קלים.
הקונצנזוס של המפתחים הסטנדרטיים היה זה dc הוא ביסודו פחות שמיש
לשון ושזה יהיה עונש חמור מדי כדי להימנע מהנושא של
דומה ל-C, אך אינו תואם ל-C.
3. תקן את ההיסטורי bc, אולי עם שינויים קלים.
זו הייתה הגישה שננקטה. רוב התומכים בשינוי השפה לא היו
היו מרוצים עד שרוב או כל אי ההתאמה עם C נפתרו.
מכיוון שרוב השינויים הנחשבים לרצויים ביותר ישברו היסטוריים
יישומים ודורשים שינויים משמעותיים ביישומים היסטוריים,
כמעט ולא בוצעו שינויים. השינוי המשמעותי היחיד שנעשה היה
החלפת ההיסטורי bc מפעילי הקצאות "=+", וכן הלאה, עם ה
מודרני יותר "+=", וכן הלאה. הגרסאות הישנות יותר נחשבות לבסיסן
פגום בגלל העמימות המילונית בשימושים כמו a=−1.
על מנת לאפשר למימושים להתמודד עם תאימות לאחור כפי שהם רואים
בהתאמה, ההתנהגות של המבנה המעורפל היחיד הזה נעשתה ללא מוגדרת. (לפחות שלושה
כבר ידוע שיישומים תומכים בשינוי הזה, כך שמידת ה
השינוי המעורב לא אמור להיות גדול.)
השמיים '%' אופרטור הוא האופרטור השאריות המתמטי כאשר סולם הוא אפס. ההתנהגות
של מפעיל זה עבור ערכים אחרים של סולם הוא מיישומים היסטוריים של bc, ו
נשמר למען יישומים היסטוריים למרות הלא אינטואיטיבי
טֶבַע.
הגדרת היתר יישומים היסטוריים בסיס מ ו בּוֹס לטווח רחב יותר של ערכים.
זה כולל ערכים פחות מ-2, שלא נתפסו כמועילים מספיק עבורם
לְתַקְנֵן. יישומים אלה אינם מפרשים קלט כראוי עבור ערכים של בסיס מ
שגדולים מ-16. הסיבה לכך היא שקבועים מספריים מזוהים באופן תחבירי,
במקום מילונית, כמתואר בכרך זה של POSIX.1-2008. הם בנויים מ
אסימונים מילוניים של ספרות הקסדצימליות בודדות ו דמויות. מאז
תווים בין אסימונים אינם גלויים ברמה התחבירית, זה לא אפשרי
לזהות את ה``ספרות'' הרב-ספרתיות המשמשות בבסיסים הגבוהים כראוי. היכולת ל
לזהות קלט בבסיסים אלה לא נחשב שימושי מספיק כדי לדרוש שינוי אלה
יישומים. שימו לב שההכרה בקבועים מספריים ברמה התחבירית היא
אין בעיה בהתאמה לנפח זה של POSIX.1-2008, מכיוון שהוא אינו משפיע על
התנהגות של יישומים תואמים (ונכון bc תוכניות). יישומים היסטוריים
קבל גם קלט עם כל הספרות '0'-'9' ו 'א'-'F' ללא קשר לערך של
בסיס מ; שכן ספרות עם ערך גדול או שווה ל בסיס מ לא ממש מתאימות,
ההתנהגות כשהם מופיעים אינה מוגדרת, למעט המקרה השכיח של:
ibase=8;
/* התַהֲלִיך in אוקטלי בסיס. */
...
ibase=A
/* שחזור עֶשׂרוֹנִי בסיס. */
בכמה יישומים היסטוריים, אם הביטוי שייכתב הוא ביטוי לא מאותחל
אלמנט מערך, מוביל ו/או ניתן להוציא עד ארבעה תווים מובילים 0
לפני התו אפס. התנהגות זו נחשבת לבאג; אין זה סביר שיש
הבקשה התואמת כעת מסתמכת על:
הד 'ב[3]' | bc
מחזיר 00000 במקום 0.
חישוב מדויק של מספר הספרות השבריות לפלט עבור ערך נתון בבסיס
אחר מ-10 יכול להיות יקר מבחינה חישובית. יישומים היסטוריים משתמשים במהירות
קירוב, וזה מותר. שימו לב שהדרישות חלות רק על ערכים של
בּוֹס שנפח זה של POSIX.1-2008 דורש יישומים לתמיכה (בפרט,
לא ל-1, 0 או בסיסים שליליים, אם יישום תומך בהם כהרחבה).
יישומים היסטוריים של bc לא אפשרו להעביר פרמטרים של מערך כאחרון
פרמטר לפונקציה. מעודדים יישומים חדשים להסיר מגבלה זו
אף על פי שאינו נדרש בדקדוק.
FUTURE כיוונים
אין.
השתמש ב-bcposix באינטרנט באמצעות שירותי onworks.net