<<

ÅeÖÖ Í×eÖ³× GÙide

CÄÁÆÌÇÆ Äº ÂEFFEÊY

ÆeÛ ÅeÜicÓ ËØaØe ÍÒiÚeÖ×iØÝ

je«eÖÝ@c׺ÒÑ×ÙºedÙ

ÂÙÐÝ ¾5¸ ¾¼¼¾

ÁÒØÖÓ dÙcØiÓÒ

ÅeÖÖ ´ÔÖÓÒÓÙÒced \ÑaÖe"¸ fÖÓÑ \ÑeØa eÖÖÓÖ geÒeÖaØÓÖ"µ i× a ØÓ ÓÐ ØhaØ geÒeÖaØe×

Ù×abÐe ÛiØh BeÖkeÐeÝ ¸ AÌ²Ì YACC¸

aÒ eÖÖÓÖ Ñe××age fÙÒcØiÓÒ yyerror()

ÓÖ Bi×ÓÒº ÅeÖÖ caÒ geÒeÖaØe Øhe eÖÖÓÖ Ñe××age fÙÒcØiÓÒ fÓÖ eiØheÖ AÆËÁ C»C··

ÓÖ Øhe ÁcÓÒ ÔÖÓgÖaÑÑiÒg ÐaÒgÙage [GÖi×97]º Ìhe ÅeÖÖ ØÓ ÓÐ caÒ e dÓÛÒÐÓaded

fÖÓÑ Ìhi× dÓ cÙÑeÒØ i× Øhe ÔÖiÑaÖÝ Ù×eÖ³×

http://unicon.sourceforge.net/merr/º

gÙide aÒd ÖefeÖeÒce fÓÖ ÅeÖÖº A ×eÔaÖaØe dÓ cÙÑeÒØ [Âe«¼¾] de×cÖib e× ÅeÖÖ³×

ÙÒdeÖÐÝiÒg ÔÖiÒciÔÐe× aÒd ÑÓØiÚaØiÓÒº YÓÙ ×hÓÙÐd Öead ØhaØ dÓ cÙÑeÒØ if ÝÓÙ

ÛaÒØ ØÓ Ô ÓÖØ ÅeÖÖ ØÓ ÛÓÖk ÛiØh ÓØheÖ ÔaÖ×eÖ geÒeÖaØÓÖ׸ iÑÔÐeÑeÒØ feaØÙÖe×

×iÑiÐaÖ ØÓ ÅeÖÖ iÒ ÝÓÙÖ ÓÛÒ ØÓ ÓÐ׸ ÓÖ b eØØeÖ ÙÒdeÖ×ØaÒd ÛhÝ ÅeÖÖ i× ×ÙÔ eÖiÓÖ ØÓ

Øhe ÓÐd ÛaÝ Óf geÒeÖaØiÒg ×ÝÒØaÜ eÖÖÓÖ Ñe××age׺

Ìhi× dÓ cÙÑeÒØ a××ÙÑe× fÙÐÐ faÑiÐiaÖiØÝÛiØhØheYACC faÑiÐÝ Óf ØÓ ÓÐ׺ Ìhe

ØeÖÑ YACC ÛiÐÐ heÒcefÓÖØh be Ù×ed ØÓ deÒÓØe Øhe ÙÒiÓÒ Óf: AÌ²Ì YACC¸

BeÖkeÐeÝ YACC¸ Bi×ÓÒ¸ aÒd cÓÑÔaØibÐe ØÓ ÓÐ׺ Áf ÝÓÙ aÖe ÒÓØ faÑiÐiaÖ ÛiØh

YACC¸ ÝÓÙ ×hÓÙÐd gÓ Öead [ÄeÚi9¾]ÓÖaÒÝÓf×eÚeÖaÐ ÓØheÖ b Ó Ók× ÓÖ ÔaÔ eÖ× ØhaØ

de×cÖib e iØ iÒ deØaiк

fÙÒcØiÓÒ ØÓ ÓÚeÖÖide Øhe YACC aÔÔÐicaØiÓÒ× ×ÙÔÔÐÝ a

Êea×ÓÒabÐe yyerror()

defaÙÐØ geÒeÖic ×ÝÒØaÜ eÖÖÓÖ Ñe××age aÒd ÔÖÓÚide a Ù×efÙÐ Ñe××ageº ÅiÒiÑaÐÐݸ

ÑÓ×Ø YACC aÔÔÐicaØiÓÒ× Ù×e aÙgÑeÒØ Øhe defaÙÐØ Ñe××age ÛiØh

yyerror(s) ØÓ

Øhe ¬ÐeÒaÑe¸ ÐiÒe ÒÙÑb eÖ¸ aÒd ØÓkeÒ aØ Ûhich Øhe eÖÖÓÖ Ûa× di×cÓÚeÖedº

ÅeÖÖ i× fÓÖ YACC cÓÑÔiÐeÖ ÛÖiØeÖ× ÛhÓ ÛaÒØ ØÓ dÓ b eØØeÖ ØhaÒ Øhi׺ A

×ØÖÓÒg ca×e ha× b eeÒ Ñade ØhaØ cÓÑÔiÐeÖ eÖÖÓÖ Ñe××age× ×hÓÙÐd b e ØaÖgeØed aØ

ÒÓÒeÜÔ eÖØ׸ aÒd ØhaØ iÑÔÖÓÚed eÖÖÓÖ Ñe××age× cÓÖÖeÐaØe ØÓ b eØØeÖ ÔÖÓgÖaÑÑeÖ

Ô eÖfÓÖÑaÒce [BÖÓÛ8¿]¸ [ËhÒe8¾]º A gÓÓd ×ÙÑÑaÖÝ Óf cÓÑÔiÐeÖ eÖÖÓÖ Ñe××age

de×igÒ caÒ b e fÓÙÒd iÒ [ÀÓÖÒ74]º

ÏiØh Øhe ÅeÖÖ ØÓ Óи ÝÓÙ ÔÖe×eÒØ eÜaÑÔÐe eÖÖÓÖ× a× cÓ de fÖagÑeÒØ׸ aÒd ×ÙÔ¹

ÔÐÝ cÓÖÖe×Ô ÓÒdiÒg diagÒÓ×Øic Ñe××age׺ ÅeÖÖ iÒÚÓke× ÝÓÙÖ cÓÑÔiÐeÖ ×eÔaÖaØeÐÝ

ÓÒ each eÜaÑÔÐe eÖÖÓÖ ØÓ eÜØÖacØ Øhe ÔaÖ×e ×ØaØe aÒd iÒÔÙØ ×ÝÑb ÓÐ aØ Øhe ØiÑe ½

Øhe ×ÝÒØaÜ eÖÖÓÖ Ó ccÙÖ׺ Ìhi× decÐaÖaØiÚe ×Ô eci¬caØiÓÒ Óf eÜaÑÔÐe eÖÖÓÖ× i× iÒ¹

deÔ eÒdeÒØ Óf Ûhich ÄÊ ÔaÖ×eÖ iÑÔÐeÑeÒØaØiÓÒ i× iÒ Ù×eº

Ìhe ÅeÖÖ CÓÑÑaÒd ÄiÒe

ÅeÖÖ i× iÒÚÓked fÖÓÑ Øhe diÖecØÓÖÝ iÒ Ûhich Øhe cÓÑÔiÐeÖ i× bÙiÐظ ÛiØh Øhe

fÓÐÐÓÛiÒg cÓÑÑaÒd ÐiÒe aÖgÙÑeÒØ× aÒd ÓÔØiÓÒ׺

merr [-yYB] [-s ] [-o msgfile] compiler [target]

ÛheÖe cÓÑÔiÐeÖ i× Øhe ÒaÑe Óf Øhe cÓÑÔiÐeÖ fÓÖ ÛhÓÑ eÖÖÓÖ Ñe××age× ÛiÐÐ be

geÒeÖaØed¸ aÒd ØaÖgeØ i× Øhe ×ÓÙÖce ¬ÐeÒaÑe ØhaØ Øhe eÖÖaÒØ ÔÖÓgÖaÑ× ÛiÐÐ be

ÛÖiØØeÒ ØÓ aÒd cÓÑÔiÐed fÖÓѸ defaÙÐØiÒg ØÓ µ

m err.c ´ÓÖ m err.icn

ÅeÖÖ eÜecÙØe× a ×Ý×ØeÑ cÓÑÑaÒd ØÓ ÖebÙiÐd Øhe cÓÑÔiÐeÖ iÒ ÓÖdeÖ ØÓ cÖeaØe

eÖÖÓÖ Ñe××age ØabÐeº Ìhe defaÙÐØ cÓÑÑaÒd i× \ "º Ìhe

iØ× make compiler -s

ÓÔØiÓÒ ÓÚeÖÖide× Øhi× defaÙÐظ a× iÒ Øhe ÐiÒe:

merr -s ”make all” mycc bug.c fÙÒcØiÓÒ ØÓ a ¬Ðe ÒaÑed

ÅeÖÖ ÛÖiØe× Øhe eÖÖÓÖ Ñe××age ØabÐe aÒd yyerror()

Ý defaÙÐغ A \¹Ó" ÓÔØiÓÒ diÖecØ× ÅeÖÖ ØÓ ÛÖiØe Øhe ¬Ðe ÛiØh

yyerror.c ´ÓÖ ºicÒµ b

a di«eÖeÒØ ÒaÑeº

ÐiÒe ÓÔØiÓÒ× ¸ ¸ aÒd diÖecØ ÅeÖÖ ØÓ geÒeÖaØe cÓÑÔaØibÐe

CÓÑÑaÒd -y -Y -B

fÙÒcØiÓÒ× fÓÖ ØhÖee Ô ÓÔÙÐaÖ C»C·· YACC iÑÔÐeÑeÒØaØiÓÒ× ´Øhe

C yyerror()

defaÙÐØ i× ØÓ geÒeÖaØe a FÓÖ AÌ²Ì YACC

yyerror() fÙÒcØiÓÒ fÓÖ ÁcÓÒ»ÍÒicÓÒµº ØhaØ de¬Òe× a ÑacÖÓ ØÓ add Øhe

aÒd Bi×ÓÒ¸ ÅeÖÖ ÛÖiØe× a headeÖ ¬Ðe yyerror.h

×ØaØe iÒfÓÖÑaØiÓÒ ØÓ Øhe fÙÒcØiÓÒ¸ aÔÔÖÓÔÖiaØe ØÓ each ÚeÖ×iÓÒ

ÔaÖ×e yyerror()

Óf YACCº Ìhi× headeÖ ¬Ðe ÑÙ×Ø b e iÒcÐÙded iÒ Øhe YACC ×Ô eci¬caØiÓÒ ´ºÝµ ¬Ðe

¬Ðeº FigÙÖe ¿ ×hÓÛ× Øhe cÓÑÑaÒd ÐiÒe ÓÔØiÓÒ× aÒd iØ× geÒeÖaØed

aÒd y.tab.c

cÓÖÖe×Ô ÓÒdiÒg ØeÒØ׺

yyerror.h cÓÒ

ÝÝeÖÖÓִ׸ÝÝ×ØaØeµ ¹B Bi×ÓÒº #de¬Òe ÝÝeÖÖÓÖ´×µ

ÝÝeÖÖÓִ׸ÝÝ ×ØaØeµ ¹Y AÌ²Ì YACCº #de¬Òe ÝÝeÖÖÓÖ´×µ

¹Ý BeÖkeÐeÝ YACCº ÆÓ ÝÝeÖÖÓÖºh ÖeÕÙiÖedº

FigÙÖe ½: ÇÔØiÓÒ× haÒdÐe di«eÖeÒce× aÑÓÒg C YACC iÑÔÐeÑeÒØaØiÓÒ׺

ÌÓ Ô ÓÖØ ØÓ aÒÓØheÖ ÄÊ ÔaÖ×eÖ geÒeÖaØÓÖ¸ eÜaÑiÒe Øhe geÒeÖaØed ÔaÖ×eÖ ØÓ

ideÒØifÝ Øhe ÚaÖiabÐe hÓÐdiÒg Øhe ÔaÖ×e ×ØaØe aÒd ÑÓ difÝ Øhe

yyerror() ÑacÖÓº

EÖÖÓÖ aÒd Åe××age ËÔ eci¬caØiÓÒ

ÊaØheÖ ØhaÒ iÒØÖÓ dÙce a ÑÝÖiad Óf ØiÒÝ ¬Ðe׸ ÅeÖÖ Ù×e× a ×iÒgÐe ¬Ðe ÒaÑed

cÓÒØaiÒ× aÐÐ eÖÖÓÖ fÖagÑeÒØ× aÒd ØheiÖ cÓÖÖe×Ô ÓÒdiÒg Ñe××age׺

meta.err ØhaØ ¾

Ìhe ¬Ðe fÓÖÑaØ i× a ×eÕÙeÒce Óf cÓ de:::diagÒÓ×Øic ÔaiÖ׸ ÛheÖe cÓ de caÒ b e ÓÒe

ÓÖ ÑÙÐØiÔÐe ÐiÒe׺ Ìhe cÓ de fÖagÑeÒØ ØÓ geÒeÖaØe aÒ eÖÖÓÖ i× Ù×ÙaÐÐÝ ×ÑaÐи bÙØ

ÑÙ×Ø iÒcÐÙde a× ÑÙch cÓÒØeÜØ ´ÔÖeÚiÓÙ× decÐaÖaØiÓÒ׸ cÓÒØÖÓÐ ×ØÖÙcØÙÖe׸ aÒd ×Ó

fÓÖØhµ a× i× Òece××aÖÝ ØÓ ÔÙØ Øhe ÔaÖ×eÖ iÒØÓ Øhe ×ØaØe fÓÖ Ûhich Øhe diagÒÓ×Øic

Ñe××age i× ØÓ b e ÔÖÓ dÙcedº Ìhe diagÒÓ×Øic eÖÖÓÖ Ñe××age i× ÒÓÖÑaÐÐÝ a ×iÒgÐe

ÐiÒe bÙØ i× eÜØeÒded ÛheÒ a ÐiÒe eÒd× ÛiØh a back×Ða×hº Ìhe fÓÐÐÓÛiÒg aÖe ×ÓÑe

eÜaÑÔÐe eÖÖÓÖ fÖagÑeÒØ× aÒd a××Ó ciaØed Ñe××age×:

int mainfg ::: parenthesis or semi-colon expected int x y; ::: missing comma in variable list

char () fg::: function name expected

int a[] = f1,2; ::: unclosed initializer struct foo int x;

::: missing f after struct label

Ìhe ÒÙÑbeÖ Óf ×Ùch eÖÖÓÖ fÖagÑeÒØ× ÑaÝgÖÓÛ ÕÙiØe ÐaÖgeº A ÐaÞÝ cÓÑÔiÐeÖ

ÛÖiØeÖ caÒ cÖeaØe fÖagÑeÒØ× ÓÒ a deÑaÒd ba×i׸ ×ØaÖØiÒg fÖÓÑ a geÒeÖic GCC¹

×ØÝÐe eÖÖÓÖ Ñe××age aÒd addiÒg ÑÓÖe ×Ô eci¬c diagÒÓ×Øic× a× ÒeÛ ÔaÖ×e ×ØaØe× aÖe

ideÒØi¬ed bÝ eÖÖaÒØ ÔÖÓgÖaÑ׺ AÐØeÖÒaØiÚeÐݸ aÒ iÒiØiaÐ ×eØ Óf eÖÖÓÖ fÖagÑeÒØ×

caÒ b e cÖeaØed bÝ ×ØÙdÝiÒg Øhe gÖaÑÑaÖ aÒd ÛÖiØiÒg a× ÑaÒÝ eÖÖaÒØ fÖagÑeÒØ×

fÓÖ each ÔÖÓ dÙcØiÓÒ ÖÙÐe a× Ô Ó××ibÐeº Ìhe iÑÔ ÓÖØaÒØ ØhiÒg i× ØhaØ ÓÒce a ×eØ Óf

eÖÖÓÖ fÖagÑeÒØ× i× ÛÖiØØeÒ¸ chaÒge× iÒ Øhe gÖaÑÑaÖ ØhaØ chaÒge Øhe ÔaÖ×e ×ØaØe

iÒØegeÖ× ÒÓ ÐÓÒgeÖ ÖeÕÙiÖe ÑaÒÙaÐ ÖeeÜaÑiÒaØiÓÒ iÒ ÓÖdeÖ ØÓ aÚÓid iÒcÓÖÖecØ eÖÖÓÖ

Ñe××age׺

ÚeÖ×iÓÒ Óf

ÅeÖÖ³× yyerror()

fÙÒcØiÓÒ ÛiØh Øhe fÓÐÐÓÛiÒg Ô×eÙdÓ¹C

Ìhe ÅeÖÖ ÔÖÓgÖaÑ geÒeÖaØe× a yyerror() ØeÑÔÐaØe:

void yyerror(char £s, int parse state) f

if (yyerrors++ > yymaxerrors) stop(”too many errors, aborting”); if (!strcmp(s, ”syntax error”))

s = yyerrmsg[parse state, yychar];

Ò Ò fprintf(stderr, ”%s:%d: # Ò”%s ”:%s n”,

yyfilename, yylineno, yytext, s);

g

ØabÐe i× Øhe keÝ cÓÑÔ ÓÒeÒØ ØhaØ ÑaÔ× Øhe ØÓ

Ìhe yyerrmsg[] parse state

Øhe ÑÓ×Ø ×Ô eci¬c diagÒÓ×Øic Ñe××age aÚaiÐabÐeº Ìhe ØabÐe i× ×ÔaÖ×e¸ aÒd i× ÒÓØ ¿

ÖeaÐÐÝ ÖeÔÖe×eÒØed Ù×iÒg a ØÛÓ¹diÑeÒ×iÓÒaÐ aÖÖaݸ ×Ó Øhe ab ÓÚe Ô×eÙdÓcÓde i× a

×iÑÔÐi¬caØiÓÒº ÁÒ ÖeaÐiØÝØhe hÑaÝ

parse state ×Ùb×cÖiÔØ ÐÓ Ók× ÙÔ a ÙÒiÓÒ Ûhic

cÓÒØaiÒ ´aµ ÒÓ diagÒÓ×Øic¸ ´bµ a ×iÒgÐe eÖÖÓÖ Ñe××age ØÓ b e Ù×ed iÖÖe×Ô ecØiÚeÓf

Øhe iÒÔÙØ ØÓkeÒ¸ ÓÖ ´cµ a defaÙÐØ Ñe××age aÒd a ×ÔaÖ×e aÖÖaÝ ´ÛiØh ÐÓ ÓkÙÔ× ba×ed

µ Óf cÙ×ØÓÑ Ñe××age× fÓÖ ×Ô eci¬c iÒÔÙØ ØÓkeÒ׺

ÓÒ yychar

EÖÖÓÖ Åe××age DefaÙÐØiÒg

Áf a ÔaÖ×e ×ØaØe i× ÒÓØ fÓÙÒd iÒ Øhe Ñe××age ØabÐe¸ Øhe defaÙÐØ eÖÖÓÖ Ñe××age

´Ù×ÙaÐÐÝ \×ÝÒØaÜ eÖÖÓÖ"µ i× ÔÖiÒØed ÓÙØ ÛiØh cÙÖÖeÒØ ÐiÒe ÒÙÑbeÖ aÒd ØÓkeÒ

iÒfÓÖÑaØiÓÒº Áf Øhe ÔaÖ×e ×ØaØe i× ÔÖe×eÒØiÒ Øhe ØabÐe¸ ØheÖe ÑaÝbe a ×haÖed

Ñe××age ´iÒdeÔ eÒdeÒØ Óf Øhe iÒÔÙØ ØÓkeÒµ ÓÖ iÒdiÚidÙaÐ Ñe××age× fÓÖ ×Ô eci¬c

iÒÔÙØ ØÓkeÒ׺

ÓÒÐÝ ÓÒe eÖÖÓÖ fÖagÑeÒØ ÔÖÓ dÙced a giÚeÒ ÔaÖ×e ×ØaØe¸ Øhe

Áf yyerrmsg[]

ØabÐe ÖeØÙÖÒ× ØhaØ diagÒÓ×Øic iÒ ØhaØ ÔaÖ×e ×ØaØe fÓÖ aÐÐ Ô Ó××ibÐe iÒÔÙØ ØÓkeÒ׺ Áf

ÑÙÐØiÔÐe fÖagÑeÒØ× faiÐ iÒ Øhe ×aÑe ÔaÖ×e ×ØaØe¸ Øhe ¬Ö×Ø ÓÒe iÒ Øhe ×Ô eci¬caØiÓÒ

i× Ù×ed a× Øhe defaÙÐظ aÒd Øhe ×ecÓÒd aÒd ×Ùb×eÕÙeÒØ Ñe××age× fÓÖ ØhaØ ÔaÖ×e

×ØaØe ÓÚeÖÖide ØhaØ defaÙÐØ ÓÒÐÝ fÓÖ Øhe iÒÔÙØ ØÓkeÒ aÔÔ eaÖiÒg iÒ ØheiÖ eÖÖÓÖ

fÖagÑeÒغ Áf ÑÓÖe ØhaÒ ÓÒe fÖagÑeÒØ faiÐ× ÓÒ ideÒØicaÐ ÔaÖ×e ×ØaØe× aÒd iÒÔÙØ

ØÓkeÒ׸ a ÛaÖÒiÒg Ñe××age i× ÔÖÓ dÙced aÒd ÓÒÐÝ Øhe ¬Ö×Ø ÓÒe i× Ù×edº

Ìhe defaÙÐØ b ehaÚiÓÖ Ñake× iØ ÚeÖÝ ea×Ý ØÓ \gÖÓÛ" aÒ eÖÖÓÖ Ñe××age ×eØ fÖÓÑ

fÖee ÑiÒiÑaÐ GCC¹×ØÝÐe Ñe××age× ØÓ Öea×ÓÒabÐe ÔaÖ×e ×ØaØe¹ba×ed Ñe××age× ØÓ

gÓ Ó d Ñe××age× ØhaØ cÓÒ×ideÖ Øhe cÙÖÖeÒØ ØÓkeÒº ÆÓØhiÒg ÔÖeÚeÒØ× Øhe ÅeÖÖ Ù×eÖ

fÖÓÑ ÔÖÓ dÙciÒg iÒcÓÖÖecØ Ñe××age׸ ÓÖ faiÐiÒg ØÓ ÔÖÓ dÙce aÒ eÖÖÓÖ fÖagÑeÒØaÒd

cÙ×ØÓÑ Ñe××age ØhaØ ÛiÐÐ de×cÖib e a ÔaÖØicÙÐaÖ eÖÖÓÖ; Øhe ÅeÖÖ ØÓ ÓÐ jÙ×Ø Ñake×

Øhe jÓb ea×ieÖº

CÓÒcÐÙ×iÓÒ

ÅeÖÖ i× a ×iÑÔÐe¸ eÐegaÒØ ×ÓÐÙØiÓÒ ØÓ a cÓÑÑÓÒ ÔÖÓbÐeÑ eÒcÓÙÒØeÖed iÒ ÛÖiØiÒg

cÓÑÔiÐeÖ× Ù×iÒg YACCº Í×iÒg ÅeÖÖ aÐÐÓÛ× ÝÓÙ ØÓ iÑÔÖÓÚe ÝÓÙÖ ×ÝÒØaÜ eÖÖÓÖ

Ñe××age× bÝ ×ÙÔÔÐÝiÒg eÜaÑÔÐe׺ ÅeÖÖ i× ÖÓbÙ×Ø iÒ Øhe ÔÖe×eÒce Óf chaÒge× ØÓ

Øhe gÖaÑÑaÖ; jÙ×Ø ÖeÖÙÒ iØ ÛheÒeÚeÖ Øhe gÖaÑÑaÖ i× chaÒgedº

AckÒÓÛÐedgeÑeÒØ×

Ìhi× ÛÓÖk Ûa× ×ÙÔÔ ÓÖØed iÒ ÔaÖØ bÝ Øhe ÆaØiÓÒaÐ ÄibÖaÖÝ Óf ÅediciÒe¸ ËÔ eciaй

iÞed ÁÒfÓÖÑaØiÓÒ ËeÖÚice× DiÚi×iÓÒº Ìhe ÑÓ di¬ed ÚeÖ×iÓÒ Óf BeÖkeÐeÝ YACC¸

caÐÐed iÝacc¸ Ûa× iÑÔÐeÑeÒØed bÝÊaÝÈeÖedaº ÁØ i× ÔaÖØ Óf Øhe ÍÒicÓÒ ×ÓÙÖce

di×ØÖibÙØiÓÒ¸ aÒd i× aÐ×Ó Ù×abÐe ÛiØh ÁcÓÒº ÁØ i× aÐ×Ó aÚaiÐabÐe diÖecØ fÖÓÑ iØ× 4

aÙØhÓÖ; hi× e¹ÑaiÐ i× ÖaÝÔ eÖeda@hÓØÑaiкcÓѺ Ìhe eÜaÑÔÐe Óf ×ÙÔÔÐÝiÒg aÒ eÖ¹

ÖÓÖ Ñe××age iÒ aÒ eÖÖÓÖ ÔÖÓ dÙcØiÓÒ Úia a gÐÓbaÐ ÚaÖiabÐe Ûa× dÙe ØÓ ËaÙÑÝa

DebÖaÝbÝ Ô eÖ×ÓÒaÐ cÓÖÖe×Ô ÓÒdeÒceº AÐeÜaÒdÖe ÈeØiعBiaÒcÓ ÔÖÓÚided a heÐÔfÙÐ

cÐaÖi¬caØiÓÒ Óf Øhe GCC ÂaÚa eÜaÑÔÐeº ÅikhaiÐ AÙgÙ×ØÓÒ¸ ÃaÝ ÊÓbbiÒ× aÒd

ËaÙÑÝa DebÖaÝÔÖÓÚided heÐÔfÙÐ cÓÑÑeÒØ× ÓÒ Øhi× ÔaÔ eÖº

AÔÔ eÒdiÜ: EÜaÑÔÐe ÅeÖÖ ËÔ eci¬caØiÓÒ FiÐe

Ìhi× i× aÒ eÜaÑÔÐe ÅeÖÖ ×Ô eci¬caØiÓÒ fÓÖ ×ÓÑe ×ÝÒØaÜ eÖÖÓÖ× iÒ Øhe ÁcÓÒ ÔÖÓ¹

gÖaÑÑiÒg ÐaÒgÙageº ÁØ i× a ×Ùb×eØ Óf Øhe ÅeÖÖ ×Ô eci¬caØiÓÒ Ù×ed bÝ Øhe ÍÒicÓÒ ÔÖÓgÖaÑÑiÒg ÐaÒgÙage cÓÑÔiÐeÖº

procedure main()

every x do fg g end ::: too many closing curly braces

global::: unexpected end of file global x y::: invalid global declaration global x, , y::: missing identifier procedure p(x) end::: missing semicolon procedure p(x) end ::: link list expected invocable procedure p(x) end ::: invocable list expected local x ::: invalid declaration procedure main() a+ end ::: missing or invalid second argument to + procedure main() a* end ::: missing or invalid second argument to * procedure main() a! end

::: missing or invalid second argument to ! 5 procedure () end ::: procedure name expected procedure p(1) end ::: parameter name expected procedure p(x,) end ::: parameter name expected procedure p(x) global x end ::: semicolon expected procedure p(x); global x end ::: invalid procedure body procedure p() ! end ::: invalid argument to unary ! procedure p() create end ::: invalid create expression

procedure p() f end ::: invalid compound expression procedure p() if end ::: invalid if control expression procedure p() case end ::: invalid case control expression procedure p() while end

::: invalid while control expression 6 procedure p() until end ::: invalid until control expression procedure p() every end ::: invalid every control expression procedure p() repeat end ::: invalid repeat control expression link x+ procedure p() end ::: invalid link declaration procedure p () end ::: missing parameter list in procedure declaration procedure p() local ”hello” end ::: invalid local declaration procedure p() initial ] end ::: invalid initial expression procedure p()

if (1) f

hello g end ::: missing then procedure p() write(p() hello end ::: unclosed parenthesis procedure p()

local l := [] 7 end ::: illegal assignment in declaration

procedure p()

Ò Ò Ò f if Òa.b —( a.b & c(e) == ” t” then end ::: unclosed parenthesis procedure main()

case x of f y:

f(); g() g end ::: malformed case expression procedure main()

case x of f case y:

f() g end ::: missing ”of” in case expression procedure main()

while x do f x end

::: a while loop is missing g somewhere before ”end” procedure p()

initial f

if foo then f g end

::: an ”initial” clause is missing g somewhere before ”end” procedure dbdelete(db, filter) sql(db, ”DELETE FROM ” —— blah blah —— filter) end ::: unclosed literal or missing operator procedure p() s——:=k end

::: missing operand after —— or illegal space inside ——:= 8

ÊefeÖeÒce×

[BÖÓÛ8¿] BÖÓÛÒ¸ Ⱥ EÖÖÓÖ Ñe××age×: Øhe ÒegÐecØed aÖea Óf Øhe ÑaÒ»ÑachiÒe

iÒØeÖface? CÓÑÑÙÒicaØiÓÒ× Óf Øhe ACŸ ¾6´4µ:¾46ß¾49¸ ½98¿º

[GÖi×97] GÖi×ÛÓÐd¸ ʺ Eº aÒd GÖi×ÛÓÐd¸ ź ̺ Ìhe ÁcÓÒ ÈÖÓgÖaÑÑiÒg ÄaÒ¹

gÙage¸ ¿ÖdediØiÓÒºÈeeÖ¹ØÓ¹ÈeeÖ CÓÑÑÙÒicaØiÓÒ׸ ËaÒ ÂÓ×e¸ CA¸ ½997º

[ÀÓÖÒ74] ÀÓÖÒiÒg¸ º ÏhaØ Øhe cÓÑÔiÐeÖ ×hÓÙÐd ØeÐÐ Øhe Ù×eÖº ÁÒ CÓÑÔiÐeÖ CÓÒ¹

×ØÖÙcØiÓÒ: aÒ AdÚaÒced CÓÙÖ×e¸ Ôage× 5¾5ß548¸ BeÖÐiÒ¸ ½974º ËÔÖiÒgeÖ

ÎeÖÐagº

[Âe«¼¾] Âe«eÖݸCº GeÒeÖaØiÒg ÄÊ ×ÝÒØaÜ eÖÖÓÖ Ñe××age× fÖÓÑ eÜaÑÔÐe׺ ×Ùb¹

ÑiØØed fÓÖ ÔÙbÐicaØiÓÒ¸ ¾¼¼¾º

[ÄeÚi9¾] ÄeÚiÒe¸ º ʺ¸ Åa×ÓÒ¸ ̺¸ aÒd BÖÓÛÒ¸ Dº ÐeÜ ² Ýacc¸ ¾Òd edº dzÊeiÐÐÝ

² A××Ó ciaØe׸ ËeÔa×ØÓÔ Óи CA¸ ½99¾º

[ËhÒe8¾] ËhÒeideÖÑaÒ¸ Bº De×igÒiÒg cÓÑÔÙØeÖ ×Ý×ØeÑ Ñe××age׺ CÓÑÑÙÒica¹

ØiÓÒ× Óf Øhe ACŸ ¾5´9µ:6½¼ß6½½¸ ½98¾º 9