From 1858b34b8b0e34ff3a9a34cfa442efcee29e7a0d Mon Sep 17 00:00:00 2001 From: CoreJust Date: Wed, 2 Sep 2026 18:05:17 +0200 Subject: [PATCH] Add KIO article on Stack Graphs and CFL reachability --- .../StackGraphs_to_CFL_Reachability/IEEE.bst | 3608 +++++++++++++++++ .../article_body.tex | 304 ++ .../figure1.png | Bin 0 -> 65278 bytes .../figure3.png | Bin 0 -> 14112 bytes .../figure4.png | Bin 0 -> 17477 bytes .../figure5.png | Bin 0 -> 67985 bytes .../images/cc-by.png | Bin 0 -> 12588 bytes .../StackGraphs_to_CFL_Reachability/kioj6.cls | 1510 +++++++ .../StackGraphs_to_CFL_Reachability/main.pdf | Bin 0 -> 337524 bytes .../StackGraphs_to_CFL_Reachability/main.tex | 88 + .../references-clones.bib | 296 ++ .../references-en-prefixed.bib | 0 .../references.bib | 153 + .../ugost2008.bst | 3131 ++++++++++++++ 14 files changed, 9090 insertions(+) create mode 100644 InProgress/StackGraphs_to_CFL_Reachability/IEEE.bst create mode 100644 InProgress/StackGraphs_to_CFL_Reachability/article_body.tex create mode 100644 InProgress/StackGraphs_to_CFL_Reachability/figure1.png create mode 100644 InProgress/StackGraphs_to_CFL_Reachability/figure3.png create mode 100644 InProgress/StackGraphs_to_CFL_Reachability/figure4.png create mode 100644 InProgress/StackGraphs_to_CFL_Reachability/figure5.png create mode 100644 InProgress/StackGraphs_to_CFL_Reachability/images/cc-by.png create mode 100644 InProgress/StackGraphs_to_CFL_Reachability/kioj6.cls create mode 100644 InProgress/StackGraphs_to_CFL_Reachability/main.pdf create mode 100644 InProgress/StackGraphs_to_CFL_Reachability/main.tex create mode 100644 InProgress/StackGraphs_to_CFL_Reachability/references-clones.bib create mode 100644 InProgress/StackGraphs_to_CFL_Reachability/references-en-prefixed.bib create mode 100644 InProgress/StackGraphs_to_CFL_Reachability/references.bib create mode 100644 InProgress/StackGraphs_to_CFL_Reachability/ugost2008.bst diff --git a/InProgress/StackGraphs_to_CFL_Reachability/IEEE.bst b/InProgress/StackGraphs_to_CFL_Reachability/IEEE.bst new file mode 100644 index 000000000..e7324041d --- /dev/null +++ b/InProgress/StackGraphs_to_CFL_Reachability/IEEE.bst @@ -0,0 +1,3608 @@ +%% +%% IEEEtran.bst +%% BibTeX Bibliography Style file for IEEE Journals and Conferences (unsorted) +%% Version 1.14 (2015/08/26) +%% +%% Copyright (c) 2003-2015 Michael Shell +%% +%% +%% Original starting code base and algorithms obtained from the output of +%% Patrick W. Daly's makebst package as well as from prior versions of +%% IEEE BibTeX styles: +%% +%% 1. Howard Trickey and Oren Patashnik's ieeetr.bst (1985/1988) +%% 2. Silvano Balemi and Richard H. Roy's IEEEbib.bst (1993) +%% +%% Support sites: +%% http://www.michaelshell.org/tex/ieeetran/ +%% http://www.ctan.org/pkg/ieeetran +%% and/or +%% http://www.ieee.org/ +%% +%% For use with BibTeX version 0.99a or later +%% +%% This is a numerical citation style. +%% +%%************************************************************************* +%% Legal Notice: +%% This code is offered as-is without any warranty either expressed or +%% implied; without even the implied warranty of MERCHANTABILITY or +%% FITNESS FOR A PARTICULAR PURPOSE! +%% User assumes all risk. +%% In no event shall the IEEE or any contributor to this code be liable for +%% any damages or losses, including, but not limited to, incidental, +%% consequential, or any other damages, resulting from the use or misuse +%% of any information contained here. +%% +%% All comments are the opinions of their respective authors and are not +%% necessarily endorsed by the IEEE. +%% +%% This work is distributed under the LaTeX Project Public License (LPPL) +%% ( http://www.latex-project.org/ ) version 1.3, and may be freely used, +%% distributed and modified. A copy of the LPPL, version 1.3, is included +%% in the base LaTeX documentation of all distributions of LaTeX released +%% 2003/12/01 or later. +%% Retain all contribution notices and credits. +%% ** Modified files should be clearly indicated as such, including ** +%% ** renaming them and changing author support contact information. ** +%%************************************************************************* + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% DEFAULTS FOR THE CONTROLS OF THE BST STYLE %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% These are the defaults for the user adjustable controls. The values used +% here can be overridden by the user via IEEEtranBSTCTL entry type. + +% NOTE: The recommended LaTeX command to invoke a control entry type is: +% +%\makeatletter +%\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}} +%\def\@bstctlcite[#1]#2{\@bsphack +% \@for\@citeb:=#2\do{% +% \edef\@citeb{\expandafter\@firstofone\@citeb}% +% \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}% +% \@esphack} +%\makeatother +% +% It is called at the start of the document, before the first \cite, like: +% \bstctlcite{IEEEexample:BSTcontrol} +% +% IEEEtran.cls V1.6 and later does provide this command. + + + +% #0 turns off the display of the number for articles. +% #1 enables +FUNCTION {default.is.use.number.for.article} { #1 } + + +% #0 turns off the display of the paper and type fields in @inproceedings. +% #1 enables +FUNCTION {default.is.use.paper} { #1 } + + +% #0 turns off the display of urls +% #1 enables +FUNCTION {default.is.use.url} { #1 } + + +% #0 turns off the forced use of "et al." +% #1 enables +% When there are more than 6 authors, force et al. usage. +FUNCTION {default.is.forced.et.al} { #1 } + + +% The maximum number of names that can be present beyond which an "et al." +% usage is forced. Be sure that num.names.shown.with.forced.et.al (below) +% is not greater than this value! +% List up to 6 authors; if more, use the primary author + et al. +FUNCTION {default.max.num.names.before.forced.et.al} { #6 } + + +% The number of names that will be shown with a forced "et al.". +% Must be less than or equal to max.num.names.before.forced.et.al +% Show only the first author followed by "et al." +FUNCTION {default.num.names.shown.with.forced.et.al} { #1 } + + +% The maximum number of editor names that can appear before "et al." is forced. +% IEEE style allows up to 3 editors; if more, the first editor + et al. is used. +FUNCTION {default.max.num.editors.before.forced.et.al} { #3 } + + +% #0 turns off the alternate interword spacing for entries with URLs. +% #1 enables +% Disabled by default: the legacy x4 inter-word stretch produced visibly +% loose lines in entries that carry long URLs (blog/news/social-media +% references in particular). Long URLs are still broken safely by the +% \url{} command from the url/hyperref package. +FUNCTION {default.is.use.alt.interword.spacing} { #0 } + + +% If alternate interword spacing for entries with URLs is enabled, this is +% the interword spacing stretch factor that will be used. For example, the +% default "4" here means that the interword spacing in entries with URLs can +% stretch to four times normal. Does not have to be an integer. Note that +% the value specified here can be overridden by the user in their LaTeX +% code via a command such as: +% "\providecommand\BIBentryALTinterwordstretchfactor{1.5}" in addition to +% that via the IEEEtranBSTCTL entry type. +FUNCTION {default.ALTinterwordstretchfactor} { "1.5" } + + +% #0 turns off the "dashification" of repeated (i.e., identical to those +% of the previous entry) names. The IEEE normally does this. +% #1 enables +FUNCTION {default.is.dash.repeated.names} { #0 } + + +% The default name format control string. +FUNCTION {default.name.format.string}{ "{f.~}{vv~}{ll}{, jj}" } + + +% The default LaTeX font command for the names. +FUNCTION {default.name.latex.cmd}{ "" } + + +% The default URL prefix. +% NOTE: The leading "[Online]." (or "[Online Video].", etc.) is emitted by +% the format.online.marker function so that the medium can vary per entry +% type (videos, datasets, etc.). The prefix here therefore contains only +% the "Available:" portion that follows the medium marker. +FUNCTION {default.name.url.prefix}{ "Available:" } + + +% Other controls that cannot be accessed via IEEEtranBSTCTL entry type. + +% #0 turns off the terminal startup banner/completed message so as to +% operate more quietly. +% #1 enables +FUNCTION {is.print.banners.to.terminal} { #1 } + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% FILE VERSION AND BANNER %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION{bst.file.version} { "1.14" } +FUNCTION{bst.file.date} { "2015/08/26" } +FUNCTION{bst.file.website} { "http://www.michaelshell.org/tex/ieeetran/bibtex/" } + +FUNCTION {banner.message} +{ is.print.banners.to.terminal + { "-- IEEEtran.bst version" " " * bst.file.version * + " (" * bst.file.date * ") " * "by Michael Shell." * + top$ + "-- " bst.file.website * + top$ + "-- See the " quote$ * "IEEEtran_bst_HOWTO.pdf" * quote$ * " manual for usage information." * + top$ + } + { skip$ } + if$ +} + +FUNCTION {completed.message} +{ is.print.banners.to.terminal + { "" + top$ + "Done." + top$ + } + { skip$ } + if$ +} + + + + +%%%%%%%%%%%%%%%%%%%%%% +%% STRING CONSTANTS %% +%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {bbl.and}{ "and" } +FUNCTION {bbl.etal}{ "et~al." } +FUNCTION {bbl.editors}{ "Eds." } +FUNCTION {bbl.editor}{ "Ed." } +FUNCTION {bbl.edition}{ "ed." } +FUNCTION {bbl.volume}{ "vol." } +FUNCTION {bbl.of}{ "of" } +FUNCTION {bbl.number}{ "no." } +FUNCTION {bbl.in}{ "in" } +FUNCTION {bbl.pages}{ "pp." } +FUNCTION {bbl.page}{ "p." } +FUNCTION {bbl.chapter}{ "ch." } +FUNCTION {bbl.paper}{ "paper" } +FUNCTION {bbl.part}{ "pt." } +FUNCTION {bbl.patent}{ "Patent" } +FUNCTION {bbl.patentUS}{ "U.S." } +FUNCTION {bbl.revision}{ "Rev." } +FUNCTION {bbl.series}{ "ser." } +FUNCTION {bbl.standard}{ "Standard" } +FUNCTION {bbl.techrep}{ "Tech. Rep." } +FUNCTION {bbl.mthesis}{ "M.S. thesis" } +FUNCTION {bbl.phdthesis}{ "Ph.D. dissertation" } +FUNCTION {bbl.translator}{ "trans." } +FUNCTION {bbl.accessed}{ "Accessed:" } +FUNCTION {bbl.online}{ "[Online]." } +FUNCTION {bbl.onlinevideo}{ "[Online Video]." } +FUNCTION {bbl.available}{ "Available:" } +FUNCTION {bbl.article.no}{ "Art. no." } +FUNCTION {bbl.presented}{ "presented at" } +FUNCTION {bbl.arxiv}{ "arXiv:" } +FUNCTION {bbl.section}{ "sect." } +FUNCTION {bbl.st}{ "st" } +FUNCTION {bbl.nd}{ "nd" } +FUNCTION {bbl.rd}{ "rd" } +FUNCTION {bbl.th}{ "th" } + + +% This is the LaTeX spacer that is used when a larger than normal space +% is called for (such as just before the address:publisher). +FUNCTION {large.space} { "\hskip 1em plus 0.5em minus 0.4em\relax " } + +% The LaTeX code for dashes that are used to represent repeated names. +% Note: Some older IEEE journals used something like +% "\rule{0.275in}{0.5pt}\," which is fairly thick and runs right along +% the baseline. However, the IEEE now uses a thinner, above baseline, +% six dash long sequence. +FUNCTION {repeated.name.dashes} { "------" } + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% PREDEFINED STRING MACROS %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +MACRO {jan} {"Jan."} +MACRO {feb} {"Feb."} +MACRO {mar} {"Mar."} +MACRO {apr} {"Apr."} +MACRO {may} {"May"} +MACRO {jun} {"Jun."} +MACRO {jul} {"Jul."} +MACRO {aug} {"Aug."} +MACRO {sep} {"Sep."} +MACRO {oct} {"Oct."} +MACRO {nov} {"Nov."} +MACRO {dec} {"Dec."} + + + +%%%%%%%%%%%%%%%%%% +%% ENTRY FIELDS %% +%%%%%%%%%%%%%%%%%% + +ENTRY + { address + assignee + author + articleno + booktitle + chapter + day + dayfiled + edition + editor + eprint + eprinttype + howpublished + inlanguage + institution + intype + journal + key + language + medium + month + monthfiled + nationality + note + number + organization + pages + paper + publisher + repository + school + section + series + revision + title + titleraw + translator + type + url + urldate + doi + version + volume + year + yearfiled + CTLuse_article_number + CTLuse_paper + CTLuse_url + CTLuse_forced_etal + CTLmax_names_forced_etal + CTLnames_show_etal + CTLuse_alt_spacing + CTLalt_stretch_factor + CTLdash_repeated_names + CTLname_format_string + CTLname_latex_cmd + CTLname_url_prefix + } + {} + { label } + + + + +%%%%%%%%%%%%%%%%%%%%%%% +%% INTEGER VARIABLES %% +%%%%%%%%%%%%%%%%%%%%%%% + +INTEGERS { prev.status.punct this.status.punct punct.std + punct.no punct.comma punct.period + prev.status.space this.status.space space.std + space.no space.normal space.large + prev.status.quote this.status.quote quote.std + quote.no quote.close + prev.status.nline this.status.nline nline.std + nline.no nline.newblock + status.cap cap.std + cap.no cap.yes} + +INTEGERS { longest.label.width multiresult nameptr namesleft number.label numnames } + +INTEGERS { is.use.number.for.article + is.use.paper + is.use.url + is.forced.et.al + max.num.names.before.forced.et.al + max.num.editors.before.forced.et.al + num.names.shown.with.forced.et.al + is.use.alt.interword.spacing + is.dash.repeated.names} + + +%%%%%%%%%%%%%%%%%%%%%% +%% STRING VARIABLES %% +%%%%%%%%%%%%%%%%%%%%%% + +STRINGS { bibinfo + longest.label + oldname + s + t + ALTinterwordstretchfactor + name.format.string + name.latex.cmd + name.url.prefix} + +% String / integer scratch space for parsing the urldate field into +% (year, month-numeric, day) components. See parse.urldate below. +STRINGS { ud.y ud.m ud.d ud.tmp ud.parsed } +INTEGERS { ud.idx ud.len ud.space.pos } + + + + +%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOW LEVEL FUNCTIONS %% +%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {initialize.controls} +{ default.is.use.number.for.article 'is.use.number.for.article := + default.is.use.paper 'is.use.paper := + default.is.use.url 'is.use.url := + default.is.forced.et.al 'is.forced.et.al := + default.max.num.names.before.forced.et.al 'max.num.names.before.forced.et.al := + default.max.num.editors.before.forced.et.al 'max.num.editors.before.forced.et.al := + default.num.names.shown.with.forced.et.al 'num.names.shown.with.forced.et.al := + default.is.use.alt.interword.spacing 'is.use.alt.interword.spacing := + default.is.dash.repeated.names 'is.dash.repeated.names := + default.ALTinterwordstretchfactor 'ALTinterwordstretchfactor := + default.name.format.string 'name.format.string := + default.name.latex.cmd 'name.latex.cmd := + default.name.url.prefix 'name.url.prefix := +} + + +% This IEEEtran.bst features a very powerful and flexible mechanism for +% controlling the capitalization, punctuation, spacing, quotation, and +% newlines of the formatted entry fields. (Note: IEEEtran.bst does not need +% or use the newline/newblock feature, but it has been implemented for +% possible future use.) The output states of IEEEtran.bst consist of +% multiple independent attributes and, as such, can be thought of as being +% vectors, rather than the simple scalar values ("before.all", +% "mid.sentence", etc.) used in most other .bst files. +% +% The more flexible and complex design used here was motivated in part by +% the IEEE's rather unusual bibliography style. For example, the IEEE ends the +% previous field item with a period and large space prior to the publisher +% address; the @electronic entry types use periods as inter-item punctuation +% rather than the commas used by the other entry types; and URLs are never +% followed by periods even though they are the last item in the entry. +% Although it is possible to accommodate these features with the conventional +% output state system, the seemingly endless exceptions make for convoluted, +% unreliable and difficult to maintain code. +% +% IEEEtran.bst's output state system can be easily understood via a simple +% illustration of two most recently formatted entry fields (on the stack): +% +% CURRENT_ITEM +% "PREVIOUS_ITEM" +% +% which, in this example, is to eventually appear in the bibliography as: +% +% "PREVIOUS_ITEM," CURRENT_ITEM +% +% It is the job of the output routine to take the previous item off of the +% stack (while leaving the current item at the top of the stack), apply its +% trailing punctuation (including closing quote marks) and spacing, and then +% to write the result to BibTeX's output buffer: +% +% "PREVIOUS_ITEM," +% +% Punctuation (and spacing) between items is often determined by both of the +% items rather than just the first one. The presence of quotation marks +% further complicates the situation because, in standard English, trailing +% punctuation marks are supposed to be contained within the quotes. +% +% IEEEtran.bst maintains two output state (aka "status") vectors which +% correspond to the previous and current (aka "this") items. Each vector +% consists of several independent attributes which track punctuation, +% spacing, quotation, and newlines. Capitalization status is handled by a +% separate scalar because the format routines, not the output routine, +% handle capitalization and, therefore, there is no need to maintain the +% capitalization attribute for both the "previous" and "this" items. +% +% When a format routine adds a new item, it copies the current output status +% vector to the previous output status vector and (usually) resets the +% current (this) output status vector to a "standard status" vector. Using a +% "standard status" vector in this way allows us to redefine what we mean by +% "standard status" at the start of each entry handler and reuse the same +% format routines under the various inter-item separation schemes. For +% example, the standard status vector for the @book entry type may use +% commas for item separators, while the @electronic type may use periods, +% yet both entry handlers exploit many of the exact same format routines. +% +% Because format routines have write access to the output status vector of +% the previous item, they can override the punctuation choices of the +% previous format routine! Therefore, it becomes trivial to implement rules +% such as "Always use a period and a large space before the publisher." By +% pushing the generation of the closing quote mark to the output routine, we +% avoid all the problems caused by having to close a quote before having all +% the information required to determine what the punctuation should be. +% +% The IEEEtran.bst output state system can easily be expanded if needed. +% For instance, it is easy to add a "space.tie" attribute value if the +% bibliography rules mandate that two items have to be joined with an +% unbreakable space. + +FUNCTION {initialize.status.constants} +{ #0 'punct.no := + #1 'punct.comma := + #2 'punct.period := + #0 'space.no := + #1 'space.normal := + #2 'space.large := + #0 'quote.no := + #1 'quote.close := + #0 'cap.no := + #1 'cap.yes := + #0 'nline.no := + #1 'nline.newblock := +} + +FUNCTION {std.status.using.comma} +{ punct.comma 'punct.std := + space.normal 'space.std := + quote.no 'quote.std := + nline.no 'nline.std := + cap.no 'cap.std := +} + +FUNCTION {std.status.using.period} +{ punct.period 'punct.std := + space.normal 'space.std := + quote.no 'quote.std := + nline.no 'nline.std := + cap.yes 'cap.std := +} + +FUNCTION {initialize.prev.this.status} +{ punct.no 'prev.status.punct := + space.no 'prev.status.space := + quote.no 'prev.status.quote := + nline.no 'prev.status.nline := + punct.no 'this.status.punct := + space.no 'this.status.space := + quote.no 'this.status.quote := + nline.no 'this.status.nline := + cap.yes 'status.cap := +} + +FUNCTION {this.status.std} +{ punct.std 'this.status.punct := + space.std 'this.status.space := + quote.std 'this.status.quote := + nline.std 'this.status.nline := +} + +FUNCTION {cap.status.std}{ cap.std 'status.cap := } + +FUNCTION {this.to.prev.status} +{ this.status.punct 'prev.status.punct := + this.status.space 'prev.status.space := + this.status.quote 'prev.status.quote := + this.status.nline 'prev.status.nline := +} + + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ { skip$ } + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + { skip$ } + if$ +} + + +% convert the strings "yes" or "no" to #1 or #0 respectively +FUNCTION {yes.no.to.int} +{ "l" change.case$ duplicate$ + "yes" = + { pop$ #1 } + { duplicate$ "no" = + { pop$ #0 } + { "unknown boolean " quote$ * swap$ * quote$ * + " in " * cite$ * warning$ + #0 + } + if$ + } + if$ +} + + +% pushes true if the single char string on the stack is in the +% range of "0" to "9" +FUNCTION {is.num} +{ chr.to.int$ + duplicate$ "0" chr.to.int$ < not + swap$ "9" chr.to.int$ > not and +} + +% multiplies the integer on the stack by a factor of 10 +FUNCTION {bump.int.mag} +{ #0 'multiresult := + { duplicate$ #0 > } + { #1 - + multiresult #10 + + 'multiresult := + } + while$ +pop$ +multiresult +} + +% converts a single character string on the stack to an integer +FUNCTION {char.to.integer} +{ duplicate$ + is.num + { chr.to.int$ "0" chr.to.int$ - } + {"noninteger character " quote$ * swap$ * quote$ * + " in integer field of " * cite$ * warning$ + #0 + } + if$ +} + +% converts a string on the stack to an integer +FUNCTION {string.to.integer} +{ duplicate$ text.length$ 'namesleft := + #1 'nameptr := + #0 'numnames := + { nameptr namesleft > not } + { duplicate$ nameptr #1 substring$ + char.to.integer numnames bump.int.mag + + 'numnames := + nameptr #1 + + 'nameptr := + } + while$ +pop$ +numnames +} + + + + +% The output routines write out the *next* to the top (previous) item on the +% stack, adding punctuation and such as needed. Since IEEEtran.bst maintains +% the output status for the top two items on the stack, these output +% routines have to consider the previous output status (which corresponds to +% the item that is being output). Full independent control of punctuation, +% closing quote marks, spacing, and newblock is provided. +% +% "output.nonnull" does not check for the presence of a previous empty +% item. +% +% "output" does check for the presence of a previous empty item and will +% remove an empty item rather than outputing it. +% +% "output.warn" is like "output", but will issue a warning if it detects +% an empty item. + +FUNCTION {output.nonnull} +{ swap$ + prev.status.punct punct.comma = + { "," * } + { skip$ } + if$ + prev.status.punct punct.period = + { add.period$ } + { skip$ } + if$ + prev.status.quote quote.close = + { "''" * } + { skip$ } + if$ + prev.status.space space.normal = + { " " * } + { skip$ } + if$ + prev.status.space space.large = + { large.space * } + { skip$ } + if$ + write$ + prev.status.nline nline.newblock = + { newline$ "\newblock " write$ } + { skip$ } + if$ +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.warn} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +% "fin.entry" is the output routine that handles the last item of the entry +% (which will be on the top of the stack when "fin.entry" is called). + +FUNCTION {fin.entry} +{ this.status.punct punct.no = + { skip$ } + { add.period$ } + if$ + this.status.quote quote.close = + { "''" * } + { skip$ } + if$ +write$ +newline$ +} + + +FUNCTION {is.last.char.not.punct} +{ duplicate$ + "}" * add.period$ + #-1 #1 substring$ "." = +} + +FUNCTION {is.multiple.pages} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {capitalize}{ "u" change.case$ "t" change.case$ } + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "\emph{" swap$ * "}" * } + if$ +} + +FUNCTION {do.name.latex.cmd} +{ name.latex.cmd + empty$ + { skip$ } + { name.latex.cmd "{" * swap$ * "}" * } + if$ +} + +% IEEEtran.bst uses its own \BIBforeignlanguage command which directly +% invokes the TeX hyphenation patterns without the need of the Babel +% package. Babel does a lot more than switch hyphenation patterns and +% its loading can cause unintended effects in many class files (such as +% IEEEtran.cls). +FUNCTION {select.language} +{ duplicate$ empty$ 'pop$ + { language empty$ 'skip$ + { "\BIBforeignlanguage{" language * "}{" * swap$ * "}" * } + if$ + } + if$ +} + +FUNCTION {tie.or.space.prefix} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ +} + +FUNCTION {get.bbl.editor} +{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } + +FUNCTION {space.word}{ " " swap$ * " " * } + + +% Field Conditioners, Converters, Checkers and External Interfaces + +FUNCTION {empty.field.to.null.string} +{ duplicate$ empty$ + { pop$ "" } + { skip$ } + if$ +} + +FUNCTION {either.or.check} +{ empty$ + { pop$ } + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {empty.entry.warn} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ url empty$ + and and and and and and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + + +% The bibinfo system provides a way for the electronic parsing/acquisition +% of a bibliography's contents as is done by ReVTeX. For example, a field +% could be entered into the bibliography as: +% \bibinfo{volume}{2} +% Only the "2" would show up in the document, but the LaTeX \bibinfo command +% could do additional things with the information. IEEEtran.bst does provide +% a \bibinfo command via "\providecommand{\bibinfo}[2]{#2}". However, it is +% currently not used as the bogus bibinfo functions defined here output the +% entry values directly without the \bibinfo wrapper. The bibinfo functions +% themselves (and the calls to them) are retained for possible future use. +% +% bibinfo.check avoids acting on missing fields while bibinfo.warn will +% issue a warning message if a missing field is detected. Prior to calling +% the bibinfo functions, the user should push the field value and then its +% name string, in that order. + +FUNCTION {bibinfo.check} +{ swap$ duplicate$ missing$ + { pop$ pop$ "" } + { duplicate$ empty$ + { swap$ pop$ } + { swap$ pop$ } + if$ + } + if$ +} + +FUNCTION {bibinfo.warn} +{ swap$ duplicate$ missing$ + { swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ "" } + { duplicate$ empty$ + { swap$ "empty " swap$ * " in " * cite$ * warning$ } + { swap$ pop$ } + if$ + } + if$ +} + + +% The IEEE separates large numbers with more than 4 digits into groups of +% three. The IEEE uses a small space to separate these number groups. +% Typical applications include patent and page numbers. + +% number of consecutive digits required to trigger the group separation. +FUNCTION {large.number.trigger}{ #5 } + +% For numbers longer than the trigger, this is the blocksize of the groups. +% The blocksize must be less than the trigger threshold, and 2 * blocksize +% must be greater than the trigger threshold (can't do more than one +% separation on the initial trigger). +FUNCTION {large.number.blocksize}{ #3 } + +% What is actually inserted between the number groups. +FUNCTION {large.number.separator}{ "\," } + +% So as to save on integer variables by reusing existing ones, numnames +% holds the current number of consecutive digits read and nameptr holds +% the number that will trigger an inserted space. +FUNCTION {large.number.separate} +{ 't := + "" + #0 'numnames := + large.number.trigger 'nameptr := + { t empty$ not } + { t #-1 #1 substring$ is.num + { numnames #1 + 'numnames := } + { #0 'numnames := + large.number.trigger 'nameptr := + } + if$ + t #-1 #1 substring$ swap$ * + t #-2 global.max$ substring$ 't := + numnames nameptr = + { duplicate$ #1 nameptr large.number.blocksize - substring$ swap$ + nameptr large.number.blocksize - #1 + global.max$ substring$ + large.number.separator swap$ * * + nameptr large.number.blocksize - 'numnames := + large.number.blocksize #1 + 'nameptr := + } + { skip$ } + if$ + } + while$ +} + +% Converts all single dashes "-" to double dashes "--". +FUNCTION {n.dashify} +{ large.number.separate + 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + + +% This function detects entries with names that are identical to that of +% the previous entry and replaces the repeated names with dashes (if the +% "is.dash.repeated.names" user control is nonzero). +FUNCTION {name.or.dash} +{ 's := + oldname empty$ + { s 'oldname := s } + { s oldname = + { is.dash.repeated.names + { repeated.name.dashes } + { s 'oldname := s } + if$ + } + { s 'oldname := s } + if$ + } + if$ +} + +% Converts the number string on the top of the stack to +% "numerical ordinal form" (e.g., "7" to "7th"). There is +% no artificial limit to the upper bound of the numbers as the +% two least significant digits determine the ordinal form. +FUNCTION {num.to.ordinal} +{ duplicate$ #-2 #1 substring$ "1" = + { bbl.th * } + { duplicate$ #-1 #1 substring$ "1" = + { bbl.st * } + { duplicate$ #-1 #1 substring$ "2" = + { bbl.nd * } + { duplicate$ #-1 #1 substring$ "3" = + { bbl.rd * } + { bbl.th * } + if$ + } + if$ + } + if$ + } + if$ +} + +% If the string on the top of the stack begins with a number, +% (e.g., 11th) then replace the string with the leading number +% it contains. Otherwise retain the string as-is. s holds the +% extracted number, t holds the part of the string that remains +% to be scanned. +FUNCTION {extract.num} +{ duplicate$ 't := + "" 's := + { t empty$ not } + { t #1 #1 substring$ + t #2 global.max$ substring$ 't := + duplicate$ is.num + { s swap$ * 's := } + { pop$ "" 't := } + if$ + } + while$ + s empty$ + 'skip$ + { pop$ s } + if$ +} + +% Converts the word number string on the top of the stack to +% Arabic string form. Will be successful up to "tenth". +FUNCTION {word.to.num} +{ duplicate$ "l" change.case$ 's := + s "first" = + { pop$ "1" } + { skip$ } + if$ + s "second" = + { pop$ "2" } + { skip$ } + if$ + s "third" = + { pop$ "3" } + { skip$ } + if$ + s "fourth" = + { pop$ "4" } + { skip$ } + if$ + s "fifth" = + { pop$ "5" } + { skip$ } + if$ + s "sixth" = + { pop$ "6" } + { skip$ } + if$ + s "seventh" = + { pop$ "7" } + { skip$ } + if$ + s "eighth" = + { pop$ "8" } + { skip$ } + if$ + s "ninth" = + { pop$ "9" } + { skip$ } + if$ + s "tenth" = + { pop$ "10" } + { skip$ } + if$ +} + + +% Converts the string on the top of the stack to numerical +% ordinal (e.g., "11th") form. +FUNCTION {convert.edition} +{ duplicate$ empty$ 'skip$ + { duplicate$ #1 #1 substring$ is.num + { extract.num + num.to.ordinal + } + { word.to.num + duplicate$ #1 #1 substring$ is.num + { num.to.ordinal } + { "edition ordinal word " quote$ * edition * quote$ * + " may be too high (or improper) for conversion" * " in " * cite$ * warning$ + } + if$ + } + if$ + } + if$ +} + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LATEX BIBLIOGRAPHY CODE %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {start.entry} +{ newline$ + "\bibitem{" write$ + cite$ write$ + "}" write$ + newline$ + "" + initialize.prev.this.status +} + +% Here we write out all the LaTeX code that we will need. The most involved +% code sequences are those that control the alternate interword spacing and +% foreign language hyphenation patterns. The heavy use of \providecommand +% gives users a way to override the defaults. Special thanks to Javier Bezos, +% Johannes Braams, Robin Fairbairns, Heiko Oberdiek, Donald Arseneau and all +% the other gurus on comp.text.tex for their help and advice on the topic of +% \selectlanguage, Babel and BibTeX. +FUNCTION {begin.bib} +{ "% Generated by IEEEtran.bst, version: " bst.file.version * " (" * bst.file.date * ")" * + write$ newline$ + preamble$ empty$ 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" longest.label * "}" * + write$ newline$ + "\providecommand{\url}[1]{#1}" + write$ newline$ + "\csname url@samestyle\endcsname" + write$ newline$ + "\providecommand{\newblock}{\relax}" + write$ newline$ + "\providecommand{\bibinfo}[2]{#2}" + write$ newline$ + % User-configurable appearance hooks. Defaults match the historic + % IEEE.bst look (\small font, single line spacing, -5pt itemsep). + % Override from the document preamble, e.g.: + % \renewcommand{\bibfontsize}{\footnotesize} + % \renewcommand{\biblinespread}{1.1} + % \renewcommand{\bibitemsep}{0pt} + "\providecommand{\bibfontsize}{\small}" + write$ newline$ + "\providecommand{\biblinespread}{1.0}" + write$ newline$ + "\providecommand{\bibitemsep}{-5pt}" + write$ newline$ + "\bibfontsize\linespread{\biblinespread}\selectfont" + write$ newline$ + "\setlength{\itemsep}{\bibitemsep}" + write$ newline$ + "\providecommand{\BIBentrySTDinterwordspacing}{\spaceskip=0pt\relax}" + write$ newline$ + "\providecommand{\BIBentryALTinterwordstretchfactor}{" + ALTinterwordstretchfactor * "}" * + write$ newline$ + "\providecommand{\BIBentryALTinterwordspacing}{\spaceskip=\fontdimen2\font plus " + write$ newline$ + "\BIBentryALTinterwordstretchfactor\fontdimen3\font minus \fontdimen4\font\relax}" + write$ newline$ + "\providecommand{\BIBforeignlanguage}[2]{{%" + write$ newline$ + "\expandafter\ifx\csname l@#1\endcsname\relax" + write$ newline$ + "\typeout{** WARNING: IEEEtran.bst: No hyphenation pattern has been}%" + write$ newline$ + "\typeout{** loaded for the language `#1'. Using the pattern for}%" + write$ newline$ + "\typeout{** the default language instead.}%" + write$ newline$ + "\else" + write$ newline$ + "\language=\csname l@#1\endcsname" + write$ newline$ + "\fi" + write$ newline$ + "#2}}" + write$ newline$ + "\providecommand{\BIBdecl}{\relax}" + write$ newline$ + "\BIBdecl" + write$ newline$ +} + +FUNCTION {end.bib} +{ newline$ "\end{thebibliography}" write$ newline$ } + +FUNCTION {if.url.alt.interword.spacing} +{ is.use.alt.interword.spacing + { is.use.url + { url empty$ 'skip$ {"\BIBentryALTinterwordspacing" write$ newline$} if$ } + { skip$ } + if$ + } + { skip$ } + if$ +} + +FUNCTION {if.url.std.interword.spacing} +{ is.use.alt.interword.spacing + { is.use.url + { url empty$ 'skip$ {"\BIBentrySTDinterwordspacing" write$ newline$} if$ } + { skip$ } + if$ + } + { skip$ } + if$ +} + + + + +%%%%%%%%%%%%%%%%%%%%%%%% +%% LONGEST LABEL PASS %% +%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #1 'number.label := + #0 'longest.label.width := +} + +FUNCTION {longest.label.pass} +{ type$ "ieeetranbstctl" = + { skip$ } + { number.label int.to.str$ 'label := + number.label #1 + 'number.label := + label width$ longest.label.width > + { label 'longest.label := + label width$ 'longest.label.width := + } + { skip$ } + if$ + } + if$ +} + + + + +%%%%%%%%%%%%%%%%%%%%% +%% FORMAT HANDLERS %% +%%%%%%%%%%%%%%%%%%%%% + +%% Lower Level Formats (used by higher level formats) + +FUNCTION {format.address.org.or.pub.date} +{ 't := + "" + year empty$ + { "empty year in " cite$ * warning$ } + { skip$ } + if$ + address empty$ t empty$ and + year empty$ and month empty$ and + { skip$ } + { this.to.prev.status + this.status.std + cap.status.std + address "address" bibinfo.check * + t empty$ + { skip$ } + { punct.period 'prev.status.punct := + space.normal 'prev.status.space := + address empty$ + { skip$ } + { ": " * } + if$ + t * + } + if$ + % For foreign-language books / proceedings, the + % marker "(in Language)" is inserted between the publisher and the + % year, e.g. "Tokyo: Nihon Keizai Hyoronsha (in Japanese), 2000.". + inlanguage empty$ + { skip$ } + { " (in " * inlanguage "inlanguage" bibinfo.check * ")" * } + if$ + year empty$ month empty$ and + { skip$ } + { t empty$ address empty$ and + { skip$ } + { ", " * } + if$ + month empty$ + { year empty$ + { skip$ } + { year "year" bibinfo.check * } + if$ + } + { month "month" bibinfo.check * + % when both month and day are present (typical for + % conference proceedings), the date reads "Month Day, Year", + % e.g. "Jun. 2--6, 2003". Without a day it stays "Month Year". + day empty$ + { skip$ } + { " " * day "day" bibinfo.check * } + if$ + year empty$ + { skip$ } + { day empty$ + { " " * year "year" bibinfo.check * } + { ", " * year "year" bibinfo.check * } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + +FUNCTION {format.names} +{ 'bibinfo := + duplicate$ empty$ 'skip$ { + this.to.prev.status + this.status.std + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + name.format.string + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { nameptr num.names.shown.with.forced.et.al #1 + = + bibinfo "editor" = + { numnames max.num.editors.before.forced.et.al > } + { numnames max.num.names.before.forced.et.al > } + if$ + is.forced.et.al and and + { "others" 't := + #1 'namesleft := + } + { skip$ } + if$ + namesleft #1 > + { ", " * t do.name.latex.cmd * } + { s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { " " * bbl.etal emphasize * } + { numnames #2 > + { "," * } + { skip$ } + if$ + bbl.and + space.word * t do.name.latex.cmd * + } + if$ + } + if$ + } + { t do.name.latex.cmd } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + cap.status.std + } if$ +} + + + + +%% Higher Level Formats + +%% addresses/locations + +FUNCTION {format.address} +{ address duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + } + if$ +} + + +FUNCTION {format.doi} +{ doi empty$ + { "" } + { this.to.prev.status + this.status.std + "doi:\mylinkurl{" doi * "}" * + cap.status.std + } + if$ +} + + +%% author/editor names + +FUNCTION {format.authors} +{ author "author" format.names + author empty$ editor empty$ or + 'skip$ + { author editor = + { ", " * + editor num.names$ #1 > + 'bbl.editors + 'bbl.editor + if$ + * + } + 'skip$ + if$ + } + if$ +} + +FUNCTION {format.editors} +{ editor "editor" format.names duplicate$ empty$ 'skip$ + { ", " * + get.bbl.editor + capitalize + * + } + if$ +} + + + +%% date + +FUNCTION {format.date} +{ + month "month" bibinfo.check duplicate$ empty$ + year "year" bibinfo.check duplicate$ empty$ + { swap$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + "there's a month but no year in " cite$ * warning$ } + if$ + * + } + { this.to.prev.status + this.status.std + cap.status.std + swap$ 'skip$ + { + % If day is supplied, format as "Month Day, Year"; otherwise "Month Year". + day empty$ + { swap$ + " " * swap$ + } + { swap$ + " " * day * ", " * swap$ + } + if$ + } + if$ + * + } + if$ +} + +FUNCTION {format.date.electronic} +{ month "month" bibinfo.check duplicate$ empty$ + year "year" bibinfo.check duplicate$ empty$ + { swap$ + { pop$ } + { "there's a month but no year in " cite$ * warning$ + pop$ ")" * "(" swap$ * + this.to.prev.status + % The "(Date)" cluster is followed by a sentence + % separator (period in period-style entries, comma in + % comma-style entries). Inherit punct.std rather than + % suppressing it with punct.no. + punct.std 'this.status.punct := + space.normal 'this.status.space := + quote.no 'this.status.quote := + cap.yes 'status.cap := + } + if$ + } + { swap$ + { swap$ pop$ ")" * "(" swap$ * } + { % Render electronic dates as "(Month Day, Year)" when + % a day is available (e.g., online video, online manual), or as + % "(Month Year)" otherwise (e.g., online conference paper). + % Stack on entry: [month_val, year_val] (year on top). + day empty$ + { swap$ "(" swap$ * " " * swap$ * ")" * } + { swap$ "(" swap$ * " " * day * ", " * swap$ * ")" * } + if$ + } + if$ + this.to.prev.status + % "(Date)" is followed by a sentence separator inherited + % from the entry's std punctuation (period for online references, + % comma elsewhere). + punct.std 'this.status.punct := + space.normal 'this.status.space := + quote.no 'this.status.quote := + cap.yes 'status.cap := + } + if$ +} + + + +%% edition/title + +% Note: The IEEE considers the edition to be closely associated with +% the title of a book. So, in IEEEtran.bst the edition is normally handled +% within the formatting of the title. The format.edition function is +% retained here for possible future use. +FUNCTION {format.edition} +{ edition duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + convert.edition + status.cap + { "t" } + { "l" } + if$ change.case$ + "edition" bibinfo.check + "~" * bbl.edition * + cap.status.std + } + if$ +} + +% This is used to format the booktitle of a conference proceedings. +% Here we use the "intype" field to provide the user a way to +% override the word "in" (e.g., with things like "presented at") +% Use of intype stops the emphasis of the booktitle to indicate that +% we no longer mean the written conference proceedings, but the +% conference itself. +FUNCTION {format.in.booktitle} +{ booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + select.language + intype missing$ + { emphasize + bbl.in " " * + } + { intype " " * } + if$ + swap$ * + cap.status.std + } + if$ +} + +% This is used to format the booktitle of collection. +% Here the "intype" field is not supported, but "edition" is. +FUNCTION {format.in.booktitle.edition} +{ booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + select.language + emphasize + edition empty$ 'skip$ + { ", " * + edition + convert.edition + "l" change.case$ + * "~" * bbl.edition * + } + if$ + bbl.in " " * swap$ * + cap.status.std + } + if$ +} + + +FUNCTION {format.article.title} +{ title duplicate$ empty$ 'skip$ + { "t" change.case$ } + if$ + "title" bibinfo.check + titleraw empty$ + { skip$ } + { titleraw "t" change.case$ "titleraw" bibinfo.check + emphasize + swap$ " [" swap$ * "]" * * + } + if$ + duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + quote.close 'this.status.quote := + is.last.char.not.punct + { punct.std 'this.status.punct := } + { punct.no 'this.status.punct := } + if$ + select.language + "``" swap$ * + cap.status.std + } + if$ +} + + +FUNCTION {format.article.title.electronic} +{ title duplicate$ empty$ 'skip$ + { "t" change.case$ } + if$ + "title" bibinfo.check + titleraw empty$ + { skip$ } + { titleraw "t" change.case$ "titleraw" bibinfo.check + emphasize + swap$ " [" swap$ * "]" * * + } + if$ + duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + quote.close 'this.status.quote := + is.last.char.not.punct + { punct.std 'this.status.punct := } + { punct.no 'this.status.punct := } + if$ + select.language + "``" swap$ * + cap.status.std + } + if$ +} + + +FUNCTION {format.book.title.edition} +{ title "title" bibinfo.check + titleraw empty$ + { % No transliteration supplied: italicise the title itself. + duplicate$ empty$ 'skip$ 'emphasize if$ + } + { titleraw "titleraw" bibinfo.check + emphasize + swap$ " [" swap$ * "]" * * + } + if$ + duplicate$ empty$ + { "empty title in " cite$ * warning$ } + { this.to.prev.status + this.status.std + select.language + edition empty$ 'skip$ + { ", " * + edition + convert.edition + status.cap + { "t" } + { "l" } + if$ + change.case$ + * "~" * bbl.edition * + } + if$ + cap.status.std + } + if$ +} + + +FUNCTION {format.book.title} +{ title "title" bibinfo.check + titleraw empty$ + { % No transliteration supplied: italicise the title itself. + duplicate$ empty$ 'skip$ 'emphasize if$ + } + { titleraw "titleraw" bibinfo.check + emphasize + swap$ " [" swap$ * "]" * * + } + if$ + duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + select.language + } + if$ +} + + + +%% journal + +FUNCTION {format.journal} +{ journal duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + select.language + emphasize + } + if$ +} + + +%% Plain (un-italicised) variant of format.journal — used for blog +%% references where the blog source title is set in roman type. +FUNCTION {format.journal.plain} +{ journal duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + select.language + } + if$ +} + + + +%% how published + +FUNCTION {format.howpublished} +{ howpublished duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + } + if$ +} + + + +%% institutions/organization/publishers/school + +FUNCTION {format.institution} +{ institution duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + } + if$ +} + +FUNCTION {format.organization} +{ organization duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + } + if$ +} + +FUNCTION {format.address.publisher.date} +{ publisher "publisher" bibinfo.warn format.address.org.or.pub.date } + +FUNCTION {format.address.publisher.date.nowarn} +{ publisher "publisher" bibinfo.check format.address.org.or.pub.date } + +FUNCTION {format.address.organization.date} +{ organization "organization" bibinfo.check format.address.org.or.pub.date } + +FUNCTION {format.school} +{ school duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + } + if$ +} + + + +%% volume/number/series/chapter/pages + +FUNCTION {format.volume} +{ volume empty.field.to.null.string + duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + bbl.volume + status.cap + { capitalize } + { skip$ } + if$ + swap$ tie.or.space.prefix + "volume" bibinfo.check + * * + cap.status.std + } + if$ +} + +FUNCTION {format.number} +{ number empty.field.to.null.string + duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + status.cap + { bbl.number capitalize } + { bbl.number } + if$ + swap$ tie.or.space.prefix + "number" bibinfo.check + * * + cap.status.std + } + if$ +} + +FUNCTION {format.number.if.use.for.article} +{ is.use.number.for.article + { format.number } + { "" } + if$ +} + +% The series title (and any series volume number) is treated +% as an extension of the book/proceedings title and is enclosed in +% parentheses immediately after it, e.g. "Title (Series Title, 67)". +% We deliberately bind the parenthesised series to the previous item +% (the title) with a space rather than a comma so the parenthesis sits +% flush against the title in the rendered bibliography. +% This is the BOOK style. See format.series.in for the conference style. +FUNCTION {format.series} +{ series empty$ + { "" } + { this.to.prev.status + this.status.std + punct.no 'prev.status.punct := + space.normal 'prev.status.space := + "(" series "series" bibinfo.check * ")" * + cap.status.std + } + if$ +} + + +%% Series formatter for CONFERENCE PROCEEDINGS. +%% Conference Proceedings With Series Title: +%% "in Abbreviated Name of Conf., in Series Title, vol. X, X ed., ..." +%% The series here is rendered in roman type (no italics) and prefixed +%% with "in ", not wrapped in parentheses as it is for books. +FUNCTION {format.series.in} +{ series empty$ + { "" } + { this.to.prev.status + this.status.std + bbl.in " " * + series "series" bibinfo.check * + cap.status.std + } + if$ +} + + +FUNCTION {format.chapter} +{ chapter empty$ + { "" } + { this.to.prev.status + this.status.std + type empty$ + { bbl.chapter } + { type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + cap.status.std + } + if$ +} + + +% The intended use of format.paper is for paper numbers of inproceedings. +% The paper type can be overridden via the type field. +% We allow the type to be displayed even if the paper number is absent +% for things like "postdeadline paper" +FUNCTION {format.paper} +{ is.use.paper + { paper empty$ + { type empty$ + { "" } + { this.to.prev.status + this.status.std + type "type" bibinfo.check + cap.status.std + } + if$ + } + { this.to.prev.status + this.status.std + type empty$ + { bbl.paper } + { type "type" bibinfo.check } + if$ + " " * paper + "paper" bibinfo.check + * + cap.status.std + } + if$ + } + { "" } + if$ +} + + +FUNCTION {format.pages} +{ pages duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + duplicate$ is.multiple.pages + { + bbl.pages swap$ + n.dashify + } + { + bbl.page swap$ + } + if$ + tie.or.space.prefix + "pages" bibinfo.check + * * + cap.status.std + } + if$ +} + + + +%% technical report number + +FUNCTION {format.tech.report.number} +{ number "number" bibinfo.check + this.to.prev.status + this.status.std + cap.status.std + type duplicate$ empty$ + { pop$ + bbl.techrep + } + { skip$ } + if$ + "type" bibinfo.check + swap$ duplicate$ empty$ + { pop$ } + { tie.or.space.prefix * * } + if$ +} + + + +%% note + +FUNCTION {format.note} +{ note empty$ + { "" } + { this.to.prev.status + this.status.std + punct.period 'this.status.punct := + note #1 #1 substring$ + duplicate$ "{" = + { skip$ } + { status.cap + { "u" } + { "l" } + if$ + change.case$ + } + if$ + note #2 global.max$ substring$ * + "(" swap$ * ")" * % <-- ADDED: wraps note in parentheses + "note" bibinfo.check + cap.yes 'status.cap := + } + if$ +} + + + +%% patent + +FUNCTION {format.patent.date} +{ this.to.prev.status + this.status.std + year empty$ + { monthfiled duplicate$ empty$ + { "monthfiled" bibinfo.check pop$ "" } + { "monthfiled" bibinfo.check } + if$ + dayfiled duplicate$ empty$ + { "dayfiled" bibinfo.check pop$ " " * } + { "dayfiled" bibinfo.check + monthfiled empty$ + { "dayfiled without a monthfiled in " cite$ * warning$ + * + } + { " " swap$ * * } + if$ + } + if$ + yearfiled empty$ + { "no year or yearfiled in " cite$ * warning$ } + { yearfiled "yearfiled" bibinfo.check + swap$ + duplicate$ empty$ + { pop$ } + { ", " * swap$ * } + if$ + } + if$ + } + { month duplicate$ empty$ + { "month" bibinfo.check pop$ "" } + { "month" bibinfo.check } + if$ + day duplicate$ empty$ + { "day" bibinfo.check pop$ "" * } + { "day" bibinfo.check + month empty$ + { "day without a month in " cite$ * warning$ + * + } + { " " swap$ * * } + if$ + } + if$ + year "year" bibinfo.check + swap$ + duplicate$ empty$ + { pop$ } + { ", " * swap$ * } + if$ + } + if$ + cap.status.std +} + +FUNCTION {format.patent.nationality.type.number} +{ this.to.prev.status + this.status.std + nationality duplicate$ empty$ + { "nationality" bibinfo.warn pop$ "" } + { "nationality" bibinfo.check + duplicate$ "l" change.case$ "united states" = + { pop$ bbl.patentUS } + { skip$ } + if$ + " " * + } + if$ + type empty$ + { bbl.patent "type" bibinfo.check } + { type "type" bibinfo.check } + if$ + * + number duplicate$ empty$ + { "number" bibinfo.warn pop$ } + { "number" bibinfo.check + large.number.separate + swap$ " " * swap$ * + } + if$ + cap.status.std +} + + + +%% standard + +FUNCTION {format.organization.institution.standard.type.number} +{ this.to.prev.status + this.status.std + organization duplicate$ empty$ + { pop$ + institution duplicate$ empty$ + { "institution" bibinfo.warn } + { "institution" bibinfo.warn " " * } + if$ + } + { "organization" bibinfo.warn " " * } + if$ + type empty$ + { bbl.standard "type" bibinfo.check } + { type "type" bibinfo.check } + if$ + * + number duplicate$ empty$ + { "number" bibinfo.check pop$ } + { "number" bibinfo.check + large.number.separate + swap$ " " * swap$ * + } + if$ + cap.status.std +} + +FUNCTION {format.revision} +{ revision empty$ + { "" } + { this.to.prev.status + this.status.std + bbl.revision + revision tie.or.space.prefix + "revision" bibinfo.check + * * + cap.status.std + } + if$ +} + + +%% thesis + +FUNCTION {format.master.thesis.type} +{ this.to.prev.status + this.status.std + type empty$ + { + bbl.mthesis + } + { + type "type" bibinfo.check + } + if$ +cap.status.std +} + +FUNCTION {format.phd.thesis.type} +{ this.to.prev.status + this.status.std + type empty$ + { + bbl.phdthesis + } + { + type "type" bibinfo.check + } + if$ +cap.status.std +} + + + +%% URL +%% A reference may carry both a DOI and a URL; in that +%% case the DOI is rendered first, terminated by a period, and the URL +%% follows. Earlier versions of IEEEtran.bst suppressed the URL whenever +%% a DOI was present — we drop that suppression so both fields render. +FUNCTION {format.url} +{ is.use.url + { url empty$ + { "" } + { this.to.prev.status + this.status.std + cap.yes 'status.cap := + name.url.prefix " " * + "\url{" * url * "}" * + punct.no 'this.status.punct := + punct.period 'prev.status.punct := + space.normal 'this.status.space := + space.normal 'prev.status.space := + quote.no 'this.status.quote := + } + if$ + } + { "" } + if$ +} + + +%% "(in Language)" marker — placed immediately after the article/paper +%% title for non-English publications ("Periodical +%% in Other Language" and "Manual" online). Output form: +%% "(in German)", "(in Russian)" etc. Reads from the `inlanguage` +%% field (kept distinct from `language`, which is consumed by +%% \BIBforeignlanguage for hyphenation only). +%% +%% IEEE convention: the marker is ALWAYS followed by a comma, but the +%% punctuation BEFORE it depends on the entry type: +%% - period before "(in Lang)" --> Video, Lecture +%% e.g. "Title of Video. (in Language), (Release date)." +%% - comma before "(in Lang)" --> Article, Manual, Book +%% e.g. "Title, (in Language), x ed. (Year)." +%% +%% format.in.language therefore leaves prev.status.punct alone (so it +%% inherits whatever the previous format function set, typically the +%% entry-level std punctuation) and forces this.status.punct to comma +%% so the following item is joined with a comma. +%% Handlers that want a comma BEFORE "(in Lang)" in a period-style +%% entry (e.g. @manual online) override this.status.punct := comma on +%% the title BEFORE calling format.in.language. +FUNCTION {format.in.language} +{ inlanguage duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + punct.comma 'this.status.punct := + space.normal 'this.status.space := + "inlanguage" bibinfo.check + "(in " swap$ * ")" * + cap.status.std + } + if$ +} + + +%% translator (used for translated books, conference proceedings, etc.) +%% Output form: "trans. J. K. Translator" +FUNCTION {format.translator} +{ translator duplicate$ empty$ 'skip$ + { pop$ + translator "translator" format.names + duplicate$ empty$ 'skip$ + { bbl.translator " " * swap$ * } + if$ + } + if$ +} + +% The `urldate` field in the .bib can be written in any of the three +% popular formats; this section parses it and reformats to IEEE +% "Mon. DD, YYYY" before it ever reaches the output. Inputs: +% * ISO "YYYY-MM-DD" e.g. 2026-04-06 +% * GOST "DD.MM.YYYY" e.g. 06.04.2026 +% * IEEE "Mon. DD, YYYY" (also accepts "Month DD, YYYY") e.g. Apr. 6, 2026 +FUNCTION {ud.unpad} +{ duplicate$ text.length$ #2 = + { duplicate$ #1 #1 substring$ "0" = + { #2 #1 substring$ } + { skip$ } + if$ + } + { skip$ } + if$ +} + +FUNCTION {ud.month.num.to.abbrev} +{ duplicate$ "01" = { pop$ "Jan." } { + duplicate$ "02" = { pop$ "Feb." } { + duplicate$ "03" = { pop$ "Mar." } { + duplicate$ "04" = { pop$ "Apr." } { + duplicate$ "05" = { pop$ "May" } { + duplicate$ "06" = { pop$ "Jun." } { + duplicate$ "07" = { pop$ "Jul." } { + duplicate$ "08" = { pop$ "Aug." } { + duplicate$ "09" = { pop$ "Sep." } { + duplicate$ "10" = { pop$ "Oct." } { + duplicate$ "11" = { pop$ "Nov." } { + duplicate$ "12" = { pop$ "Dec." } { + skip$ + } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ +} + +FUNCTION {ud.month.name.to.num} +{ duplicate$ #1 #3 substring$ "l" change.case$ 'ud.tmp := + ud.tmp "jan" = + { pop$ "01" } + { ud.tmp "feb" = + { pop$ "02" } + { ud.tmp "mar" = + { pop$ "03" } + { ud.tmp "apr" = + { pop$ "04" } + { ud.tmp "may" = + { pop$ "05" } + { ud.tmp "jun" = + { pop$ "06" } + { ud.tmp "jul" = + { pop$ "07" } + { ud.tmp "aug" = + { pop$ "08" } + { ud.tmp "sep" = + { pop$ "09" } + { ud.tmp "oct" = + { pop$ "10" } + { ud.tmp "nov" = + { pop$ "11" } + { ud.tmp "dec" = + { pop$ "12" } + { skip$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + +FUNCTION {parse.urldate} +{ "no" 'ud.parsed := + "" 'ud.y := "" 'ud.m := "" 'ud.d := + urldate empty$ 'skip$ + { urldate text.length$ 'ud.len := + ud.len #10 = + { % ISO YYYY-MM-DD? + urldate #5 #1 substring$ "-" = + urldate #8 #1 substring$ "-" = and + { urldate #1 #4 substring$ 'ud.y := + urldate #6 #2 substring$ 'ud.m := + urldate #9 #2 substring$ 'ud.d := + "yes" 'ud.parsed := + } + { % GOST DD.MM.YYYY? + urldate #3 #1 substring$ "." = + urldate #6 #1 substring$ "." = and + { urldate #1 #2 substring$ 'ud.d := + urldate #4 #2 substring$ 'ud.m := + urldate #7 #4 substring$ 'ud.y := + "yes" 'ud.parsed := + } + { skip$ } + if$ + } + if$ + } + { skip$ } + if$ + ud.parsed "no" = + { ud.len #7 > + { urldate ud.len #3 - #4 substring$ 'ud.y := + urldate ud.len #4 - #1 substring$ " " = + urldate ud.len #5 - #1 substring$ "," = and + { % Pre-year (positions 1..len-6) = "Mon[.] DD". + % Find first space to separate month from day. + #1 'ud.idx := + #0 'ud.space.pos := + { ud.idx ud.len #5 - < + ud.space.pos #0 = and + } + { urldate ud.idx #1 substring$ " " = + { ud.idx 'ud.space.pos := } + { skip$ } + if$ + ud.idx #1 + 'ud.idx := + } + while$ + ud.space.pos #0 > + { urldate #1 ud.space.pos #1 - substring$ + ud.month.name.to.num 'ud.m := + urldate ud.space.pos #1 + + ud.len #6 - ud.space.pos - + substring$ 'ud.d := + "yes" 'ud.parsed := + } + { skip$ } + if$ + } + { skip$ } + if$ + } + { skip$ } + if$ + } + { skip$ } + if$ + } + if$ +} + +FUNCTION {urldate.in.ieee.style} +{ parse.urldate + ud.parsed "yes" = + { ud.m ud.month.num.to.abbrev " " * ud.d ud.unpad * ", " * ud.y * } + { urldate } + if$ +} + + +%% accessed date (used for online references) +%% Output form: "Accessed: Month Day, Year" +%% IEEE: the accessed-date phrase is preceded by a period (not a comma), +%% even inside comma-style entries. +FUNCTION {format.urldate} +{ urldate duplicate$ empty$ 'skip$ + { pop$ + this.to.prev.status + this.status.std + punct.period 'prev.status.punct := + space.normal 'prev.status.space := + urldate.in.ieee.style + "urldate" bibinfo.check + bbl.accessed " " * swap$ * + cap.yes 'status.cap := + } + if$ +} + + +%% Social-media variant of format.urldate — omits the colon after +%% "Accessed" to match the social-media layout +%% ("Accessed Apr. 19, 2021" instead of "Accessed: Apr. 19, 2021"). +FUNCTION {format.urldate.social} +{ urldate duplicate$ empty$ 'skip$ + { pop$ + this.to.prev.status + this.status.std + punct.period 'prev.status.punct := + space.normal 'prev.status.space := + urldate.in.ieee.style + "urldate" bibinfo.check + "Accessed " swap$ * + cap.yes 'status.cap := + } + if$ +} + + +%% [Online]. / [Online Video]. marker +%% IEEE style: the preceding field is terminated with a period before the +%% medium marker, regardless of whether the entry uses comma- or +%% period-style internal separators. We override prev.status.punct to +%% period but leave prev.status.quote intact so that a quoted title that +%% immediately precedes the marker still gets its closing "''" written. +FUNCTION {format.online.marker} +{ url empty$ + { "" } + { this.to.prev.status + this.status.std + punct.period 'prev.status.punct := + space.normal 'prev.status.space := + medium empty$ + { bbl.online } + { "[" medium * "]." * } + if$ + punct.no 'this.status.punct := + space.normal 'this.status.space := + cap.yes 'status.cap := + } + if$ +} + + +%% Article ID (Art. no. XXX) for periodicals identified by article number +FUNCTION {format.articleno} +{ articleno duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + "articleno" bibinfo.check + bbl.article.no " " * swap$ * + cap.status.std + } + if$ +} + + +%% arXiv preprint: "arXiv:XXXX.XXXXX" +FUNCTION {format.eprint} +{ eprint duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + "eprint" bibinfo.check + eprinttype empty$ + { bbl.arxiv swap$ * emphasize } + { eprinttype "l" change.case$ "arxiv" = + { bbl.arxiv swap$ * emphasize } + { eprinttype ":" * swap$ * emphasize } + if$ + } + if$ + cap.status.std + } + if$ +} + + +%% Software version (for @software entries) +FUNCTION {format.version} +{ version duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + "version" bibinfo.check + "(" swap$ * ")" * + cap.status.std + } + if$ +} + + +%% Repository / archive name (for @software entries) +FUNCTION {format.repository} +{ repository duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + "repository" bibinfo.check + cap.status.std + } + if$ +} + + +%% Section (sect. x) used in books/chapters +FUNCTION {format.section} +{ section duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + "section" bibinfo.check + bbl.section swap$ tie.or.space.prefix * * + cap.status.std + } + if$ +} + + + + +%%%%%%%%%%%%%%%%%%%% +%% ENTRY HANDLERS %% +%%%%%%%%%%%%%%%%%%%% + + +% Note: In many journals, the IEEE (or the authors) tend not to show the number +% for articles, so the display of the number is controlled here by the +% switch "is.use.number.for.article" +FUNCTION {article} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.in.language output + format.journal "journal" bibinfo.check "journal" output.warn + format.volume output + format.number.if.use.for.article output + articleno empty$ + { format.pages output } + { skip$ } + if$ + format.date "year" output.warn + format.articleno output + format.note output + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + if.url.std.interword.spacing +} + + +FUNCTION {book} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + author empty$ + { format.editors "author and editor" output.warn } + { format.authors output.nonnull } + if$ + name.or.dash + format.book.title.edition output + format.series output + author empty$ + { skip$ } + { format.editors output } + if$ + format.translator output + format.address.publisher.date output + format.volume output + format.number output + format.chapter output + format.section output + format.pages output + format.note output + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {booklet} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.article.title "title" output.warn + format.howpublished "howpublished" bibinfo.check output + format.organization "organization" bibinfo.check output + format.address "address" bibinfo.check output + format.date output + format.note output + format.doi output + format.url output + fin.entry + if.url.std.interword.spacing +} + +%% @electronic — generic online reference (also the target of the +%% @online / @website / @socialmedia / @webpage / @internet / @www +%% aliases). "Websites" prescribes a roman +%% (non-italicised) website / source title: +%% J. K. Author. "Page Title." Website Title. Accessed: Date. +%% [Online]. Available: URL +%% We therefore render the `journal` field through format.journal.plain +%% rather than the italicising format.journal used by periodicals. +FUNCTION {electronic} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.date.electronic output + format.article.title.electronic output + format.journal.plain output + format.howpublished "howpublished" bibinfo.check output + format.organization "organization" bibinfo.check output + format.address "address" bibinfo.check output + format.note output + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + empty.entry.warn + if.url.std.interword.spacing +} + +FUNCTION {inbook} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + author empty$ + { format.editors "author and editor" output.warn } + { format.authors output.nonnull } + if$ + name.or.dash + format.book.title.edition output + format.series output + author empty$ + { skip$ } + { format.editors output } + if$ + format.translator output + format.address.publisher.date output + format.volume output + format.number output + format.chapter output + format.section output + format.pages output + format.note output + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {incollection} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + % NOTE: for books/chapters the "(in Language)" marker is placed between + % the publisher and the year by format.address.publisher.date — NOT + % after the chapter title. We therefore do NOT call format.in.language + % here. + format.in.booktitle "booktitle" output.warn + format.series output + format.editors output + format.translator output + % the edition is placed AFTER editors and translator, + % immediately before the address/publisher block, e.g. + % "in BookTitle, X. Editor, Ed., trans. T. Translator, 3rd ed. City: ..." + format.edition output + format.address.publisher.date.nowarn output + format.volume output + format.number output + format.chapter output + format.section output + format.pages output + format.note output + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {inproceedings} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + % "(in Language)" goes right after the closing quote of the + % paper title, before "in Abbreviated Name of Conf.". + format.in.language output + format.in.booktitle "booktitle" output.warn + % Series for conference proceedings: prefixed with "in ", roman type + % (NOT parenthesised — that is the book layout). + format.series.in output + format.editors output + format.volume output + format.number output + % Edition comes after vol./no., immediately before the date block + % ("Conference Proceedings With Series Title, Volume Title, + % and Edition": "... vol. X, X ed., Jul. 2006, pp. 4301-4304."). + format.edition output + publisher empty$ + { format.address.organization.date output } + { format.organization "organization" bibinfo.check output + format.address.publisher.date output + } + if$ + format.paper output + format.pages output + format.note output + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + if.url.std.interword.spacing +} + +%% @manual covers two layouts: +%% +%% Print Handbook / Manual: +%% Name of Manual/Handbook, (in Language), x ed., Abbrev. Name of Co., +%% City of Co., State, Year, pp. xxx--xxx. +%% +%% Manual/Handbook (Online): +%% J. K. Author (or Abbrev. Name of Co., City, State, Country). +%% Name of Manual/Handbook, (in Language), x ed. (Year). +%% Accessed: Month Day, Year. [Online]. Available: URL +%% +%% The presence of a url or urldate field switches the entry to the +%% online layout: period-style separators and a parenthesised "(Year)". +FUNCTION {manual} +{ url empty$ urldate empty$ and + { std.status.using.comma } + { std.status.using.period } + if$ + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.book.title "title" output.warn + % Manual (Online) renders "Title, (in Language), x ed. + % (Year)." with commas around "(in Lang)" and "x ed." even though + % the surrounding entry is period-style. Override the title's + % trailing punctuation here so that "(in Lang)" / "x ed." are + % comma-joined to the title. + url empty$ urldate empty$ and + { skip$ } + { punct.comma 'this.status.punct := + space.normal 'this.status.space := + } + if$ + format.in.language output + format.edition output + url empty$ urldate empty$ and + { % Print manual: organization, address, plain year, pages. + format.organization "organization" bibinfo.check output + format.address "address" bibinfo.check output + format.date output + format.pages output + } + { % Online manual: "(Year)." then "Accessed: ..." then [Online]/URL. + format.organization "organization" bibinfo.check output + format.address "address" bibinfo.check output + format.date.electronic output + format.pages output + } + if$ + format.howpublished "howpublished" bibinfo.check output + format.note output + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + if.url.std.interword.spacing +} + +%% Master's thesis (Q. Theses and Dissertations). +%% Basic Format: +%% J. K. Author, "Title of thesis," (in Language), M.S. thesis, +%% Abbrev. Dept., Abbrev. Univ., City, Abbrev. State, Year. +%% [Online]. Available: URL +FUNCTION {mastersthesis} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.in.language output + format.master.thesis.type output.nonnull + format.school "school" bibinfo.warn output + format.address "address" bibinfo.check output + format.date "year" output.warn + format.note output + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + if.url.std.interword.spacing +} + +%% @misc — generic fallback handler, also used as the target of the +%% @preprint / @arxiv aliases. "Preprint arXiv" +%% prescribes: +%% J. K. Author, "Title of paper," (in Language), Year, arXiv:number. +%% The "(in Language)" marker is therefore inserted right after the +%% quoted title; the eprint cluster prints "arXiv:NNNN" via +%% format.eprint. +FUNCTION {misc} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.article.title "title" output.warn + format.in.language output + format.howpublished "howpublished" bibinfo.check output + format.organization "organization" bibinfo.check output + format.address "address" bibinfo.check output + format.pages output + format.date output + format.eprint output + format.note output + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + empty.entry.warn + if.url.std.interword.spacing +} + +%% Year-first electronic date — "(Year, Month Day)" or "(Year)". +%% Used by the @government and @patentonline layouts where the IEEE +%% prescribes year-first parenthesised dates (distinct from the +%% month-first format produced by format.date.electronic). +FUNCTION {format.date.year.first.electronic} +{ month "month" bibinfo.check duplicate$ empty$ + year "year" bibinfo.check duplicate$ empty$ + { swap$ + { pop$ } + { "there's a month but no year in " cite$ * warning$ + pop$ ")" * "(" swap$ * + this.to.prev.status + punct.std 'this.status.punct := + space.normal 'this.status.space := + quote.no 'this.status.quote := + cap.yes 'status.cap := + } + if$ + } + { swap$ + { swap$ pop$ ")" * "(" swap$ * } + { % Both month and year present. Render as "(Year, Month Day)" + % when day is set, or "(Year, Month)" otherwise. + % Stack on entry: [month_val, year_val] (year on top). + day empty$ + { "(" swap$ * ", " * swap$ * ")" * } + { "(" swap$ * ", " * swap$ * " " * day * ")" * } + if$ + } + if$ + this.to.prev.status + punct.std 'this.status.punct := + space.normal 'this.status.space := + quote.no 'this.status.quote := + cap.yes 'status.cap := + } + if$ +} + + +%% Patent inventor formatter — "by Author1 and Author2". +%% Joined to the preceding (title) field with a comma: +%% "Screwless clip mounted computer drive, by D. Williams." +FUNCTION {format.patent.invented.by} +{ author duplicate$ empty$ 'skip$ + { pop$ + author "author" format.names + duplicate$ empty$ 'skip$ + { punct.comma 'prev.status.punct := + space.normal 'prev.status.space := + "by " swap$ * + } + if$ + } + if$ +} + + +%% Patent (L. Patent) +%% Basic Format: +%% J. K. Author, "Title of patent," (in Language), Country Patent xxx, +%% Month Day, Year. +%% The "(in Language)" marker (when supplied) is inserted between the +%% quoted patent title and the "Country Patent xxx" cluster. +FUNCTION {patent} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.article.title output + format.in.language output + format.patent.nationality.type.number output + format.patent.date output + format.note output + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + empty.entry.warn + if.url.std.interword.spacing +} + +FUNCTION {periodical} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.editors output + name.or.dash + format.book.title "title" output.warn + format.series output + format.volume output + format.number output + format.organization "organization" bibinfo.check output + format.date "year" output.warn + format.note output + format.doi output + format.url output + fin.entry + if.url.std.interword.spacing +} + +%% Ph.D. dissertation (Q. Theses and Dissertations). +%% Basic Format: +%% J. K. Author, "Title of dissertation," (in Language), Ph.D. +%% dissertation, Abbrev. Dept., Abbrev. Univ., City, Abbrev. State, +%% Year. [Online]. Available: URL +FUNCTION {phdthesis} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.in.language output + format.phd.thesis.type output.nonnull + format.school "school" bibinfo.warn output + format.address "address" bibinfo.check output + format.date "year" output.warn + format.note output + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {proceedings} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.editors output + name.or.dash + format.book.title "title" output.warn + format.series output + format.volume output + format.number output + publisher empty$ + { format.address.organization.date output } + { format.organization "organization" bibinfo.check output + format.address.publisher.date output + } + if$ + format.note output + format.doi output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {standard} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.book.title "title" output.warn + format.howpublished "howpublished" bibinfo.check output + format.organization.institution.standard.type.number output + format.address "address" bibinfo.check output + format.revision output + format.date output + format.note output + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {techreport} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.howpublished "howpublished" bibinfo.check output + format.institution "institution" bibinfo.warn output + format.address "address" bibinfo.check output + format.tech.report.number output.nonnull + format.date "year" output.warn + format.note output + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {unpublished} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.date output + format.eprint output + format.note "note" output.warn + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + if.url.std.interword.spacing +} + + +%% Social media (T. Websites — "For social media +%% websites (Twitter etc.)"): +%% Basic Format: +%% J. K. Author, "Post Title." Media Title. Accessed Date Accessed. +%% [Online.] Available: URL +%% Three quirks vs. plain @website/@electronic: +%% * a COMMA (not a period) follows the author block, +%% * "Accessed" is NOT followed by a colon, +%% * the period is INSIDE the bracket: "[Online.]" not "[Online].". +FUNCTION {socialmedia} +{ std.status.using.period + start.entry + if.url.alt.interword.spacing + format.authors output + punct.comma 'this.status.punct := + space.normal 'this.status.space := + name.or.dash + format.article.title.electronic output + format.journal.plain output + format.howpublished "howpublished" bibinfo.check output + format.note output + format.urldate.social output + format.online.marker output + format.url output + fin.entry + empty.entry.warn + if.url.std.interword.spacing +} + + +%% Blog (A. Blogs) +%% Basic Format: +%% J. K. Author, "Title of the post," Title of the Blog, Month Day, +%% Year. [Online]. Available: URL +%% Differs from @article only in that the blog source title (journal +%% field) is rendered in roman type, NOT italics. +FUNCTION {blog} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.in.language output + format.journal.plain "journal" bibinfo.check "journal" output.warn + format.volume output + format.number.if.use.for.article output + articleno empty$ + { format.pages output } + { skip$ } + if$ + format.date "year" output.warn + format.articleno output + format.note output + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + if.url.std.interword.spacing +} + + +%% Software (O. Software) +%% Basic Format: +%% J. K. Author. Title of Software. Date Repository or Archive. +%% (version or Year). Publisher Name. Accessed: Date. +%% [Type of Medium]. Global Persistent Identifier. Available: URL +%% Example: +%% D. W. Arning et al. Mixed Mode--Mixed Level Circuit Simulator. +%% (2011). Ngspice. Accessed: Jan. 11, 2019. [Online]. +%% doi:10.5281/zenodo.1234567. Available: http://ngspice.sourceforge.net +%% The (Year) cluster precedes the publisher; the DOI / persistent +%% identifier (read from the `doi` field) is rendered AFTER "[Online]." +%% and BEFORE "Available: URL". +FUNCTION {software} +{ std.status.using.period + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.book.title "title" output.warn + format.repository output + format.version output + format.date.electronic output + format.organization "organization" bibinfo.check output + format.howpublished "howpublished" bibinfo.check output + format.address "address" bibinfo.check output + format.note output + format.urldate output + format.online.marker output + format.doi output + format.url output + fin.entry + empty.entry.warn + if.url.std.interword.spacing +} + + +%% Dataset (E. Datasets) +%% Basic Format: +%% Author, Date, "Title of Dataset," Source. [Online]. Available: URL +%% (or doi: xxx if DOI is used) +FUNCTION {dataset} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.date output + format.article.title "title" output.warn + format.howpublished "howpublished" bibinfo.check output + format.organization "organization" bibinfo.check output + format.address "address" bibinfo.check output + format.note output + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + empty.entry.warn + if.url.std.interword.spacing +} + + +%% Plain (un-quoted, italicised) title used for electronic references +%% whose title is treated as a book/work title rather than as a short +%% piece (websites, social-media posts). Output form: "\emph{Title}". +FUNCTION {format.book.title.electronic} +{ title "title" bibinfo.check + titleraw empty$ + { duplicate$ empty$ 'skip$ 'emphasize if$ } + { titleraw "titleraw" bibinfo.check + emphasize + swap$ " [" swap$ * "]" * * + } + if$ + duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + select.language + } + if$ +} + + +%% Plain title formatter — no quotation marks, no italics. Used for the +%% Conference Paper Online layout where the paper title is set in roman +%% type and terminated by a period (e.g. Taylor's "Assessment: ..."). +FUNCTION {format.title.plain} +{ title "title" bibinfo.check duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + select.language + } + if$ +} + + +%% Conference-name formatter with the leading word "Presented" given a +%% capital "P". Used by @confonline entries where the conference name +%% follows a sentence-ending period: "Title. Presented at .". +%% The location of the conference (address field) is then joined to +%% the conference name with a COMMA, matching +%% "Presented at ., , ." pattern. +FUNCTION {format.presented.booktitle.cap} +{ booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + select.language + "Presented at " swap$ * + punct.comma 'this.status.punct := + space.normal 'this.status.space := + cap.status.std + } + if$ +} + + +%% Lecture title formatter — plain text (no italics, no quotes), with +%% the lecture medium type appended in square brackets as part of the +%% title cluster, e.g. "Documenting literature [PowerPoint slides]". +FUNCTION {format.lecture.title} +{ title "title" bibinfo.check duplicate$ empty$ 'skip$ + { medium empty$ + { skip$ } + { " [" * medium * "]" * } + if$ + this.to.prev.status + this.status.std + cap.status.std + select.language + } + if$ +} + + +%% Online video / YouTube (K. Online Video) +%% Basic Format: +%% Video Owner/Creator, Location. Title of Video. (in Language), +%% (Release date). Accessed: Date. [Online Video]. Available: URL +%% Notes: +%% - The video owner/creator is joined to the optional location with +%% a COMMA ("mtaOnline1, Fazi Mosque, U.K.") even though the rest +%% of the entry uses period separators prescribes this +%% mixed style. +%% - The "(in Language)" marker, when supplied, sits between the +%% italicised title and the parenthesised release date. +FUNCTION {video} +{ std.status.using.period + start.entry + if.url.alt.interword.spacing + format.authors output + % Force a comma between Owner/Creator and Location (rather than the + % default period set by std.status.using.period). + punct.comma 'this.status.punct := + space.normal 'this.status.space := + name.or.dash + format.address "address" bibinfo.check output + format.book.title.electronic output + format.in.language output + format.date.electronic output + format.note output + format.urldate output + format.online.marker output + format.url output + fin.entry + empty.entry.warn + if.url.std.interword.spacing +} + + +%% Patent Online (L. Patent — "Patent Online") +%% Basic Format: +%% Name of the invention, by inventor's name. (Year, Month Day). +%% Patent Number. [Online]. Available: URL +%% Example: +%% Screwless clip mounted computer drive, by D. Williams. +%% (2005, Apr. 26). U.S. Patent 6,885,550. [Online]. +%% Available: http://patft.uspto.gov/netacgi/6,885,550 +%% This is a period-style layout: the invention name (plain roman type, +%% no quotes / no italics) leads the entry, followed by the inventor +%% prefixed with "by", a year-first parenthesised date, the patent +%% nationality+number cluster, and finally the [Online]/URL block. +FUNCTION {patentonline} +{ std.status.using.period + start.entry + if.url.alt.interword.spacing + format.title.plain output + format.patent.invented.by output + name.or.dash + format.date.year.first.electronic output + format.patent.nationality.type.number output + format.note output + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + empty.entry.warn + if.url.std.interword.spacing +} + + +%% Conference Paper Online (C. Conference Paper Online) +%% Basic Format: +%% J. K. Author. (Date). Title. (in Language). Presented at Abbreviated +%% Conf. Title. [Online]. Available: URL +%% Period-style separators; the paper title is set in plain roman type +%% (NOT quoted, NOT italicised), and the conference name is preceded by +%% the capitalised phrase "Presented at" rather than the lowercase +%% "presented at the" used by the in-person @presentation type. +FUNCTION {confonline} +{ std.status.using.period + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.date.electronic output + format.title.plain output + format.in.language output + format.presented.booktitle.cap output + format.address "address" bibinfo.check output + format.organization "organization" bibinfo.check output + format.note output + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + empty.entry.warn + if.url.std.interword.spacing +} + + +%% Lecture notes / Lecture online (G. Lectures) +%% Basic Format: +%% J. K. Author. (Year). Title of lecture [Type of Medium]. (in Language), +%% Available: URL +%% Note: IEEE prints the medium marker INSIDE the title cluster (e.g., +%% "[PowerPoint slides]") and omits the leading "[Online]." entirely. +%% We therefore deliberately skip format.online.marker here. The +%% "(in Language)" marker, when supplied, is inserted between the +%% title+medium cluster and "Available: URL", and is always set off by +%% commas (handled inside format.in.language). +FUNCTION {lecture} +{ std.status.using.period + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.date.electronic output + format.lecture.title output + format.in.language output + format.organization "organization" bibinfo.check output + format.note output + format.urldate output + format.url output + fin.entry + empty.entry.warn + if.url.std.interword.spacing +} + + +%% U.S. Government documents (R. U.S. Government Documents) +%% Basic Format: +%% Legislative body. Number of Congress, Session. (Year, Month Day). +%% Title. [Online]. Available: URL +%% The title is italicised (treated as a publication title). The date +%% block uses the YEAR-FIRST parenthesised form "(Year, Month Day)" as +%% prescribed. Distinct from the month-first form used by +%% other electronic types. +FUNCTION {government} +{ std.status.using.period + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.howpublished "howpublished" bibinfo.check output + format.date.year.first.electronic output + format.book.title.electronic "title" output.warn + format.note output + format.urldate output + format.online.marker output + format.url output + fin.entry + empty.entry.warn + if.url.std.interword.spacing +} + + +%% Booktitle formatter for "presented at" conference references. +%% Note: when a paper is *presented* (rather than appearing in proceedings), +%% the conference name is set in roman (not italic). The lead-in word is +%% taken from the user-supplied intype field if present, otherwise from +%% bbl.presented ("presented at"). +FUNCTION {format.presented.booktitle} +{ booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + select.language + intype missing$ + { bbl.presented " " * } + { intype " " * } + if$ + swap$ * + cap.status.std + } + if$ +} + + +%% Conference paper PRESENTED at a conference ( +%% Conferences and Conference Proceedings — Conference Paper). +%% Basic Format: +%% J. K. Author, "Title of paper," presented at the Abbreviated Name of +%% Conf., City of Conf., State, Country, Month d--d, Year, Paper number. +FUNCTION {presentation} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.presented.booktitle output + format.series output + format.editors output + format.volume output + format.number output + format.address "address" bibinfo.check output + format.organization "organization" bibinfo.check output + format.date "year" output.warn + format.paper output + format.pages output + format.note output + format.doi output + format.urldate output + format.online.marker output + format.url output + fin.entry + if.url.std.interword.spacing +} + + +% The special entry type which provides the user interface to the +% BST controls +FUNCTION {IEEEtranBSTCTL} +{ is.print.banners.to.terminal + { "** IEEEtran BST control entry " quote$ * cite$ * quote$ * " detected." * + top$ + } + { skip$ } + if$ + CTLuse_article_number + empty$ + { skip$ } + { CTLuse_article_number + yes.no.to.int + 'is.use.number.for.article := + } + if$ + CTLuse_paper + empty$ + { skip$ } + { CTLuse_paper + yes.no.to.int + 'is.use.paper := + } + if$ + CTLuse_url + empty$ + { skip$ } + { CTLuse_url + yes.no.to.int + 'is.use.url := + } + if$ + CTLuse_forced_etal + empty$ + { skip$ } + { CTLuse_forced_etal + yes.no.to.int + 'is.forced.et.al := + } + if$ + CTLmax_names_forced_etal + empty$ + { skip$ } + { CTLmax_names_forced_etal + string.to.integer + 'max.num.names.before.forced.et.al := + } + if$ + CTLnames_show_etal + empty$ + { skip$ } + { CTLnames_show_etal + string.to.integer + 'num.names.shown.with.forced.et.al := + } + if$ + CTLuse_alt_spacing + empty$ + { skip$ } + { CTLuse_alt_spacing + yes.no.to.int + 'is.use.alt.interword.spacing := + } + if$ + CTLalt_stretch_factor + empty$ + { skip$ } + { CTLalt_stretch_factor + 'ALTinterwordstretchfactor := + "\renewcommand{\BIBentryALTinterwordstretchfactor}{" + ALTinterwordstretchfactor * "}" * + write$ newline$ + } + if$ + CTLdash_repeated_names + empty$ + { skip$ } + { CTLdash_repeated_names + yes.no.to.int + 'is.dash.repeated.names := + } + if$ + CTLname_format_string + empty$ + { skip$ } + { CTLname_format_string + 'name.format.string := + } + if$ + CTLname_latex_cmd + empty$ + { skip$ } + { CTLname_latex_cmd + 'name.latex.cmd := + } + if$ + CTLname_url_prefix + missing$ + { skip$ } + { CTLname_url_prefix + 'name.url.prefix := + } + if$ + + + num.names.shown.with.forced.et.al max.num.names.before.forced.et.al > + { "CTLnames_show_etal cannot be greater than CTLmax_names_forced_etal in " cite$ * warning$ + max.num.names.before.forced.et.al 'num.names.shown.with.forced.et.al := + } + { skip$ } + if$ +} + + +%%%%%%%%%%%%%%%%%%% +%% ENTRY ALIASES %% +%%%%%%%%%%%%%%%%%%% +FUNCTION {conference}{inproceedings} +% A conference paper available only online — period-style layout with +% "Presented at ." (capital P). Distinct from @presentation, which +% is the in-person comma-style "presented at the , City, Date" form. +FUNCTION {confpaperonline}{confonline} +FUNCTION {conferenceonline}{confonline} +FUNCTION {online}{electronic} +FUNCTION {internet}{electronic} +FUNCTION {webpage}{electronic} +FUNCTION {website}{electronic} +% NOTE: @socialmedia has its own dedicated handler (defined above) — do +% NOT alias it to @electronic here. +FUNCTION {www}{electronic} +% News articles share the periodical-style layout of @article +% (author, title, source title, date, [Online]. Available: URL). +FUNCTION {news}{article} +FUNCTION {newsarticle}{article} +% A preprint (e.g., arXiv) is rendered through @misc using the +% eprint / eprinttype fields handled by format.eprint. +FUNCTION {preprint}{misc} +FUNCTION {arxiv}{misc} +% Theses with non-IEEE @thesis tag fall back to the doctoral handler; +% users may also use @mastersthesis or @phdthesis directly. +FUNCTION {thesis}{phdthesis} +FUNCTION {dissertation}{phdthesis} +FUNCTION {default.type}{misc} + + + +%%%%%%%%%%%%%%%%%% +%% MAIN PROGRAM %% +%%%%%%%%%%%%%%%%%% + +READ + +EXECUTE {initialize.controls} +EXECUTE {initialize.status.constants} +EXECUTE {banner.message} + +EXECUTE {initialize.longest.label} +ITERATE {longest.label.pass} + +EXECUTE {begin.bib} +ITERATE {call.type$} +EXECUTE {end.bib} + +EXECUTE{completed.message} + + +%% That's all folks, mds. \ No newline at end of file diff --git a/InProgress/StackGraphs_to_CFL_Reachability/article_body.tex b/InProgress/StackGraphs_to_CFL_Reachability/article_body.tex new file mode 100644 index 000000000..18a172f40 --- /dev/null +++ b/InProgress/StackGraphs_to_CFL_Reachability/article_body.tex @@ -0,0 +1,304 @@ +\section{Введение}\label{sec:introduction} + +Разрешение имён -- ключевая функция фронт-энда компилятора и современных сред разработки (IDE). Она применяется для перехода к определению, поддержки рефакторинга, семантической подсветки~\cite{Neron2015,vanAntwerpen2018}. На практике большинство реализаций остаётся привязано к конкретным языкам и носит характер ad hoc решений. Это затрудняет переносимость инструментов и построение формальных доказательств их корректности~\cite{vanAntwerpen2018,Zwaan2023}. В работах по графам областей видимости (Scope Graphs) предложена модель связывания имён, отделяющая структуру AST от правил построения графа областей видимости (Scope Graph) и семантики разрешения имён. Данная модель стала основой для декларативных спецификаций и реализации разрешения имён в коде~\cite{Neron2015,vanAntwerpen2018,Zwaan2023}. Для больших кодовых баз предложены стековые графы (Stack Graphs) с инкрементальным построением графа по файлам и стековым алгоритмом поиска определений~\cite{Creager2023}. + +С точки зрения формализации и алгоритмов, многие задачи анализа программ сводимы к задаче КС-достижимости, лежащей в основе ряда межпроцедурных и иных анализов~\cite{RepsHorwitzSagiv1995,Hellings2015,HeLuXue2024}. Задача КС-достижимости состоит в поиске всех пар вершин в графе с метками на рёбрах, между которыми существует такой путь, что слово составленное из меток его рёбер принадлежит заданному контекстно-свободному языку. Есть основания полагать, что часть шаблонов разрешения имён также может быть сведена к задаче достижимости с контекстно-свободными ограничениями. Целью данной работы является повышение эффективности (выражаемой в меньших затратах по времени и по памяти) механизмов разрешения имён за счёт теоретического и практического исследования сводимости стековых графов к КС-достижимости. + +\section{Стековые графы и КС-достижимость}\label{sec:models} + +В качестве примера рассматривается следующий код на языке программирования Java: + +\begin{figure}[htb] +\centering +\begin{minipage}[t]{0.44\textwidth} +\begin{Verbatim}[fontsize=\small] +# other.java +class Y { + public int x; + public Y() { this.x = 0; } +} +\end{Verbatim} +\end{minipage} +\hfill +\begin{minipage}[t]{0.50\textwidth} +\begin{Verbatim}[fontsize=\small] +# main.java +class HelloWorld { + public static void main() { + Y y; + y.x; + } +} +\end{Verbatim} +\end{minipage} +\caption*{\textbf{Листинг 1.} Пример исходного кода} +\label{lst:java-example} +\end{figure} + +Пусть требуется разрешить ссылку на символ \(x\) в выражении \(y.x\) в \emph{main.java}. \(x\) является полем объекта \(y\), следовательно, необходимо сначала разрешить ссылку \(y\). Определение находится строкой выше и указывает, что \(y\) имеет тип \(Y\). Необходимо разрешить ссылку на символ \(Y\). Определение \(Y\) находится в файле \emph{other.java} и содержит определение \(x\), которое и является решением задачи. + +Для формального обоснования предлагаемого метода вводятся определения стековых графов и задачи КС-достижимости. + +\subsection{Стековые графы}\label{sec:stack-graphs} + +Для решения задачи разрешения имён может применяться модель стековых графов. + +Стековый граф \(G\) является представлением программы \(P\). Программа \(P\) состоит из множества файлов исходного кода \(F_{i}\). Каждый файл исходного кода представим в виде множества синтаксических вершин (вершин синтаксического древа). В данном множестве синтаксических вершин можно выделить два подмножества (возможно пересекающихся): подмножество вершин, отражающих определения, и подмножество вершин, отражающих ссылки в исходном коде. + +Пусть символ \(x\) -- идентификатор из исходного кода, отражающий имя некой сущности в программе (или часть такого имени), либо символ оператора (например, оператор доступа к члену объекта \(.\) или оператор вызова \(()\)). + +Каждая вершина стекового графа \(G\) принадлежит к одному из четырёх типов: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + Вершина области видимости (Scope node); +\item + Корневая вершина (Root node); +\item + Вершина добавления символа \(x\) на стек (Push node, далее вершина добавления); +\item + Вершина удаления символа \(x\) со стека (Pop node, далее вершина удаления). +\end{enumerate} + +Дополнительно, каждая вершина \(N_{i}\) кроме корневой относится ровно к одному файлу исходного кода \(F_{i}\). Часть вершин стекового графа \(G\) относится к конкретным синтаксическим вершинам данного файла \(F_{i}\). Вершина добавления \(N_{i}\) называется вершиной ссылки, если она относится к синтаксической вершине, отражающей ссылку. Вершина удаления \(N_{i}\) называется вершиной определения, если она относится к синтаксической вершине, отражающей определение. + +Пусть \(E_{G}\) -- множество рёбер стекового графа \(G_{i}\). Каждое ребро стекового графа направлено и соединяет входную вершину \(N_{i}\) с выходной вершиной \(N_{i}'\). Рёбра могут соединять только вершины, принадлежащие одному файлу исходного кода \(F_{i}\)~\cite{Creager2023}. + +Путь \(p\) в стековом графе \(G\) состоит из начальной вершины \(N_{i}\), конечной вершины \(N_{i}'\) и стека символов \(\widehat{x}\). Путь называется завершённым, если начальная вершина пути является вершиной ссылки, конечная вершина пути является вершиной определения и стек символов пути пуст. Каждое разрешение имени в программе \(P\) выразимо в виде завершённого пути в соответствующем данной программе стековом графе \(G\)~\cite{Creager2023}. + +Пустым путём называется путь, не содержащий рёбер. Такой путь создаётся путём поднятия вершины стекового графа. Поднятие вершины добавления кладёт соответствующий ей символ \(x\) на стек символов. Вершина удаления не может быть поднята. Другие вершины дают пустой путь с пустым символьным стеком. + +Любой путь \(p\) может быть расширен путём добавления к нему ребра \(E_{i}\), исходящего из конечной вершины данного пути \(p\). Выходная вершина \(N_{i}'\) этого ребра \(E_{i}\) становится новой конечной вершиной пути \(p\). Символьный стек пути \(p\) меняется в зависимости от новой конечной вершины \(N_{i}'\). Если вершина \(N_{i}'\) является корневой вершиной или вершиной области видимости, то стек символов \(\widehat{x}\) не меняется. Если вершина \(N_{i}'\) является вершиной добавления, то соответствующий ей символ \(x\) кладётся на стек символов \(\widehat{x}\). Если вершина \(N_{i}'\) является вершиной удаления, то расширение пути возможно только в том случае, когда стек символов \(\widehat{x}\) не пуст и на его вершине лежит символ \(x\), которому вершина удаления \(N_{i}'\) соответствует. В таком случае этот символ \(x\) снимается с вершины стека символов \(\widehat{x}\). + +Если конечная вершина пути является корневой вершиной, то данный путь можно расширить до корневой вершины в подграфе любого другого файла (можно сказать, что корневая вершина принадлежит одновременно всем файлам). Это единственный способ проложить путь из одного файла в другой~\cite{Creager2023}. + +На основе определения завершённого пути, способов создания пустого пути и способов расширения пути можно построить алгоритм разрешения имён в стековом графе. + +Пусть дана программа \(P\) и ссылка в данной программе. Требуется найти все определения в программе \(P\), соответствующие данной ссылке. + +Строится стековый граф \(G\), соответствующий программе \(P\). Пустой путь \(p\) создаётся поднятием вершины, соответствующей данной ссылке. Затем от этой вершины выполняется обход в ширину. Очередь ожидающих путей изначально содержит только \(p\). На каждом шаге следующий путь извлекается из очереди, после чего к нему поочерёдно добавляются рёбра, исходящие из его конечной вершины. Если добавление допустимо по описанным выше правилам, новый путь помещается в очередь. Если найденный путь завершён, его конечная вершина соответствует искомому определению~\cite{Creager2023}. + +На рис.~\ref{fig:stack-graph} показан стековый граф для кода из листинга 1. Вершины помещения (\(push\)) и извлечения (\(pop\)) обозначают соответственно добавление указанного символа на вершину стека и снятие верхнего символа при совпадении. Вершины областей видимости (\(scope\)) представляют области видимости. Корневая вершина (\(root\)) обеспечивает переход между файловыми подграфами. Ориентированные рёбра задают допустимые продолжения пути. Символы «.» и «:» введены правилами построения графа для Java: «.» моделирует обращение к члену объекта, а «:» обозначает запрос типа выражения. Зелёным выделен завершённый путь, связывающий ссылку \(x\) в выражении \emph{y.x} с определением поля \(x\) класса \(Y\). + +\begin{figure}[htb] +\centering +\includegraphics[width=0.72\textwidth]{figure1.png} +\caption{Пример стекового графа} +\label{fig:stack-graph} +\end{figure} + +Граф строится из локальных фрагментов, создаваемых по правилам для синтаксических конструкций анализируемого языка (в нашем случае, для Java). Рёбра связывают эти фрагменты через вершины областей видимости в соответствии с правилами разрешения и вложенностью областей. Ссылка \(x\) в выражении \emph{y.x} образует начальную вершину \({push}_{x}\). Доступ к члену объекта добавляет внутреннюю вершину \({push}_{.}\) и направляет поиск к типу объекта \(y\). Для получения типа идентификатора правила Java создают переход через \({push}_{:}\) к ссылке \({push}_{y}\). Объявление \emph{Y y} представлено фрагментом \({pop}_{y}\ \rightarrow \ {pop}_{:}\ \rightarrow \ {push}_{Y}\). Вершина \({pop}_{y}\) сопоставляет ссылку с объявлением переменной, \({pop}_{:}\) завершает запрос её типа, а \({push}_{Y}\) начинает разрешение имени объявленного типа. Через области видимости файла \emph{main.java} и корневую вершину путь переходит в подграф файла \emph{other.java}, где \({pop}_{Y}\) сопоставляет имя типа с объявлением класса. Затем путь входит в область видимости членов класса: \({pop}_{.}\) снимает маркер обращения к члену, а \({pop}_{x}\) сопоставляет исходную ссылку с определением поля. + +Зелёный путь показывает последовательность разрешения. Если вершину стека располагать слева, состояния символьного стека после операций \(push\) и \(pop\) имеют следующий вид: +\[ +\begin{aligned} +\lbrack x\rbrack &\to \lbrack.,x\rbrack \to \lbrack:,.,x\rbrack + \to \lbrack y,:,.,x\rbrack \to \lbrack:,.,x\rbrack \\ +&\to \lbrack.,x\rbrack \to \lbrack Y,.,x\rbrack + \to \lbrack.,x\rbrack \to \lbrack x\rbrack \to \lbrack\rbrack . +\end{aligned} +\] + +Вершины областей видимости и корневая вершина стек не изменяют. Пустой стек после прохождения конечной вершины \({pop}_{x}\) показывает, что путь завершён и связывает ссылку \(x\) с определением поля \(x\) класса \(Y\). + +Числа в вершинах областей видимости являются идентификаторами областей видимости данного файла. Граф на рис.~\ref{fig:stack-graph} визуально сокращён: на схеме показана часть вершин и рёбер полного графа, достаточная для разбора выделенного пути. Полный граф существенно больше из-за дополнительных вершин областей видимости и ответвлений. + +\subsection{Задача КС-достижимости}\label{sec:cfl-reachability} + +Задача КС-достижимости определяется тремя объектами: граф \(G\), алфавит \(\Sigma\) и контекстно-свободный язык \(L\), заданный над алфавитом \(\Sigma\). + +Граф \(G\) состоит из множества вершин \(V\) и множества рёбер \(E\), где \(E\ \subseteq \ V\ \times \ (\Sigma\ \cup \ \{\varepsilon\})\ \times \ V\). Рёбра ориентированы и размечены символами алфавита \(\Sigma\) или меткой \(\varepsilon\). Символы алфавита далее называются терминалами. + +Путь \(p\) в графе представлен последовательностью рёбер \(E_{1}\ \ldots\ E_{n}\). Пути \(p\) соответствует слово \(w_{p}\), образованное последовательной записью меток этих рёбер. Метка \(\varepsilon\) не добавляет символа в слово. + +Пара вершин \((u,\ v)\) графа \(G\) называется КС-достижимой, если существует путь \(p\) из \(u\) в \(v\), слово которого принадлежит языку \(L\). + +Решение задачи КС-достижимости сводится к нахождению всех КС-достижимых пар вершин \((u,\ v)\) графа \(G\)~\cite{MuravevGrigorev2025}. + +\section{Сведение стековых графов к КС-достижимости}\label{sec:conversion} + +В разделе дано формальное описание разработанного метода сведения, указана область его применимости и описано программное средство, созданное для демонстрации метода. + +\subsection{Теоретическое описание сведения}\label{sec:conversion-theory} + +Рассматривается конечный путь \(p_{S}\) = \((N_{1},\ \ldots,\ N_{n})\) в стековом графе \(G_{S}\). Операция, соответствующая начальной вершине, входит в слово пути. Если начальная вершина является вершиной-ссылкой, соответствующий символ помещается на стек. + +Далее рассматривается модель, в которой допустимость пути определяется символьным стеком. Вершины областей видимости и корневая вершина этот стек не изменяют. Корневая вершина обеспечивает переход между файловыми подграфами. + +Множество символов стекового графа обозначается \(X\ = \ \{ x_{i}\ |\ i\ \in \ I\}\). Вершине помещения символа \(x_{i}\) сопоставляется терминал \({push}_{i}\), а вершине извлечения того же символа сопоставляется терминал \({pop}_{i}\). Операция \({push}_{i}\) добавляет \(x_{i}\) к текущему стеку. Операция \({pop}_{i}\) допустима только при наличии \(x_{i}\) на вершине стека и удаляет этот символ. Слово пути образуется последовательностью этих операций. Нейтральные вершины не добавляют символов в слово пути. + +Слова фрагментов пути, оставляющих символьный стек неизменным, описывает нетерминал \(S\): + +\[S \to \varepsilon \mid S\,S \mid {push}_{i}\,S\,{pop}_{i},\qquad i \in I.\] + +Для запросов разрешения имён, рассматриваемых далее, используется стартовый нетерминал \(Q\): + +\[Q \to {push}_{i}\,S\,{pop}_{i},\qquad i \in I.\] + +Эти правила задают контекстно-свободный язык \(L_{S}\). Правило \(S\ \rightarrow \ S\ S\) допускает произвольное число последовательных согласованных фрагментов, а правило с одинаковым индексом \(i\) обеспечивает правильную вложенность операций. К терминалам относятся только \({push}_{i}\) и \({pop}_{i}\). Обозначения \(S\) и \(Q\) являются нетерминалами, а \(\varepsilon\) обозначает пустое слово. + +Пусть \(R\) и \(D\) обозначают множества вершин-ссылок и вершин-определений. При сведении каждой вершине \(r\ \in \ R\) сопоставляется вход \(r_{in}\). Каждой вершине \(d\ \in \ D\) сопоставляется выход \(d_{out}\). В построенной задаче КС-достижимости пара \((r,\ d)\) считается результатом запроса, если существует путь из \(r_{in}\) в \(d_{out}\), слово которого выводится из стартового нетерминала \(Q\). + +В математической записи \(\varepsilon\) обозначает пустое слово. Ребро с меткой \(\varepsilon\) является нейтральным. Прохождение такого ребра не добавляет терминала в слово пути и не изменяет символьный стек. + +При преобразовании обозначения \({push}_{i}\) и \({pop}_{i}\) переносятся с вершин на рёбра. Преобразование выполняется следующим образом. + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + Вершинам помещения и извлечения сопоставляются метки \({push}_{i}\) и \({pop}_{i}\). Вершины областей видимости и корневая вершина остаются нейтральными. +\item + На промежуточном этапе метки могут находиться как на вершинах, так и на рёбрах графа. Нейтральные элементы не добавляют символов в слово пути. +\item + Все исходные рёбра получают нейтральную метку \(\varepsilon\). Прохождение такого ребра не изменяет слово пути. +\item + Нейтральные метки удаляются с вершин областей видимости и с корневой вершины. Удаление этих меток не изменяет слова путей. +\item + Каждая вершина с меткой \({push}_{i}\) заменяется парой вершин без меток \(N_{in}\) и \(N_{out}\). Входящие рёбра перенаправляются в \(N_{in}\). Исходящие рёбра перенаправляются из \(N_{out}\). Между \(N_{in}\) и \(N_{out}\) добавляется ребро с меткой \({push}_{i}\). Каждому исходному пути через заменяемую вершину соответствует единственный путь через созданную пару с той же операцией в той же позиции слова. Если исходная вершина была вершиной ссылки, \(N_{in}\) становится соответствующим входом \(r_{in}\). +\item + Аналогично заменяются вершины с меткой \({pop}_{i}\). Если исходный путь заканчивался в вершине-определении, преобразованный путь заканчивается в соответствующей вершине \(N_{out}\), которая служит выходом \(d_{out}\). +\end{enumerate} + +После преобразования обозначения \({push}_{i}\) и \({pop}_{i}\) существуют только как метки рёбер. Нейтральные рёбра имеют метку \(\varepsilon\). Алфавит терминалов состоит из \({push}_{i}\) и \({pop}_{i}\). Время построения графа составляет \(O(|V|\ + \ |E|)\), поскольку каждая вершина и каждое ребро обрабатываются постоянное число раз. + +Псевдокод описанного алгоритма: + +\begin{Verbatim}[fontsize=\small] +fn stack_graph_to_cfl(G: Graph) -> Graph: + for node in G.nodes: + # Push(x) -> push_x, Pop(x) -> pop_x, + # Root and Scope -> epsilon + node.label = make_node_label(node) + for edge in G.edges: + edge.label = epsilon + for node in G.nodes where node.label == epsilon: + delete node.label + for node in G.nodes where node.label is push_*: + let (N_in, N_out) = G.create_nodes_pair() + redirect_incoming_edges(old_dest: node, new_dest: N_in) + redirect_outgoing_edges(old_src: node, new_src: N_out) + G.create_edge(N_in, N_out, label: node.label) + if G.start_node == node: + G.start_node = N_in + G.delete_node(node) + # То же самое для pop-вершин + return G +\end{Verbatim} + +Пример замены вершины помещения приведён на рис.~\ref{fig:push-before} и~\ref{fig:push-after}. + +\setcounter{figure}{2} +\begin{figure}[htb] +\centering +\begin{minipage}[t]{0.46\textwidth} +\centering +\includegraphics[width=\linewidth]{figure3.png} +\captionof{figure}{Вершина помещения до преобразования} +\label{fig:push-before} +\end{minipage} +\hfill +\begin{minipage}[t]{0.48\textwidth} +\centering +\includegraphics[width=\linewidth]{figure4.png} +\captionof{figure}{Вершина помещения после преобразования} +\label{fig:push-after} +\end{minipage} +\end{figure} + +При разрешении всех ссылок рассматриваются входы \(r_{in}\), соответствующие вершинам-ссылкам. В результат включаются все пары \((r,\ d)\), для которых существует путь из \(r_{in}\) в \(d_{out}\), слово которого выводится из стартового нетерминала \(Q\). + +На рис.~\ref{fig:converted-graph} показан результат сведения графа с рис.~\ref{fig:stack-graph}. Каждая вершина помещения или извлечения заменяется парой вершин \(N_{in}\) и \(N_{out}\) без меток, соединённых ребром с меткой соответствующей операции. Входящие рёбра перенаправляются в \(N_{in}\). Исходящие рёбра перенаправляются из \(N_{out}\). Вершины областей видимости и корневая вершина сохраняются, а исходные рёбра стекового графа получают нейтральную метку \(\varepsilon\). Преобразование сохраняет разветвления, порядок прохождения и последовательность операций пути. + +\begin{figure}[htb] +\centering +\includegraphics[width=0.90\textwidth]{figure5.png} +\caption{Результат сведения стекового графа из рис.~\ref{fig:stack-graph}} +\label{fig:converted-graph} +\end{figure} + +Зелёный путь на рис.~\ref{fig:converted-graph} соответствует зелёному пути на рис.~\ref{fig:stack-graph}. Если опустить нейтральные рёбра, его слово имеет вид + +\[ +\begin{aligned} +{push}_{x} &\to {push}_{.} \to {push}_{:} \to {push}_{y} \to {pop}_{y} \\ +&\to {pop}_{:} \to {push}_{Y} \to {pop}_{Y} \to {pop}_{.} \to {pop}_{x}. +\end{aligned} +\] + +Операции вложены и попарно согласованы: каждая операция \(pop\) снимает верхний совпадающий символ, поэтому слово выводится из \(Q\). Вершина \(N_{in}\) пары, заменившей \({push}_{x}\), соответствует исходной ссылке, а вершина \(N_{out}\) пары, заменившей \({pop}_{x}\), соответствует определению. Тем самым сведение сохраняет связь ссылки \(x\) в выражении \emph{y.x} с определением поля \(x\) класса \(Y\). + +\subsection{Программное средство StackGraphExporter}\label{sec:exporter} + +Для практической реализации описанного выше сведения стековых графов к задаче КС-достижимости разработана утилита командной строки StackGraphExporter~\cite{CoreJustStackGraphExporter} на языке Rust. Программное средство строит стековые графы по файлам исходного кода, выполняет запросы разрешения на стековом графе, сводит стековые графы к задаче КС-достижимости, при необходимости упрощает граф в процессе сведения и создаёт артефакты для последующего запуска внешних решателей. + +В экспериментах библиотека stack-graphs 0.14.1 используется как эталонная реализация. Перед выполнением запросов библиотека для каждого файла строит минимальный набор частичных путей и помещает его в базу. Частичный путь представляет собой фрагмент пути разрешения, который можно состыковать с другими фрагментами. При разрешении ссылки библиотека объединяет совместимые частичные пути в полные пути от ссылки к определениям. + +\section{Результаты экспериментов}\label{sec:experiments} + +Для проверки корректности реализации сведения и измерения эффективности разработанного программного средства проведена серия экспериментов. В разделе приведены постановка экспериментов и результаты. + +\subsection{Постановка экспериментов}\label{sec:experiment-setup} + +В эксперименте отобраны четыре проекта на Java с платформы GitHub: libgdx~\cite{LibGDX}, Shattered Pixel Dungeon~\cite{ShatteredPixelDungeon}, JsonPath~\cite{JaywayJsonPath} и JiaoZi Video Player~\cite{JiaoZiVideoPlayer}. В качестве внешнего решателя использовался CFG\_bench. В рамках каждого эксперимента выполнено 10 запусков. Средние значения времени запроса и потребляемой памяти рассчитаны средствами решателя. Для stack-graphs перед измерениями выполнялись два разогревочных запуска, а среднее значение рассчитывалось по пяти последующим запускам. Пиковое потребление ОЗУ в таблице приведено отдельно для stack-graphs и CFG\_bench. Показатель для stack-graphs измерялся с помощью библиотеки peak\_alloc. В каждом случае выполнялось разрешение всех ссылок в графе. Техническое окружение: ноутбук под управлением Windows 11 Pro, процессор AMD Ryzen 9 8940HX, 32 ГБ ОЗУ DDR5 SDRAM. + +\subsection{Проверка корректности}\label{sec:correctness} + +Для проверки корректности реализации сведения стекового графа к задаче КС-достижимости использовался решатель CFG\_bench. В результате решения задачи КС-достижимости определялось количество найденных пар вершин. Полученное значение сравнивалось с количеством пар, найденных при запросах в стековом графе. + +\subsection{Результаты для запроса всех ссылок в графе}\label{sec:all-references} + +Результаты экспериментов приведены в табл.~\ref{tab:results}. + +\begin{table}[H] +\centering +\caption{Результаты выполнения запросов для всех пар} +\label{tab:results} +\scriptsize +\begin{tblr}{ + width=\textwidth, + colspec={X[2.05,l] X[0.95,c] X[1.10,c] X[0.95,c] X[1.10,c]}, + hlines, vlines, + row{1}={font=\bfseries,halign=c,valign=m}, + column{1}={font=\bfseries,valign=m}, + cells={valign=m}, + rowsep=2pt, + colsep=3pt, +} +Проект & libgdx & Shattered Pixel Dungeon & JsonPath & JiaoZi Video Player \\ +Время, стековый граф & 278 с & -- & 2,6 с & 1,13 с \\ +Память, стековый граф & 27 ГБ & -- & 3,7 ГБ & 2,1 ГБ \\ +Время построения КС-графа & 8 с & 3,8 с & 39 мс & 18 мс \\ +Время построения КС-графа с упрощением & 38 с & 31 с & 0,34 с & 28 мс \\ +Время, CFG\_bench & -- & -- & 6,9 с & 1,67 с \\ +Время, CFG\_bench с упрощением & 7 с & 1,3 с & 0,28 с & 28 мс \\ +Память, CFG\_bench & -- & -- & 1,3 ГБ & 239 МБ \\ +Память, CFG\_bench с упрощением & 1,23 ГБ & 227 МБ & 38 МБ & 14 МБ +\end{tblr} +\end{table} + +Примечания к табл.~\ref{tab:results}. + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + Пропуски в таблице обозначают неудавшиеся запуски измерений. Как правило, решателю не хватало доступной оперативной памяти. +\item + Для реализации stack-graphs время указано как сумма времени построения базы частичных путей и времени выполнения запроса после её построения. +\item + Для проекта libgdx запрос в стековом графе был разбит на части по 32 768 начальных вершин. Без разбиения большинство запусков завершалось ошибкой выделения памяти. В нескольких успешных запусках время выполнения без разбиения превышало время выполнения с разбиением на 30--40\%. Для Shattered Pixel Dungeon запрос всех пар (ссылка, определение) не удалось завершить даже при обработке по одной начальной вершине. +\end{enumerate} + +Совместное использование упрощения и CFG\_bench при разрешении всех ссылок сократило время выполнения запросов. Для Shattered Pixel Dungeon все ссылки удалось разрешить только при использовании CFG\_bench с упрощением. Для остальных трёх проектов суммарное время выполнения уменьшилось на 76--95\% по сравнению со stack-graphs. Пиковое потребление памяти при использовании CFG\_bench было на 95--99\% ниже, чем при использовании stack-graphs. + +\section{Выводы и направления дальнейших исследований}\label{sec:conclusion} + +В рамках работы обоснована перспективность применения КС-достижимости к задаче абстрактного разрешения имён. КС-достижимость применяется в смежных областях, в том числе в межпроцедурном анализе указателей. Для КС-достижимости получены теоретические результаты и разработаны оптимизированные реализации. Выбор стековых графов в качестве основы сведения обусловлен сходством двух моделей: в обоих случаях выполняется поиск путей в графе с ограничениями. + +Формально выведен способ сведения стековых графов, в которых ограничения пути задаются символьным стеком, к задаче КС-достижимости. Сложность сведения составляет \(O(|V|\ + \ |E|)\), где \(|V|\) обозначает число вершин, а \(|E|\) обозначает число рёбер стекового графа. Как показано в разд. 3.2, преобразование сохраняет концы и слово каждого конечного пути. + +Разработан и реализован программный инструмент StackGraphExporter, позволяющий автоматически строить стековые графы по исходному коду на Java, выполнять запросы разрешения, преобразовывать стековый граф в задачу КС-достижимости, применять эвристики упрощения в процессе сведения и создавать артефакты для запуска внешнего решателя CFG\_bench. + +В рамках разработанного программного инструмента экспериментально проверена корректность сведения и исследована эффективность предложенных эвристик упрощения графа. Максимальное сокращение составило 79\% для вершин КС-графа и 32\% для рёбер. Для трёх проектов совместное использование упрощения и CFG\_bench при разрешении всех ссылок сократило суммарное время выполнения на 76--95\% и пиковое потребление памяти на 95--99\% по сравнению со stack-graphs. + +К направлениям дальнейших исследований относятся разработка инкрементального обновления задачи КС-достижимости при изменении части файлов исходного кода, исследование возможности переиспользования результатов запросов и предвычисления путей для подграфов на уровне решателя КС-достижимости. Также представляют интерес разработка модели использования КС-достижимости без промежуточного стекового графа и оптимизация решателей КС-достижимости для разрешения имён. diff --git a/InProgress/StackGraphs_to_CFL_Reachability/figure1.png b/InProgress/StackGraphs_to_CFL_Reachability/figure1.png new file mode 100644 index 0000000000000000000000000000000000000000..7b41110dcb9be99c8818bd6177a189a26f43e3db GIT binary patch literal 65278 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 literal 0 HcmV?d00001 diff --git a/InProgress/StackGraphs_to_CFL_Reachability/figure3.png b/InProgress/StackGraphs_to_CFL_Reachability/figure3.png new file mode 100644 index 0000000000000000000000000000000000000000..472261a035679207cdc6e80bcfcd547f91a23486 GIT binary patch literal 14112 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 V7eC6Uf|G9~niw6mauplg{{Yos_fh}= literal 0 HcmV?d00001 diff --git a/InProgress/StackGraphs_to_CFL_Reachability/figure4.png b/InProgress/StackGraphs_to_CFL_Reachability/figure4.png new file mode 100644 index 0000000000000000000000000000000000000000..67859fcf4f2dad6a16ee66d2450b9d51d67e3a2b GIT binary patch literal 17477 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 bhBVqZJwHP2{Ri;%AQ-CmH5IGnO+)`5HtFQ* literal 0 HcmV?d00001 diff --git a/InProgress/StackGraphs_to_CFL_Reachability/figure5.png b/InProgress/StackGraphs_to_CFL_Reachability/figure5.png new file mode 100644 index 0000000000000000000000000000000000000000..0d089c0129aff907abd09856a2391832b525c485 GIT binary patch literal 67985 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 E0DWPkzW@LL literal 0 HcmV?d00001 diff --git a/InProgress/StackGraphs_to_CFL_Reachability/images/cc-by.png b/InProgress/StackGraphs_to_CFL_Reachability/images/cc-by.png new file mode 100644 index 0000000000000000000000000000000000000000..c8473a24786ab016d9c3e717a380910f7cbb0fff GIT binary patch literal 12588 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, %%% +%%% http://cte.eltech.ru/ojs %%% +%%% using LaTeX2e %%% +%%% %%% +%%% Copyright (C) 2026 by the center for informatization of Education %%% +%%% "KIO", all rights reserved. %%% +%%% %%% +%%% This file can be redistributed and/or modified under the terms %%% +%%% of the LaTeX Project Public License (lppl). %%% +%%% %%% +%%% The work is based on the Style for the journal Condensed %%% +%%% Matter Physics (https://ctan.org/pkg/cmpj) %%% +%%% %%% +%%% Please report errors to: Maksim Subbotin %%% +%%% mosubbotin@etu.ru %%% +%%% %%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\NeedsTeXFormat{LaTeX2e} + +% А. Б. Иванов1, должность, orcid (если есть) +% Б. П. Петров1,2, должность, orcid (если есть) +% 1. Полное наименование организации, адрес, город, индекс, страна +% 2. Полное наименование организации, адрес, город, индекс, страна +% Цифры 1 и 2 - это верхние индексы, как у нас и было. Если автор один, индекс также нужен. +% +\RequirePackage{iftex} +\ProvidesClass{kioj6}[2026/04/07 The KIO and CAM journals class] +\def\filename{kioj6.cls} +\def\fileversion{5.00} +\def\filedate{2026/04/07} +\immediate\write32{This is '\filename' v\fileversion \space <\filedate> ^^J% + the KIO and CTE journals class} +\newif\if@firstpage +\@firstpagetrue + +\ifpdftex + \RequirePackage{cmap} % pdf copy\paste + search package +\fi + +% Options ==== + +%eqsecnum: new numbering of formulae in each section +\def\eqsecnum{% + \@addtoreset{equation}{section} % + \def\theequation{\ifnum \c@section>\z@ \thesection.\fi \@arabic\c@equation}% +} + +\DeclareOption{eqsecnum}{\eqsecnum} + +\DeclareOption{noimages}{\def\@noimages{}} + +\newif\if@englishversion +\@englishversionfalse + +% Открытый флаг (без @) — доступен из main.tex как \ifenglishpaper. Зеркалит \if@englishversion. +\newif\ifenglishpaper +\englishpaperfalse + +\newcommand{\englishversion}{% + \@englishversiontrue\englishpapertrue + \renewcommand{\refname}{References}% + \renewcommand{\bibname}{References}% +} +\newcommand{\russianversion}{% + \@englishversionfalse\englishpaperfalse + \renewcommand{\refname}{Список литературы}% + \renewcommand{\bibname}{Список литературы}% +} + +% Переключение языка отрисовки на противоположный (используется в translatedpart). +% Меняется ТОЛЬКО \if@englishversion (текущий контекст рендера). +% \ifenglishpaper остаётся равным выбранному пользователем языку статьи — +% это нужно колонтитулам, которые должны быть постоянны на всех страницах. +\def\@flip@englishversion{% + \if@englishversion + \@englishversionfalse + \else + \@englishversiontrue + \fi +} + +% font options + +\def\kio@sf{cmss} + +\def\lat@sf{\kio@sf} +\def\cyr@sf{\kio@sf} +\def\Hv@scale{0.889} +\def\Pr@scale{0.889} +\def\cmpj@sf{} + +\def\cmpj@sf@helvet{ + %P%\IfFileExists{t1phv.fd}{ + \IfFileExists{t2aphv.fd}{ + \def\lat@sf{phv} + }{ + \def\lat@sf{\kio@sf} + } + \IfFileExists{t2appr.fd}{ + \def\cyr@sf{ppr} + }{ + \def\cyr@sf{\kio@sf} + } +} + +\def\cmpj@sf@droid{ +\ifpdftex +\RequirePackage{fourier} +\fi +\ifxetex +\RequirePackage{fourier-otf} +\fi + +%\RequirePackage{txfonts} +%\IfFileExists{omltxmi.fd}{\re@DeclareMathSymbol{\varkappa}{\mathord}{AMSb}{123}}{} +\RequirePackage[default,scale=0.86]{droidserif} +\RequirePackage[defaultsans,scale=0.86]{droidsans} +\RequirePackage[defaultmono,scale=0.86]{droidsansmono} +\def\lat@sf{droidsans} +\def\cyr@sf{droidsans} +} + +\DeclareOption{droid}{\let\cmpj@sf\cmpj@sf@droid} + +\DeclareOption{helvet}{\let\cmpj@sf\cmpj@sf@helvet} + +\DeclareOption{cm}{\def\cmpj@sf{}} + +%Two languages +% \@lang{}{} и \@langrev — отдают вариант для текущего языка отрисовки. +% \if@englishversion инвертируется в \translatedpart, поэтому одна проверка покрывает все случаи. + +\newcommand\@lang[2]{\if@englishversion#2\else#1\fi} +\newcommand\@langrev[2]{\if@englishversion#2\else#1\fi} +\newcommand\@unreverselang[1]{#1} + +\DeclareOption{english}{ + \def\@english{} + \@englishversiontrue + \englishpapertrue +} +\DeclareOption{authorsinfo}{ + \def\need@authors@info{} +} + +% nocopyright option + +\def\@@copyright{\copyright} +\def\copyright@size{\small} +\def\copyright@author{\@author\cp@issue@year} +\def\copyright@journal{\@unreverselang{\copyright\space\MakeTextUppercase{\journal@type}. \textnumero\issue@number, \issue@year}\@lang{ \space г.}{}} +\def\authorcopyright{\@ifnextchar[ + \iauthorcopyright{\iauthorcopyright[\small]}} +\def\iauthorcopyright[#1]#2{\gdef\copyright@size{#1} + \gdef\copyright@author{#2}} + +\DeclareOption{nocopyright}{\def\@@copyright{}\authorcopyright{}} + +% Forward unknown options to the underlying article class. +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} + +\ExecuteOptions{droid} + +\ProcessOptions\relax + +% Load article with our enforced defaults. Any options the user passed to +% \documentclass (e.g. eqsecnum, authorsinfo) that are NOT among the local +% options above were forwarded to article by \DeclareOption*. +\LoadClass[intlimits,twoside,a4paper,11pt]{article} + +\ifpdftex + \RequirePackage[T2A]{fontenc} +\fi +\@lang{ + \RequirePackage[english,russian]{babel} +}{ + \RequirePackage[russian,english]{babel} +} +\RequirePackage{fancyhdr} +\RequirePackage{graphicx} +\@ifundefined{@noimages}{}{\renewcommand{\includegraphics}[2][]{\fbox{\detokenize{#2}}}} +\RequirePackage{ifthen} +\RequirePackage{textcase} +\RequirePackage{setspace} +\RequirePackage{varwidth} +\RequirePackage[pdfstartview=FitH,colorlinks=true,urlcolor=Blue,citecolor=Green,linkcolor=red]{hyperref} +\RequirePackage{url} +%\RequirePackage{doi} +\RequirePackage[dvipsnames]{xcolor} % +\RequirePackage{float} +\RequirePackage[tableposition=top,labelfont={bf,sf,small},font=small,skip=4mm,labelsep=period]{caption} +\RequirePackage{subcaption} +\RequirePackage[misc]{ifsym} +\RequirePackage{microtype} +\RequirePackage[resetlabels]{multibib} + +\def\asbuk#1{\expandafter\@asbuk\csname c@#1\endcsname} +\def\@asbuk#1{\ifcase#1\or а\or б\or в\or г\or д\or е\or ё\or ж\or з\or и\or й\or к\or л\or м\or н\or о\or п\or р\or с\or т\or у\or ф\or х\or ц\or ч\or ш\or щ\or ъ\or ы\or ь\or э\or ю\or я\fi} + +% Подписи рисунков, таблиц и нумерация подрисунков — выбираются по языку отрисовки. +\renewcommand\thesubfigure{\@lang{\asbuk{subfigure}}{\alph{subfigure}}} +\AtBeginDocument{% + \renewcommand{\figurename}{\@lang{Рис.}{Fig.}}% + \renewcommand{\tablename}{\@lang{Табл.}{Table}}% +} + +\newcommand\kioabstractname{\@langrev{Аннотация}{Abstract}} +\newcommand\keywordsname{\@langrev{Ключевые слова}{Keywords}} +\newcommand\citationname{\@langrev{Цитирование}{Citation}} +\newcommand\acknowledgementsname{\@langrev{Благодарности}{Acknowledgements}} + +\urlstyle{same} + +\cmpj@sf + +\def\hv@sf{\sffamily\upshape} + +% remove lists spacing + +\def\remove@lists@spacings{ + \let\oldenumerate\enumerate + \renewcommand{\enumerate}{ + \oldenumerate + \setlength{\itemsep}{0pt} + \setlength{\parskip}{0pt} + \setlength{\parsep}{0pt} + \setlength{\topsep}{0pt} + \setlength{\partopsep}{0pt} + } + + \let\olditemize\itemize + \renewcommand{\itemize}{ + \olditemize + \setlength{\topsep}{0pt} + \setlength{\itemsep}{0pt} + \setlength{\parskip}{0pt} + \setlength{\parsep}{0pt} + \setlength{\partopsep}{0pt} + } +} +\remove@lists@spacings + +%% Настройка заголовка %% + + +\renewcommand\section{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\normalfont\large\hv@sf\bfseries\mathversion{bold}\centering\MakeUppercase}} +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\normalfont\large\hv@sf\bfseries\mathversion{bold}}} +\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\normalfont\normalsize\hv@sf\bfseries\mathversion{bold}}} +\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {3.25ex \@plus1ex \@minus.2ex}% + {-1em}% + {\normalfont\normalsize\hv@sf\bfseries\mathversion{bold}}} +\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\normalfont\normalsize\hv@sf\bfseries\mathversion{bold}}} + +\def\@seccntformat#1{\csname the#1\endcsname.\hspace{0.5em}} + +%% penalties + +\widowpenalty=0 +\clubpenalty=0 +\emergencystretch=3em + +\def\relax@with@arg#1{\relax} +\def\@affil#1{\textsuperscript{#1}} +\let\affil\@affil +\def\affiliation@footnotes{} +\def\affiliation#1#2{\g@addto@macro\affiliation@footnotes{ +\textsuperscript{#1}#2\par +}} + +% Английские аффилиации +\def\affiliationen#1#2{\g@addto@macro\affiliation@footnotes@en{ + \textsuperscript{#1}#2\par +}} + +% Переменная для английских аффилиации +\def\affiliation@footnotes@en{} + +%% Generic helpers for iterating over authors 1..10 (\author@i holds the index). + +\def\@author@indices{1,2,3,4,5,6,7,8,9,10} + +% \@authors@iter{}{}: run for every author that is defined. +\long\def\@authors@iter#1#2{% + \@for\author@i:=\@author@indices\do{% + \ifcsname author\author@i#1\endcsname#2\fi% + }% +} + +% Comma-separated list of \csname author\endcsname. +% Expandable (safe inside \edef): walks indices 1..10 carrying the current separator. +\def\@authors@split@by@comma#1{\@authors@walk{1}{#1}{}} +\def\@authors@walk#1#2#3{% + \ifnum#1>10 \else + \@ifundefined{author#1#2}% + {\expandafter\@authors@walk\expandafter{\the\numexpr#1+1\relax}{#2}{#3}}% + {#3\csname author#1#2\endcsname\expandafter\@authors@walk\expandafter{\the\numexpr#1+1\relax}{#2}{, }}% + \fi +} + +\def\@authors@truncated#1#2#3#4{% + \count@\z@ + \@authors@iter{#3}{\advance\count@\@ne}% + \edef\@authors@truncated@total{\the\count@}% + \ifnum\@authors@truncated@total>#1 + \@tempcnta#2\relax + \else + \@tempcnta\@authors@truncated@total\relax + \fi + \count@\z@\let\@author@sep\@empty + \@authors@iter{#3}{% + \advance\count@\@ne + \ifnum\count@>\@tempcnta\else + \@author@sep + \csname author\author@i#3\endcsname + \def\@author@sep{, }% + \fi + }% + \ifnum\@authors@truncated@total>#1 #4\fi +} + +\def\authors@short@split@by@comma{\@authors@split@by@comma{@short}} +\def\authors@short@first@lang@split@by@comma{\@authors@split@by@comma{@short@first@lang}} +\def\authors@short@first@lang@split@by@comma@remove@affil{% +\global\let\@@affil\affil% +\global\let\affil\relax@with@arg% +\authors@short@first@lang@split@by@comma% +\global\let\affil\@@affil% +} + +\def\authors@short@en@split@by@comma{\@authors@split@by@comma{@short@en}} +\def\authors@short@truncated{\@authors@truncated{4}{3}{@short}{\ и~др.}} +\def\authors@short@en@truncated{\@authors@truncated{4}{3}{@short@en}{\ et al.}} + +\def\@Letter{{\footnotesize \Letter}} + +%% Authors information +\def\authors@all@info{% + \def\authorinfo##1{ + \setstretch{0.9} + \if@englishversion + \csname author##1@short@en\endcsname% + \else + \csname author##1@short\endcsname% + \fi + \ifcsname author##1@email\endcsname% + \hspace{0.25em}% + \ifcsname author##1@email@recepient\endcsname% + \hspace{0.25em}\@Letter\ % <-- Добавлен пробел после конвертика + \fi% + \hspace{0.25em}\href{mailto:\csname author##1@email\endcsname}{\csname author##1@email\endcsname}% + \fi + \ifcsname author##1@orcid\endcsname% + , \href{https://\csname author##1@orcid\endcsname}{\csname author##1@orcid\endcsname}% + \fi + } + \@authors@iter{@short}{\authorinfo{\author@i}\par}% +} + +% Верхний колонтитул + +% Для русских авторов +\def\authors@names@only@ru{% + \begingroup + \def\affil##1{}% + \@authors@truncated{4}{3}{@short}{\ и~др.}% + \endgroup +} + +% Для английских авторов +\def\authors@names@only@en{% + \begingroup + \def\affil##1{}% + \ifcsname author1@short@en\endcsname + \@authors@truncated{4}{3}{@short@en}{\ et al.}% + \else + \@authors@truncated{4}{3}{@short}{\ et al.}% + \fi + \endgroup +} + + +% Title + +\newcommand\firstpage{\label{first@page}} +\newcommand\lastpage{\label{last@page}} + +% Сноска без маркера на первой странице — выходные данные на «противоположном» +% языке (английская статья → русская сноска, русская статья → английская сноска). +% Три строки: авторы, полное название, журнал/год/номер/страницы. +\def\@firstpage@translation@citation{% + \begingroup + \def\@thefnmark{}% + \def\@makefnmark{}% + \long\def\@makefntext##1{\noindent##1}% + \@footnotetext{% + \if@englishversion + % Английская статья → русская сноска. + \temp@authors\\ + \@title.\\ + \copyright\ \journal@type@ru, \issue@year. № \issue@number. С. \pages@span.% + \else + % Русская статья → английская сноска. + \temp@authors@en\\ + \@title@en.\\ + \copyright\ \journal@type@en, \issue@year. No \issue@number. P. \pages@span.% + \fi + }% + \endgroup +} + +\renewcommand\maketitle{\par + \@firstpagetrue % Устанавливаем флаг первой страницы + \gdef\@author{\mbox\authors@short@split@by@comma} + + \ifcsname fancy@title\endcsname + \setarticleheader{\fancy@title}{\fancy@title@en} + \else + \setarticleheader{\@title}{\@title@en} + \fi + + \gdef\temp@authors{\begingroup\let\affil\@gobble\authors@short@truncated\endgroup} + \gdef\temp@authors@en{\begingroup\let\affil\@gobble\authors@short@en@truncated\endgroup} + + % разные авторы для русского и английского + \setauthorsheader{\authors@names@only@ru}{\authors@names@only@en} + + \begingroup + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}% + \long\def\@makefntext##1{\parindent 1em\noindent + \hb@xt@1.8em{% + \hss\@textsuperscript{\normalfont\@thefnmark}}##1}% + \global\@topnum\z@ % Prevents figures from going at top of page + \@maketitle + \@firstpage@translation@citation % выходные данные на противоположном языке + \thispagestyle{firstpagestyle} % Специальный стиль для первой страницы + \global\@firstpagefalse % Сбрасываем флаг + \pagestyle{mainstyle} % Устанавливаем основной стиль для следующих страниц + \@thanks + \endgroup + \setcounter{footnote}{0}% +% \global\let\affil\relax@with@arg + \global\let\thanks\relax +% \global\let\maketitle\relax + \global\let\@thanks\@empty + \firstpage + \@firstpagefalse % После создания титульной страницы сбрасываем флаг +} + \setcounter{footnote}{0}% + % \global\let\affil\relax@with@arg + \global\let\thanks\relax +% \global\let\maketitle\relax + \global\let\@thanks\@empty +% \firstpage + +\def\@title{} +\def\@author{} +\def\@address{} +\def\fancy@header@title{FANCY@HEADER@TITLE} +\def\journal@type{} +\def\issue@year{????}% +\def\issue@number{?}% +\def\journal@section@img{kio-logo-col.png} +\def\journal@section@name{????} +\def\cp@issue@year{} +\expandafter\def\csname author1@short\endcsname{???} +\expandafter\def\csname author1@full\endcsname{????} +\expandafter\def\csname author1@addr\endcsname{??????} +\expandafter\def\csname author1@email\endcsname{???@???} +\def\journal@type@ru{????} +\def\journal@type@en{????} + +\def\issue#1#2#3{ + \def\issue@year{#1}% + \def\cp@issue@year{,\space#1}% + \def\issue@number{#2}% + \def\@section@image@path@prefix{"images/"} + \ifthenelse{\equal{edu}{#3}}{% + \def\journal@type{\@langrev{Компьютерные инструменты в образовании}{Computer Tools in Education}}% + \def\journal@type@ru{{\selectlanguage{russian}Компьютерные инструменты в образовании}}% + \def\journal@type@en{Computer Tools in Education}% + }{% + \ifthenelse{\equal{cam}{#3}}{% + \def\journal@type{\@langrev{Компьютерная математика}{Computer Assisted Mathematics}}% + \def\journal@type@ru{{\selectlanguage{russian}Компьютерная математика}}% + \def\journal@type@en{Computer Assisted Mathematics}% + \def\@section@image@path@prefix{cam-}% + }{% + \def\journal@type{\@langrev{Компьютерные инструменты в школе}{Computer Tools at Schools}}% + }% + }% + \ifthenelse{\equal{cam}{#3}}{% + \definecolor{rulercolor}{RGB}{32,63,153} + }{% + \definecolor{rulercolor}{RGB}{145,56,40} + }% +} + +\newif\if@in@translatedpart +\@in@translatedpartfalse + +% Текущий тип статьи: язык определяется флагом \if@englishversion. +% Внутри \translatedpart флаг инвертируется, поэтому проверка одна. +\def\article@type@current{% + \if@englishversion\article@type@en\else\article@type@ru\fi% +} + +\def\article@type@ru{{\selectlanguage{russian}Оригинальное исследование}} +\def\article@type@en{Research article} + +\newcommand{\articletr}[2]{% + \gdef\article@type@ru{#1}% + \gdef\article@type@en{#2}% +} +% Команда для выбора типа статьи +\newcommand{\articletype}[1]{% + \ifcase#1\relax + \or % 1 + \gdef\article@type@ru{{\selectlanguage{russian}Оригинальное исследование}}% + \gdef\article@type@en{Research article}% + \or % 2 + \gdef\article@type@ru{{\selectlanguage{russian}Обзорная статья}}% + \gdef\article@type@en{Review article}% + \or % 3 + \gdef\article@type@ru{{\selectlanguage{russian}Материалы конференции}}% + \gdef\article@type@en{Conference paper}% + \or % 4 + \gdef\article@type@ru{{\selectlanguage{russian}Редакционная статья}}% + \gdef\article@type@en{Editorial article}% + \or % 5 + \gdef\article@type@ru{{\selectlanguage{russian}Дискуссионная статья}}% + \gdef\article@type@en{Discussion article}% + \or % 6 + \gdef\article@type@ru{{\selectlanguage{russian}Краткое сообщение}}% + \gdef\article@type@en{Short Communication}% + \fi +} + +%\def\article@type{} +%\def\articletype#1{\def\article@type{#1}} +\def\kio@page{\bf \arabic{page}} +\def\doinumber#1{\def\doi@number{#1}} +% Лицензия не подключена +\def\license#1{\def\@license{#1}} +\def\@license{CC~BY~4.0} +\def\udknumber#1{\def\udk@number{#1}} + +\def\bibdoi{\doi} +\def\arxiv#1{\href{http://arxiv.org/abs/#1}{arXiv:#1}} + +\def\journalsection#1{% + \def\@sectionwithimage{true} % Флаг, что раздел С изображением + \def\journal@section@id{#1} + \ifthenelse{\equal{informatics}{#1}}{% + \def\journal@section@name{\@lang{ИНФОРМАТИКА}{COMPUTER SCIENCE}}% + \setsectionheader{{\selectlanguage{russian}ИНФОРМАТИКА}}{COMPUTER SCIENCE}% <-- ДОБАВИТЬ + }{% + \ifthenelse{\equal{information-systems}{#1}}{% + \def\journal@section@name{\@lang{ИНФОРМАЦИОННЫЕ СИСТЕМЫ}{INFORMATION SYSTEMS}}% + \setsectionheader{{\selectlanguage{russian}ИНФОРМАЦИОННЫЕ СИСТЕМЫ}}{INFORMATION SYSTEMS}% <-- ДОБАВИТЬ + }{% + \ifthenelse{\equal{software-engineering}{#1}}{% + \def\journal@section@name{\@lang{ИНЖЕНЕРИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ}{SOFTWARE ENGINEERING}}% + \setsectionheader{{\selectlanguage{russian}ИНЖЕНЕРИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ}}{SOFTWARE ENGINEERING}% <-- ДОБАВИТЬ + }{% + \ifthenelse{\equal{computer-in-education}{#1}}{% + \def\journal@section@name{\@lang{КОМПЬЮТЕР В УЧЕБНОМ ПРОЦЕССЕ}{COMPUTER IN EDUCATION}}% + \setsectionheader{{\selectlanguage{russian}КОМПЬЮТЕР В УЧЕБНОМ ПРОЦЕССЕ}}{COMPUTER IN EDUCATION}% <-- ДОБАВИТЬ + }{% + \ifthenelse{\equal{popular-science-articles}{#1}}{% + \def\journal@section@name{\@lang{НАУЧНО-ПОПУЛЯРНЫЕ СТАТЬИ}{POPULAR-SCIENCE ARTICLES}}% + \setsectionheader{{\selectlanguage{russian}НАУЧНО-ПОПУЛЯРНЫЕ СТАТЬИ}}{POPULAR-SCIENCE ARTICLES}% <-- ДОБАВИТЬ + }{% + \ifthenelse{\equal{programming-practice}{#1}}{% + \def\journal@section@name{\@lang{ПРАКТИКА ПРОГРАММИРОВАНИЯ}{PROGRAMMING PRACTICE}}% + \setsectionheader{{\selectlanguage{russian}ПРАКТИКА ПРОГРАММИРОВАНИЯ}}{PROGRAMMING PRACTICE}% <-- ДОБАВИТЬ + }{% + \ifthenelse{\equal{editorial-column}{#1}}{% + \def\journal@section@name{\@lang{КОЛОНКА РЕДАКТОРА}{EDITORIAL COLUMN}}% + \setsectionheader{{\selectlanguage{russian}КОЛОНКА РЕДАКТОРА}}{EDITORIAL COLUMN}% <-- ДОБАВИТЬ + }{% + \ifthenelse{\equal{specialists-training-new-teaching-methods}{#1}}{% + \def\journal@section@name{\@lang{ПОДГОТОВКА СПЕЦИАЛИСТОВ: новые методы обучения}{SPECIALISTS TRAINING: new teaching methods}}% + \setsectionheader{{\selectlanguage{russian}ПОДГОТОВКА СПЕЦИАЛИСТОВ: новые методы обучения}}{SPECIALISTS TRAINING: new teaching methods}% <-- ДОБАВИТЬ + }{% + \ifthenelse{\equal{specialists-training-training-programs}{#1}}{% + \def\journal@section@name{\@lang{ПОДГОТОВКА СПЕЦИАЛИСТОВ: программы обучения}{SPECIALISTS TRAINING: training programs}}% + \setsectionheader{{\selectlanguage{russian}ПОДГОТОВКА СПЕЦИАЛИСТОВ: программы обучения}}{SPECIALISTS TRAINING: training programs}% + }{% + \ifthenelse{\equal{specialists-training-professional-standards}{#1}}{% + \def\journal@section@name{\@lang{ПОДГОТОВКА СПЕЦИАЛИСТОВ: профессиональные стандарты}{SPECIALISTS TRAINING: professional standards}}% + \setsectionheader{{\selectlanguage{russian}ПОДГОТОВКА СПЕЦИАЛИСТОВ: профессиональные стандарты}}{SPECIALISTS TRAINING: professional standards}% + }{% + \ifthenelse{\equal{algorithmic-mathematics}{#1}}{% + \def\journal@section@name{\@lang{АЛГОРИТМИЧЕСКАЯ МАТЕМАТИКА И МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ}{ALGORITHMIC MATHEMATIC AND MATHEMATICAL MODELING}}% + \setsectionheader{{\selectlanguage{russian}АЛГОРИТМИЧЕСКАЯ МАТЕМАТИКА И МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ}}{ALGORITHMIC MATHEMATIC AND MATHEMATICAL MODELING}% <-- ДОБАВИТЬ + }{% + \ifthenelse{\equal{mathematical-modeling}{#1}}{% + \def\journal@section@name{\@lang{МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ}{MATHEMATICAL MODELING}}% + \setsectionheader{{\selectlanguage{russian}МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ}}{MATHEMATICAL MODELING}% <-- ДОБАВИТЬ + }{% + \ifthenelse{\equal{open-problems-for-young-scientists}{#1}}{% + \def\journal@section@name{\@lang{НЕРЕШЕННЫЕ ЗАДАЧИ ДЛЯ МОЛОДЫХ УЧЕНЫХ}{OPEN PROBLEMS FOR YOUNG SCIENTISTS}}% + \setsectionheader{{\selectlanguage{russian}НЕРЕШЕННЫЕ ЗАДАЧИ ДЛЯ МОЛОДЫХ УЧЕНЫХ}}{OPEN PROBLEMS FOR YOUNG SCIENTISTS}% <-- ДОБАВИТЬ + }{% + \ifthenelse{\equal{new-section}{#1}}{% + \def\journal@section@name{\@lang{НОВЫЙ РАЗДЕЛ}{A NEW SECTION}}% + \setsectionheader{{\selectlanguage{russian}НОВЫЙ РАЗДЕЛ}}{A NEW SECTION}% <-- ДОБАВИТЬ + }{% + \ifthenelse{\equal{artificial-intelligence}{#1}}{% + \def\journal@section@name{\@lang{ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ И МАШИННОЕ ОБУЧЕНИЕ}{ARTIFICIAL INTELLIGENCE AND MACHINE LEARNING}}% + \setsectionheader{{\selectlanguage{russian}ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ И МАШИННОЕ ОБУЧЕНИЕ}}{ARTIFICIAL INTELLIGENCE AND MACHINE LEARNING}% <-- ДОБАВИТЬ + }{% + \ifthenelse{\equal{empty}{#1}}{% + \def\journal@section@name{}% + \def\journal@section@img{}% + \setsectionheader{}{}% <-- ДОБАВИТЬ (пустые значения) + }{% + \def\journal@section@name{\@lang{раздел не указан или неизвестен}{section not specified or unknown} #1}% + \setsectionheader{{\selectlanguage{russian}раздел не указан или неизвестен #1}}{section not specified or unknown #1}% <-- ДОБАВИТЬ + }% + }% + }% + }% + }% + }% + }% + }% + }% + }% + }% + }% + }% + }% + }% + }% +} +\def\journalsectionnoimage#1{% + \def\@sectionwithimage{false} % Флаг, что раздел БЕЗ изображения + \journalsection{#1}% + \def\no@section@image{}% +}% + +\def\print@title{{\LARGE \hv@sf\bfseries\mathversion{bold} \MakeUppercase{\@title} \par}} +\def\print@author{% + \vskip 1.5em% + {\hv@sf + \lineskip .5em% + \large\upshape + \begin{varwidth}{\textwidth}\raggedright\authors@all@info\end{varwidth}% + \par} + } +\def\print@address{\vskip 0.5em + \small\hv@sf\upshape\@address\par + } + +% title + +\def\pages@span{% +\ifthenelse{\equal{\pageref*{first@page}}{\pageref*{last@page}}}% + {\pageref*{last@page}}% + {\pageref*{first@page}--\pageref*{last@page}}% +} + +\newcommand\print@doi{\href{https://doi.org/\doi@number}{doi:\doi@number}} +\newcommand\print@doi@full{\url{https://doi.org/\doi@number}} + +% Ширина блока с метаданными (тип статьи, выпуск, УДК, URL, DOI). +% Меньшая ширина → блок сдвигается вправо за счёт \hfill между картинкой и блоком. +% Должно хватать на самую длинную строку — обычно DOI (например, +% «doi:10.32603/2071-2340-2026-4-113-129»). +\def\title@full@article@info@width{5.52cm} +\def\title@full@article@info{% + \begin{minipage}{\title@full@article@info@width} +% \fbox{% ← Рамка + \parbox{\linewidth}{% ← Вложенный parbox для точности; текст внутри выровнен влево + \small\hv@sf + % ТИП СТАТЬИ ЖИРНЫМ ШРИФТОМ — язык согласно \article@type@current + \textbf{\article@type@current}\\ [0.6ex] + №~\issue@number:\space + \pages@span% + \@ifundefined{udk@number}{}{\\[0.6ex]\@langrev{УДК}{UDC}:\space\udk@number}% + \\[0.6ex]\href{http://cte.eltech.ru}{http://cte.eltech.ru}% + \@ifundefined{doi@number}{}{\\[0.6ex]\print@doi}% + } +% } + \end{minipage}% +} + \def\title@section@image{% + \begin{minipage}{7cm} + \@ifundefined{no@section@image}{% + \includegraphics[width=7cm]{\@section@image@path@prefix\journal@section@id\@lang{}{-en}.png}% + }{% + % \hskip 7cm% + } + \end{minipage}% + }% + +\def\@maketitle{% + + %---------------------------- + \ifthenelse{\isodd{\value{page}}}{% + % Нечетные страницы: метаданные слева, картинка справа + \noindent\title@full@article@info\hfill\title@section@image% +}{% + % Четные страницы: картинка слева, метаданные справа + \noindent\title@section@image\hfill\title@full@article@info% +}% + % + %---------------------------- + %ruler below title + %\par\vskip3pt\noindent\textcolor{rulercolor}{\hrulefill} + {%\raggedright% + \centering + \let \footnote \thanks + \vskip 2cm + \if@englishversion + \@ifundefined{@title@en}{}{\let\@title\@title@en\print@title}% + \else + \@ifundefined{@title}{}{\print@title}% + \fi + \@ifundefined{@author}{}{\print@author}% + \@ifundefined{@address}{}{\print@address}% + \if@englishversion\affiliation@footnotes@en\else\affiliation@footnotes\fi + }% + \par + \vskip 1.5em% +} + +\renewenvironment{abstract}{% +% \setcounter{page}{\start@page}\label{first@page} +% \setcounter{page}{1}\label{first@page} + \if@twocolumn + %\section*{Аннотация}% + \else + \everypar{\parskip 3pt plus1pt minus2pt + \parindent=0pt% \hangindent=\@titleindent + \hangafter=0% + \leftskip=\@titleindent% + \rightskip=\@titleindent} + \noindent\small\hv@sf\upshape\ignorespaces + \fi + {\centering\textbf{\kioabstractname}\par}} + {\if@twocolumn\else\vskip 1.5em plus 0.2em \fi\upshape} + +\newcommand\abstract@section[2]{\par\vskip 1ex + \noindent% + \raggedright% + \leftskip=\@titleindent% + \rightskip=\@titleindent% + \upshape{\hv@sf\bfseries #1:}#2\space} + +\newcommand\keywords{\par\vskip 0.5ex + \noindent% + \raggedright% + \leftskip=\@titleindent% + \rightskip=\@titleindent% + \upshape{\hv@sf\bfseries \keywordsname: }\slshape} + + +\newcommand\acknowledgements[1]{\par\vskip 1ex\noindent\textbf{\acknowledgementsname: }\textit{#1}} + +% --- Хелперы для IEEE-стилизации списка авторов ---------------------------- + +% Перестановка «Lastname I.~I.» → «I.~I. Lastname» (по первому пробелу). +% Перед вызовом полезно сделать \let\affil\@gobble, чтобы убрать аффилиации. +\def\@kio@swap@author#1 #2\@@nil{#2 #1} + +% Печать всех авторов в IEEE-стиле: +% 1 author : «I. I. X» +% 2 authors: «I. I. X and J. J. Y» +% 3 : «I. I. X, J. J. Y, and K. K. Z» (Oxford comma) +% 4+ : «I. I. X, J. J. Y, K. K. Z, et al.» (truncate to first 3) +\newcommand{\@kio@ieee@authors}{% + \count@\z@ + \@authors@iter{@short@en}{\advance\count@\@ne}% + \edef\@kio@total{\the\count@}% + \ifnum\@kio@total>4 + \@kio@ieee@authors@truncated + \else + \@kio@ieee@authors@full + \fi +} + +% Полный список авторов (n<=4) +\newcommand{\@kio@ieee@authors@full}{% + \count@\z@ + \@authors@iter{@short@en}{% + \advance\count@\@ne + \ifnum\count@>\@ne + \ifnum\count@=\@kio@total\relax + \ifnum\@kio@total=\tw@\space and\space\else, and\space\fi + \else + , % + \fi + \fi + \edef\@kio@cur{\csname author\author@i @short@en\endcsname}% + \expandafter\@kio@swap@author\@kio@cur\@@nil + }% +} + +% Усечённый список (n>4): первые три автора через запятую и затем «, et al.». +\newcommand{\@kio@ieee@authors@truncated}{% + \count@\z@ + \@authors@iter{@short@en}{% + \advance\count@\@ne + \ifnum\count@>3\else + \ifnum\count@>\@ne, \fi + \edef\@kio@cur{\csname author\author@i @short@en\endcsname}% + \expandafter\@kio@swap@author\@kio@cur\@@nil + \fi + }% + , et~al.% +} + +% «p.» для одной страницы, «pp.» для диапазона — определяется через метки first/last@page. +\newcommand{\@kio@pages@prefix}{% + \ifthenelse{\equal{\pageref*{first@page}}{\pageref*{last@page}}}{p.}{pp.}% +} + +% --- Автогенерируемое цитирование ------------------------------------------ +% \autocitation — печатает ярлык «Цитирование/Citation» и автоматически +% собранный пример цитирования. +% • Русская версия — стиль ГОСТ Р 7.0.100-2018: «Авторы. Название // Журнал. +% Год. № Номер. С. Страницы. doi:…». +% • Английская версия — IEEE-стиль: «I. I. Author1, …, and I. I. AuthorN, +% “Title,” Journal, no. N, pp. P–Q, Year, doi:…». +% Используются полные названия (\@title / \@title@en). +\newcommand\autocitation{% + \par\vskip 1ex\noindent\textbf{\citationname: }% + \begingroup + \let\affil\@gobble % в цитировании не нужны индексы аффилиаций + \@langrev{% + % Русский / ГОСТ + \authors@short@truncated\space\@title\space// + \space\journal@type. \issue@year. № \issue@number. С.~\pages@span.% + \@ifundefined{doi@number}{}{\space\print@doi.}% + }{% + % English / IEEE + \@kio@ieee@authors, ``\@title@en,''\space + \journal@type@en, no.~\issue@number, \@kio@pages@prefix~\pages@span, \issue@year% + \@ifundefined{doi@number}{}{, \print@doi}.% + }% + \endgroup +} + +% --- Ручное цитирование --- +% \manualcitation{<текст>} — печатает ярлык «Цитирование/Citation» и далее +% переданный пользователем текст. Пример: +% \manualcitation{Andreev A.~A., Borisov B.~B. Article title. Journal, 2026.} +\newcommand{\manualcitation}[1]{% + \par\vskip 1ex\noindent\textbf{\citationname: }#1% +} + +\newcommand\pacs{\par\vskip 1ex + \noindent\raggedright\upshape{\hv@sf\bfseries PACS:}\slshape\space} + +% ========================================================================= +% Generic author API: \author{N}[short]{full}, \authoren{N}[short]{full}, +% \authorinfo{N}{...}, \authorinfoen{N}{...}, +% \authoremail{N}{...}, \authoremailEnvelope{N}{...}, \authororcid{N}{...}. +% N is an Arabic numeral; it is used directly as the key inside \csname...\endcsname. +% ========================================================================= + +% \author{N}[short]{full} +\def\author#1{\@dblarg{\make@author{#1}}} +\long\def\make@author#1[#2]#3{% + \expandafter\gdef\csname author#1@short\endcsname{#2}% + \expandafter\gdef\csname author#1@full\endcsname{#3}% + % English defaults (overridden by \authoren{N}[...]{...} if used) + \expandafter\gdef\csname author#1@short@en\endcsname{#2}% + \expandafter\gdef\csname author#1@full@en\endcsname{#3}% +} + +% \authoren{N}[short]{full} +\def\authoren#1{\@dblarg{\make@authoren{#1}}} +\long\def\make@authoren#1[#2]#3{% + \expandafter\gdef\csname author#1@short@en\endcsname{#2}% + \expandafter\gdef\csname author#1@full@en\endcsname{#3}% +} + +% \authorinfo{N}{...} / \authorinfoen{N}{...} +\newcommand{\authorinfo}[2]{% + \expandafter\def\csname author#1@info\endcsname{#2}% + \expandafter\def\csname author#1@info@en\endcsname{#2}% +} +\newcommand{\authorinfoen}[2]{% + \expandafter\def\csname author#1@info@en\endcsname{#2}% +} + +% \authoremail{N}{...} / \authoremailEnvelope{N}{...} +\newcommand{\authoremail}[2]{% + \expandafter\def\csname author#1@email\endcsname{#2}% +} +\newcommand{\authoremailEnvelope}[2]{% + \authoremail{#1}{#2}% + \expandafter\def\csname author#1@email@recepient\endcsname{}% +} + +% \authororcid{N}{...} +\newcommand{\authororcid}[2]{% + \expandafter\def\csname author#1@orcid\endcsname{#2}% +} + +\def\title{\@dblarg{\make@title}} +\long\def\make@title[#1]#2{ + \gdef\fancy@title{#1} + \gdef\fancy@header@title{#1} + \gdef\@title{#2} + \gdef\@title@en{#1} % английская версия +} + +% Команда для английского заголовка +\def\titleen{\@dblarg{\make@titleen}} +\long\def\make@titleen[#1]#2{ + \gdef\fancy@title@en{#1} + \gdef\fancy@header@title@en{#1} + \gdef\@title@en{#2} +} + +\def\print@author@en{% + \vskip 1.5em% + {\hv@sf + \lineskip .5em% + \large\upshape + \def\authorinfo##1{ + \setstretch{0.9} + \csname author##1@short@en\endcsname% + \ifcsname author##1@email\endcsname% + \hspace{0.5em}% + \ifcsname author##1@email@recepient\endcsname\@Letter\fi% + \hspace{0.5em}\href{mailto:\csname author##1@email\endcsname}{\csname author##1@email\endcsname}% + \fi + \ifcsname author##1@orcid\endcsname% + , \href{https://\csname author##1@orcid\endcsname}{\csname author##1@orcid\endcsname}% + \fi + } + \@authors@iter{@short@en}{\authorinfo{\author@i}\par}% + \par} +} + +% Команды колонтитулов +\def\@russianarticleheader{} +\def\@englisharticleheader{} +\def\@russianauthorsheader{} +\def\@englishauthorsheader{} +\def\@russiansectionheader{} +\def\@englishsectionheader{} +\def\@sectionwithimage{false} +\newif\iffirstpage +\firstpagetrue + + +% Ключевые слова — печатают свой блок прямо на месте вызова. +% Текст аннотации и дополнительной информации пользователь записывает напрямую +% внутри \begin{abstract} и \additionalinfo{...}. +% Пример цитирования формируется автоматически командой \autocitation. +\newcommand{\keywordsru}[1]{% + \par\vskip 0.5ex\noindent\textbf{Ключевые слова: }\textit{#1}% +} +\newcommand{\keywordsen}[1]{% + \par\vskip 0.5ex\noindent\textbf{Keywords: }\textit{#1}% +} + +% Благодарности / Acknowledgments +\newcommand{\acknowledgmentsru}[1]{% + \par\vskip 1ex\noindent\textbf{Благодарности: }\textit{#1}% +} +\newcommand{\acknowledgmentsen}[1]{% + \par\vskip 1ex\noindent\textbf{Acknowledgments: }\textit{#1}% +} + +% Вклад авторов / Authors' Contributions +\newcommand{\authorscontributionsru}[1]{% + \par\vskip 1ex\noindent\textbf{Вклад авторов: }\textit{#1}% +} +\newcommand{\authorscontributionsen}[1]{% + \par\vskip 1ex\noindent\textbf{Authors' Contributions: }\textit{#1}% +} + +% Финансирование / Funding +\newcommand{\fundingru}[1]{% + \par\vskip 1ex\noindent\textbf{Финансирование: }\textit{#1}% +} +\newcommand{\fundingen}[1]{% + \par\vskip 1ex\noindent\textbf{Funding: }\textit{#1}% +} + +% Конфликт интересов / Conflict of Interest +\newcommand{\conflictofinterestru}[1]{% + \par\vskip 1ex\noindent\textbf{Конфликт интересов: }\textit{#1}% +} +\newcommand{\conflictofinteresten}[1]{% + \par\vskip 1ex\noindent\textbf{Conflict of Interest: }\textit{#1}% +} + +\def\address#1{\gdef\@address{#1}} +\def\addresses#1{\gdef\@address{% + \renewcommand{\labelenumi}{$^{\textsf{\footnotesize\arabic{enumi}}}$} + \setlength{\leftmargini}{0mm} + \setlength{\topsep}{0mm} + \setlength{\partopsep}{0mm} + \setlength{\parskip}{0mm} + \begin{enumerate} + \setlength{\itemsep}{0mm} + \setlength{\itemindent}{0em} + \setlength{\labelsep}{2pt} + #1 + \end{enumerate}}} + +% Настройка колонтитулов +\newcommand{\setarticleheader}[2]{% + \def\@russianarticleheader{{\selectlanguage{russian}#1}}% + \def\@englisharticleheader{#2}% +} + +\newcommand{\setauthorsheader}[2]{% + \def\@russianauthorsheader{{\selectlanguage{russian}#1}}% + \def\@englishauthorsheader{#2}% +} + +\newcommand{\setsectionheader}[2]{% + \def\@russiansectionheader{{\selectlanguage{russian}#1}}% + \def\@englishsectionheader{#2}% +} + +\DeclareRobustCommand\@refad{\@@refadx} +\def\@@refadx#1{% + \let\@@refada\@empty + \@@refad{\@for\@@refadb:=#1\do + {\@@refada\def\@@refada{,\penalty\@m}% + \edef\@@refadb{\expandafter\@firstofone\@@refadb\@empty}% + \@ifundefined{r@\@@refadb}{\mbox{\reset@font\bfseries ?}% + \G@refundefinedtrue + \@latex@warning + {Address reference `\@@refadb' undefined}}% + {\hbox{\ref{\@@refadb}}}}}} +\def\@@refad#1{{#1}} + +%% Floats %% + +%\bibsep=0pt +%\renewcommand{\bibnumfmt}[1]{#1.} +\@ifundefined{bibfont}{\newcommand{\bibfont}{\small}}{\renewcommand{\bibfont}{\small}} + +%% Английская часть %% + +\newcommand\maketranslatedtitle{ + \begingroup + \global\@botnum\z@ % Не разрешаем рисунки внизу страницы. + % Внутри \translatedpart \if@englishversion уже отражает язык перевода. + \if@englishversion\let\@title\@title@en\fi + \@makerutitle + \@thanks + \endgroup + \global\let\thanks\relax + \global\let\makerutitle\relax + \global\let\@makerutitle\relax + \global\let\@thanks\@empty + % \@title и \@title@en НЕ очищаем — они нужны позже для \autocitation. + \global\let\@author\@empty + \global\let\@date\@empty + \global\let\title\relax + \global\let\author\relax + \global\let\date\relax + \global\let\and\relax +} +\def\print@rutitle{{\Large \hv@sf\bfseries\mathversion{bold}{\@title} \par}} + +\def\@makerutitle{% + \par + \vskip 10pt + \noindent\null + \ifthenelse{\isodd{\value{page}}}{% + % Нечетные страницы + \noindent\hfill% + \begin{minipage}[t]{5.5cm} + \raggedleft + \title@full@article@info + \end{minipage} + }{% + % Четные страницы + \noindent\title@full@article@info\hfill% + } + \vskip 1.5em + \noindent\null + \raggedright% + \centering + \let \footnote \thanks + + \if@englishversion + \@ifundefined{@title@en}{}{\def\@title{\@title@en}}% + \fi + \@ifundefined{@title}{}{\print@rutitle}% + \global\let\affil\@affil% + + % Информация об авторах: \print@author уже выбирает язык по \if@englishversion. + \print@author + + \@ifundefined{@address}{}{\print@address}% + % Аффилиации соответствуют языку перевода. + \if@englishversion\affiliation@footnotes@en\else\affiliation@footnotes\fi + \global\let\affil\relax@with@arg% + \par + \vskip 1.5em% +} + +\newenvironment{translatedpart}{% + \def\@has@translated@part{} + \@in@translatedparttrue + \@flip@englishversion % язык переключается на противоположный + \lefthyphenmin=2 \righthyphenmin=2 % disallow x- or -x breaks; -xx OK + \lccode`\'=`\' + \def\@reverse@lang{} + +%% ПРОВЕРКА МЕСТА + + % Сбрасываем штрафы для проверки места + \widowpenalty=0 + \clubpenalty=0 + + % Проверяем, есть ли хотя бы 50% страницы свободно + \@tempdima=\pagegoal \advance\@tempdima-\pagetotal + \@tempdimb=0.5\pagegoal % 50% от высоты страницы + + \ifdim\@tempdima>\@tempdimb + % Есть достаточно места - рисуем линию + \vspace{12pt} + {\color{rulercolor}% + \hrule width\headwidth height\headrulewidth + \vspace{1pt} + \hrule width\headwidth height\headrulewidth} + \vspace{12pt} + \else + % Недостаточно места - новая страница + \newpage + \fi + \@firstpagefalse +}{ + % В КОНЦЕ переведённой части выводим расширенную информацию об авторах + % на языке перевода (\if@englishversion уже инвертирован для translatedpart). + \@ifundefined{need@authors@info}{}{ + \vspace*{1cm} + \par + \addvspace{6pt} + \widowpenalty=0 + \clubpenalty=0 + + \printauthorsinfo + } + \@flip@englishversion % восстанавливаем исходный язык +} + +\newcommand\additionalinfo[1]{ +\begin{center} +{\noindent\small\hv@sf\upshape\ignorespaces #1} +\end{center} +} + +%% General %% + +%\voffset -1in +%\hoffset -1in +\textwidth 150mm +%\textheight 227mm +\textheight 646pt % = 227.0430331mm +\topmargin 30mm +\headheight 15pt +\headsep 10mm +%\footskip 25mm % Добавили отступ для нижнего колонтитула +\addtolength{\topmargin}{-\headheight} +\addtolength{\topmargin}{-\headsep} +\addtolength{\topmargin}{-1in} +\oddsidemargin 35mm +\setlength{\evensidemargin}{210mm} +\addtolength{\evensidemargin}{-\textwidth} +\addtolength{\evensidemargin}{-\oddsidemargin} +\addtolength{\oddsidemargin}{-1in} +\addtolength{\evensidemargin}{-1in} +\baselineskip 15pt +\newlength{\@titlewidth} +\newlength{\@titleindent} +\setlength{\@titlewidth}{\textwidth} +\setlength{\@titleindent}{15mm} +\addtolength{\@titlewidth}{-\@titleindent} +\newlength{\@captionwidth} +%\setlength{\@captionwidth}{\hsize} +%\addtolength{\@captionwidth}{-2\parindent} +%P%\renewcommand{\encodingdefault}{T1} +%\renewcommand{\sfdefault}{phv} +\renewcommand{\sfdefault}{\lat@sf} +\frenchspacing +\let\@afterindentfalse\@afterindenttrue + +\renewcommand\footnoterule{% + \vskip 8\p@ \@plus\z@ \@minus 5\p@ + \color{rulercolor}\hrule height 0.4pt \@width\textwidth + \vskip 12\p@ \@plus\z@ \@minus 3\p@} +\setlength{\skip\footins}{12pt plus 2pt minus 6pt} +\setlength{\footnotesep}{5pt} + +%% Headings %% + +%\def\sf@phv{\fontencoding{T1}\fontfamily{phv}\selectfont\upshape} +%P1%\def\sf@phv{\fontencoding{T1}\fontfamily{\lat@sf}\selectfont\upshape} +\def\sf@phv{\fontfamily{\lat@sf}\selectfont\upshape} +\newcounter{isspage} +\def\issue@page@odd{} +\def\issue@page@even{} +\def\issuepage#1{% + \oddsidemargin 20mm% + \setlength{\evensidemargin}{210mm}% + \addtolength{\evensidemargin}{-\textwidth}% + \addtolength{\evensidemargin}{-\oddsidemargin}% + \addtolength{\oddsidemargin}{-1in} + \addtolength{\evensidemargin}{-1in} + \setcounter{isspage}{#1}% + \addtocounter{isspage}{-1}% + \def\issue@page@odd{% + \stepcounter{isspage}% + {\unitlength1mm% + \begin{picture}(0,0)% +% \put(30,10){\makebox(0,0)[l]{\vrule height 20pt}}% + \put(30.5,10){\makebox(0,0)[l]{\rotatebox{90}{\textsf{\theisspage}}}}% + \end{picture}}% + }% + \def\issue@page@even{% + \stepcounter{isspage}% + {\unitlength1mm% + \begin{picture}(0,0)% +% \put(-30,10){\makebox(0,0)[l]{\vrule height 20pt}}% + \put(-30,10){\makebox(0,0)[r]{\rotatebox{90}{\textsf{\theisspage}}}}% + \end{picture}}% + }% +} + + +\renewcommand{\headrule}{\fancyplain{}{{\color{rulercolor}% + \hrule width\headwidth height\headrulewidth \vskip-\headrulewidth}}} + +\renewcommand{\footrule}{{\color{rulercolor}% + \vskip-\footruleskip\vskip-\footrulewidth% + \hrule width\headwidth height\footrulewidth\vskip\footruleskip}} + +\renewcommand{\headrulewidth}{0.4pt} +\renewcommand{\footrulewidth}{0.4pt} +\renewcommand{\plainheadrulewidth}{0pt} +\renewcommand{\plainfootrulewidth}{0.4pt} + +% Стили страниц + +% КОЛОНТИТУЛЫ ВСЕХ СТРАНИЦ КРОМЕ 1-ОЙ + +\fancypagestyle{mainstyle}{% + \fancyhf{} + \renewcommand{\headrulewidth}{0.4pt} + \renewcommand{\footrulewidth}{0.4pt} + + % Верхние колонтитулы. Используем \ifenglishpaper (постоянный по всему документу), + % чтобы внутри \translatedpart колонтитулы НЕ переключались на другой язык. + \fancyhead[RO]{% + \normalsize\sf@phv\textcolor{rulercolor}{% + \ifenglishpaper\@englisharticleheader\else\@russianarticleheader\fi + }% + } + + \fancyhead[LE]{% + \normalsize\sf@phv\textcolor{rulercolor}{% + \ifenglishpaper\@englishauthorsheader\else\@russianauthorsheader\fi + }% + } + + % НИЖНИЕ КОЛОНТИТУЛЫ С НОМЕРАМИ СТРАНИЦ ВНУТРИ + \fancyfoot[RO]{% + \normalsize\sf@phv\textcolor{rulercolor}{% + \ifenglishpaper + \ \MakeTextUppercase{\journal@type@en}\ \issue@year.\ no.\ \issue@number.\ pp.\ \pages@span + \else + \ \MakeTextUppercase{\journal@type@ru}\ \issue@year.\ {\selectlanguage{russian}№\ \issue@number.\ С.\ \pages@span} + \fi + }% + \hfill + \normalsize\sf@phv\textcolor{black}{\kio@page} + } + + \fancyfoot[LE]{% + \normalsize\sf@phv\textcolor{black}{\kio@page} + \hfill + \normalsize\sf@phv\textcolor{rulercolor}{% + \ifenglishpaper\@englishsectionheader\else\@russiansectionheader\fi + }% + } +} + +% КОЛОНТИТУЛЫ ПЕРВОЙ СТРАНИЦЫ +\fancypagestyle{firstpagestyle}{% + \fancyhf{} + + \renewcommand{\headrulewidth}{0pt} + \renewcommand{\footrulewidth}{0.4pt} + + % Убираем стандартные отступы fancyhdr + \fancyheadoffset{0pt} + \fancyfootoffset{0pt} + + % ПРАВАЯ СТРАНИЦА (нечетная) + \fancyfoot[RO]{% + \footnotesize\sf@phv% + \hspace*{0pt}% Компенсируем левый отступ + % Журнал к левому краю + \begin{minipage}[t]{0.6\textwidth} + \raggedright\sloppy + \hyphenpenalty=10000 + \exhyphenpenalty=10000 + \emergencystretch=0em + \textcolor{rulercolor}{% + \ifenglishpaper + \noindent\copyright\ + \MakeTextUppercase{\journal@type@en}, \issue@year% + \else + \noindent\copyright\ \MakeTextUppercase{\journal@type@ru}, \issue@year% + \fi + } + \end{minipage}% + \hfill% + % Иконка CC BY по центру (файл лежит в каталоге images/) + \raisebox{-3.0ex}{% + \IfFileExists{images/cc-by.png}{% + \includegraphics[height=4.5ex]{images/cc-by.png}% + }{}% + }% +% \hfill% + % Номер страницы к правому краю +% \hspace*{0pt plus 1fill} + \hspace{1em} + \normalsize\textcolor{black}{\kio@page}% + } + + % ЛЕВАЯ СТРАНИЦА (четная) + \fancyfoot[LE]{% + \footnotesize\sf@phv% + \hspace*{0pt}% Компенсируем левый отступ + % Номер страницы к левому краю + \normalsize\textcolor{black}{\kio@page}% + \hspace*{20pt plus 1fill}% + % Иконка CC BY точно по центру (файл лежит в каталоге images/) + \raisebox{-3.0ex}{% + \IfFileExists{images/cc-by.png}{% + \includegraphics[height=4.5ex]{images/cc-by.png}% + }{}% + }% + \hfill% + % Журнал к правому краю + \begin{minipage}[t]{0.75\textwidth} + \raggedleft\sloppy + \hyphenpenalty=10000 + \exhyphenpenalty=10000 + \emergencystretch=2em + \textcolor{rulercolor}{% + \ifenglishpaper + \noindent\copyright\ \MakeTextUppercase{\journal@type@en}, \issue@year% + \else + \noindent\noindent\copyright\ \MakeTextUppercase{\journal@type@ru}, \issue@year% + \fi + } + \end{minipage}% + \hspace*{0pt}% Компенсируем правый отступ + } +} + +\pagestyle{mainstyle} + +\lefthyphenmin=2 +\righthyphenmin=3 + +\newcommand\printauthorsinfo{ + \@ifundefined{need@authors@info}{}{ + \par + \addvspace{0pt} % Добавляем отступ сверху + \widowpenalty=300 % Запрещаем висячие строки + \clubpenalty=300 + \noindent + \begin{minipage}[b]{\textwidth}% +% \bfseries + \sf@phv + + \def\authorlonginfo##1{ + \setstretch{0.9} + \noindent + \csname author##1@full\endcsname, + \ifcsname author##1@info\endcsname \csname author##1@info\endcsname\fi, + \ifcsname author##1@email\endcsname\ifcsname author##1@email@recepient\endcsname\@Letter~\fi\href{mailto:\csname author##1@email\endcsname}{\csname author##1@email\endcsname}\fi + } + + \def\allauthorslonginfo{% + \def\authorlonginfo####1{% + \setstretch{0.9}% + \noindent% + \if@englishversion% + \csname author####1@full@en\endcsname% + \ifcsname author####1@info@en\endcsname, \csname author####1@info@en\endcsname\fi% + \else% + \csname author####1@full\endcsname% + \ifcsname author####1@info\endcsname, \csname author####1@info\endcsname\fi% + \fi% + \ifcsname author####1@email\endcsname% + \ifcsname author####1@email@recepient\endcsname% + , \@Letter\ \href{mailto:\csname author####1@email\endcsname}{\csname author####1@email\endcsname}% + \else% + , \href{mailto:\csname author####1@email\endcsname}{\csname author####1@email\endcsname}% + \fi% + \fi% + }% + \let\@author@sep\@empty + \@authors@iter{@short}{% + \@author@sep + \authorlonginfo{\author@i}\par + \def\@author@sep{\vskip 2mm}% + }% + } + + \allauthorslonginfo + + \end{minipage} + } +} + +% Старая команда +\let\print@authors@info\printauthorsinfo + +\AtEndDocument{% + \lastpage% +} +\ifpdftex + \RequirePackage[T2A]{fontenc} % package 'fourier' sets T1 encoding +\fi + +\ifpdftex + \makeatletter + \AtBeginDocument{% + \gdef\f@encoding{T2A}% + } + \makeatother +\fi +\ifxetex + \usepackage{fontspec} +\fi + +\newcites{eng}{References} + + +\AtBeginDocument{% + \DeclareRobustCommand{\mylinkurl}{% + \begingroup + \catcode`\_=12\relax \catcode`\~=12\relax \catcode`\#=12\relax + \catcode`\%=12\relax \catcode`\&=12\relax \catcode`\$=12\relax + \catcode`\^=12\relax + \mylinkurl@scan}% + \def\mylinkurl@scan#1{\href{https://doi.org/#1}{#1}\endgroup}% +} + +\usepackage{letltxmacro} + +\LetLtxMacro{\originalcite}{\cite} + +%\let\originalcite\cite + +\makeatletter +\renewcommand{\cite}[2][]{% + \begingroup + \def\@cite@post{#1}% + \ifx\@cite@post\@empty + \originalcite{#2}% + \else + \originalcite[\@cite@post]{#2}% + \fi + \if@englishversion + \else + \@for\@tmp:=#2\do{% + \edef\@tmp@en{EN-\@tmp}% + \expandafter\nociteeng\expandafter{\@tmp@en}% + }% + \fi + \endgroup +} +\makeatother + +\makeatletter +\renewcommand\@biblabel[1]{#1.} +\makeatother + + +%\pagestyle{mainstyle} +\endinput diff --git a/InProgress/StackGraphs_to_CFL_Reachability/main.pdf b/InProgress/StackGraphs_to_CFL_Reachability/main.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8be3ac4ccc0a455db20bce64d5ff9ccb48d64ae2 GIT binary patch literal 337524 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�i7PfDNRd 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≀QICmnX^E+gCY4#)V)3#YjFr+jHr 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 literal 0 HcmV?d00001 diff --git a/InProgress/StackGraphs_to_CFL_Reachability/main.tex b/InProgress/StackGraphs_to_CFL_Reachability/main.tex new file mode 100644 index 000000000..94a83cce8 --- /dev/null +++ b/InProgress/StackGraphs_to_CFL_Reachability/main.tex @@ -0,0 +1,88 @@ +% Статья для журнала «Компьютерные инструменты в образовании». +% Основа: официальный русский шаблон с классом kioj6 от 07.04.2026. +% Сведения, отсутствующие в исходном DOCX, перечислены в README.md. + +\documentclass[eqsecnum,authorsinfo]{kioj6} + +\usepackage{enumitem} +\usepackage{tabularray} +\usepackage{fancyvrb} + +% В актуальном классе блок издательских реквизитов на 0,02 см шире внешнего +% контейнера английской части; небольшое уменьшение устраняет выход за поле. +\makeatletter +\def\title@full@article@info@width{5.48cm} +\makeatother + +\raggedbottom +\widowpenalty=10000 +\clubpenalty=10000 + +% Редакционные поля. Год и номер выпуска уточняются редакцией; внутренняя +% нумерация проверочного макета начинается с первой страницы. +\setcounter{page}{1} +\journalsectionnoimage{empty} +\issue{--}{--}{edu} +\articletr{}{} + +% УДК и DOI в исходном файле отсутствуют, поэтому не подставляются. + +\title[Разрешение имён на основе сведения стековых графов]{Разрешение имён в языках программирования на основе сведения стековых графов к контекстно-свободной достижимости} +\titleen[Name Resolution Based on Stack Graphs Conversion]{Name Resolution Based on Stack Graphs Conversion to Context-Free Reachability for Programming Languages} + +\author{1}[Ильин Е.~С.\affil{1}]{Ильин Егор Сергеевич} +\authorinfo{1}{выпускник кафедры математического обеспечения и применения ЭВМ, СПбГЭТУ «ЛЭТИ»} +\authoremailEnvelope{1}{egor2105094ilin@gmail.com} +\affiliation{1}{Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» им. В.~И. Ульянова (Ленина), Российская Федерация, 197022, Санкт-Петербург, ул. Профессора Попова, 5} + +\author{2}[Григорьев С.~В.\affil{2}]{Григорьев Семён Вячеславович} +\authorinfo{2}{канд. физ.-мат. наук, доцент кафедры системного программирования СПбГУ} +\authoremail{2}{s.v.grigoriev@spbu.ru} +\authororcid{2}{orcid.org/0000-0002-7966-0698} +\affiliation{2}{Санкт-Петербургский государственный университет, Российская Федерация, 199034, Санкт-Петербург, Университетская наб., 7–9} + +\authoren{1}[Ilin E.~S.\affil{1}]{Ilin Egor} +\authorinfoen{1}{graduate of ETU ``LETI''} +\affiliationen{1}{Saint Petersburg State Electrotechnical University “LETI”, Professora Popova ul. 5, St. Petersburg, 197022, Russian Federation} + +\authoren{2}[Grigorev S.~V.\affil{2}]{Semyon Grigorev} +\authorinfoen{2}{Associate Professor at St. Petersburg State University} +\affiliationen{2}{Saint Petersburg State University, Universitetskaya nab. 7–9, St. Petersburg, 199034, Russian Federation} + +\begin{document} + +\russianversion +\maketitle +\pagestyle{mainstyle} + +\begin{abstract} +Работа посвящена абстрактному разрешению имён, то есть связыванию ссылок на символы с их определениями, с использованием графовых моделей. Рассматривается способ сведения модели стековых графов к задаче достижимости с контекстно-свободными ограничениями (КС-достижимости). Областями применения являются инструменты анализа кода и навигации по кодовым базам, интегрированные среды разработки, компиляторы. В статье представлено теоретическое сведение модели стековых графов к КС-достижимости, рассмотрены его ограничения. Произведена проверка предложенного решения на практике, выполнено экспериментальное сравнение со стековыми графами. Также освещены направления дальнейших исследований и доработки сведения и разработанного программного средства. + +\keywordsru{стековые графы, контекстно-свободная достижимость, абстрактное разрешение имён, алгоритмы на графах} +\end{abstract} + +\input{article_body} + +% Номера источников определяются порядком первого упоминания в статье. +% База references-clones.bib создаётся официальным сценарием из references.bib. +\bibliographystyle{ugost2008} +\bibliography{references-clones} + +\printauthorsinfo + +\begin{translatedpart} +\maketranslatedtitle + +\begin{abstract} +The problem of abstract name resolution (binding symbol references to corresponding symbol definitions) in graph models is covered in the article. The method for stack graphs model conversion to the problem of context-free reachability (CFL-reachability) is considered. The areas of applicability encompass code analysis and navigation tools, integrated development environments, compilers. The article presents conversion of stack graphs model to CFL-reachability and considers conversion's limitations. A practical check of the proposed solution and an experimental comparison with stack graphs are conducted. Additionally, further areas of research and improvement of the presented method and the designed program are highlighted. + +\keywordsen{stack graphs, context-free reachability, abstract name resolution, graph algorithms} +\end{abstract} + +\begin{otherlanguage*}{english} +\bibliographystyleeng{IEEE} +\bibliographyeng{references-en-prefixed,references-clones} +\end{otherlanguage*} +\end{translatedpart} + +\end{document} diff --git a/InProgress/StackGraphs_to_CFL_Reachability/references-clones.bib b/InProgress/StackGraphs_to_CFL_Reachability/references-clones.bib new file mode 100644 index 000000000..ecf27afef --- /dev/null +++ b/InProgress/StackGraphs_to_CFL_Reachability/references-clones.bib @@ -0,0 +1,296 @@ +@INPROCEEDINGS{EN-Zwaan2023, + AUTHOR = {Zwaan, Aron and van Antwerpen, Hendrik}, + PUBLISHER = {Schloss Dagstuhl -- Leibniz-Zentrum für Informatik}, + ADDRESS = {Dagstuhl, Germany}, + BOOKTITLE = {Eelco Visser Commemorative Symposium ({EVCS} 2023)}, + DOI = {10.4230/OASIcs.EVCS.2023.32}, + PAGES = {32:1--32:13}, + SERIES = {Open Access Series in Informatics (OASIcs)}, + TITLE = {Scope Graphs: The Story so Far}, + VOLUME = {109}, + YEAR = {2023}, +} + +@ARTICLE{EN-vanAntwerpen2018, + AUTHOR = {van Antwerpen, Hendrik and Bach Poulsen, Casper and Rouvoet, Arjen and Visser, Eelco}, + PUBLISHER = {Association for Computing Machinery}, + ADDRESS = {New York, NY, USA}, + ARTICLENO = {114}, + DOI = {10.1145/3276484}, + JOURNAL = {Proceedings of the ACM on Programming Languages}, + MONTH = nov, + NUMBER = {OOPSLA}, + PAGES = {1--30}, + TITLE = {Scopes as Types}, + VOLUME = {2}, + YEAR = {2018}, +} + +@INPROCEEDINGS{EN-Neron2015, + AUTHOR = {Néron, Pierre and Tolmach, Andrew P. and Visser, Eelco and Wachsmuth, Guido}, + EDITOR = {Vitek, Jan}, + PUBLISHER = {Springer}, + ADDRESS = {Berlin, Heidelberg}, + BOOKTITLE = {Programming Languages and Systems: 24th European Symposium on Programming, {ESOP} 2015, Held as Part of {ETAPS} 2015, London, UK, April 11--18, 2015, Proceedings}, + DOI = {10.1007/978-3-662-46669-8_9}, + PAGES = {205--231}, + SERIES = {Lecture Notes in Computer Science}, + TITLE = {A Theory of Name Resolution}, + VOLUME = {9032}, + YEAR = {2015}, +} + +@INPROCEEDINGS{EN-MuravevGrigorev2025, + AUTHOR = {Muravev, Ilia and Grigorev, Semyon}, + PUBLISHER = {Association for Computing Machinery}, + ADDRESS = {New York, NY, USA}, + BOOKTITLE = {Proceedings of the 14th ACM SIGPLAN International Workshop on the State Of the Art in Program Analysis ({SOAP} '25)}, + DOI = {10.1145/3735544.3735585}, + ISBN = {979-8-4007-1922-6}, + PAGES = {28--35}, + TITLE = {Universal High-Performance {CFL}-Reachability via Matrix Multiplication}, + YEAR = {2025}, +} + +@ONLINE{EN-Hellings2015, + AUTHOR = {Hellings, Jelle}, + DOI = {10.48550/arXiv.1502.02242}, + EPRINT = {1502.02242}, + EPRINTTYPE = {arXiv}, + NOTE = {Version 2, revised 31 January 2016}, + TITLE = {Querying for Paths in Graphs using Context-Free Path Queries}, + URL = {https://arxiv.org/abs/1502.02242}, + URLDATE = {29.08.2026}, + YEAR = {2015}, +} + +@INPROCEEDINGS{EN-RepsHorwitzSagiv1995, + AUTHOR = {Reps, Thomas and Horwitz, Susan and Sagiv, Mooly}, + PUBLISHER = {ACM Press}, + ADDRESS = {New York, NY, USA}, + BOOKTITLE = {Proceedings of the 22nd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages ({POPL} '95)}, + DOI = {10.1145/199448.199462}, + ISBN = {0-89791-692-1}, + PAGES = {49--61}, + TITLE = {Precise Interprocedural Dataflow Analysis via Graph Reachability}, + YEAR = {1995}, +} + +@SOFTWARE{EN-ShatteredPixelDungeon, + AUTHOR = {Debenham, Evan}, + HOWPUBLISHED = {GitHub repository}, + TITLE = {Shattered Pixel Dungeon}, + URL = {https://github.com/00-Evan/shattered-pixel-dungeon}, + URLDATE = {29.08.2026}, +} + +@SOFTWARE{EN-JaywayJsonPath, + AUTHOR = {{json-path}}, + HOWPUBLISHED = {GitHub repository}, + TITLE = {Jayway {JsonPath}}, + URL = {https://github.com/json-path/JsonPath}, + URLDATE = {29.08.2026}, +} + +@SOFTWARE{EN-CoreJustStackGraphExporter, + AUTHOR = {{CoreJust}}, + HOWPUBLISHED = {GitHub repository}, + TITLE = {Stack Graph Exporter}, + URL = {https://github.com/CoreJust/StackGraphExporter}, + URLDATE = {29.08.2026}, +} + +@INPROCEEDINGS{EN-Creager2023, + AUTHOR = {Creager, Douglas A. and van Antwerpen, Hendrik}, + PUBLISHER = {Schloss Dagstuhl -- Leibniz-Zentrum für Informatik}, + ADDRESS = {Dagstuhl, Germany}, + BOOKTITLE = {Eelco Visser Commemorative Symposium ({EVCS} 2023)}, + DOI = {10.4230/OASIcs.EVCS.2023.8}, + PAGES = {8:1--8:12}, + SERIES = {Open Access Series in Informatics (OASIcs)}, + TITLE = {Stack Graphs: Name Resolution at Scale}, + VOLUME = {109}, + YEAR = {2023}, +} + +@SOFTWARE{EN-JiaoZiVideoPlayer, + AUTHOR = {{lipangit}}, + HOWPUBLISHED = {Archived GitHub repository}, + NOTE = {The repository was archived by its owner; the project moved to JZVideo}, + TITLE = {JiaoZiVideoPlayer}, + URL = {https://github.com/lipangit/JiaoZiVideoPlayer}, + URLDATE = {29.08.2026}, +} + +@SOFTWARE{EN-LibGDX, + AUTHOR = {{libGDX}}, + HOWPUBLISHED = {GitHub repository}, + TITLE = {{libGDX}}, + URL = {https://github.com/libgdx/libgdx}, + URLDATE = {29.08.2026}, +} + +@INPROCEEDINGS{EN-HeLuXue2024, + AUTHOR = {He, Dongjie and Lu, Jingbo and Xue, Jingling}, + EDITOR = {Aldrich, Jonathan and Salvaneschi, Guido}, + PUBLISHER = {Schloss Dagstuhl -- Leibniz-Zentrum für Informatik}, + ADDRESS = {Dagstuhl, Germany}, + BOOKTITLE = {38th European Conference on Object-Oriented Programming ({ECOOP} 2024)}, + DOI = {10.4230/LIPIcs.ECOOP.2024.18}, + ISBN = {978-3-95977-341-6}, + ISSN = {1868-8969}, + PAGES = {18:1--18:29}, + SERIES = {Leibniz International Proceedings in Informatics (LIPIcs)}, + TITLE = {A {CFL}-Reachability Formulation of Callsite-Sensitive Pointer Analysis with Built-In On-The-Fly Call Graph Construction}, + VOLUME = {313}, + YEAR = {2024}, +} + +@INPROCEEDINGS{Neron2015, + AUTHOR = {Néron, Pierre and Tolmach, Andrew P. and Visser, Eelco and Wachsmuth, Guido}, + EDITOR = {Vitek, Jan}, + PUBLISHER = {Springer}, + ADDRESS = {Berlin, Heidelberg}, + BOOKTITLE = {Programming Languages and Systems: 24th European Symposium on Programming, {ESOP} 2015, Held as Part of {ETAPS} 2015, London, UK, April 11--18, 2015, Proceedings}, + DOI = {10.1007/978-3-662-46669-8_9}, + PAGES = {205--231}, + SERIES = {Lecture Notes in Computer Science}, + TITLE = {A Theory of Name Resolution}, + VOLUME = {9032}, + YEAR = {2015}, +} + +@ARTICLE{vanAntwerpen2018, + AUTHOR = {van Antwerpen, Hendrik and Bach Poulsen, Casper and Rouvoet, Arjen and Visser, Eelco}, + PUBLISHER = {Association for Computing Machinery}, + ADDRESS = {New York, NY, USA}, + ARTICLENO = {114}, + DOI = {10.1145/3276484}, + JOURNAL = {Proceedings of the ACM on Programming Languages}, + MONTH = nov, + NUMBER = {OOPSLA}, + PAGES = {1--30}, + TITLE = {Scopes as Types}, + VOLUME = {2}, + YEAR = {2018}, +} + +@INPROCEEDINGS{Zwaan2023, + AUTHOR = {Zwaan, Aron and van Antwerpen, Hendrik}, + PUBLISHER = {Schloss Dagstuhl -- Leibniz-Zentrum für Informatik}, + ADDRESS = {Dagstuhl, Germany}, + BOOKTITLE = {Eelco Visser Commemorative Symposium ({EVCS} 2023)}, + DOI = {10.4230/OASIcs.EVCS.2023.32}, + PAGES = {32:1--32:13}, + SERIES = {Open Access Series in Informatics (OASIcs)}, + TITLE = {Scope Graphs: The Story so Far}, + VOLUME = {109}, + YEAR = {2023}, +} + +@INPROCEEDINGS{Creager2023, + AUTHOR = {Creager, Douglas A. and van Antwerpen, Hendrik}, + PUBLISHER = {Schloss Dagstuhl -- Leibniz-Zentrum für Informatik}, + ADDRESS = {Dagstuhl, Germany}, + BOOKTITLE = {Eelco Visser Commemorative Symposium ({EVCS} 2023)}, + DOI = {10.4230/OASIcs.EVCS.2023.8}, + PAGES = {8:1--8:12}, + SERIES = {Open Access Series in Informatics (OASIcs)}, + TITLE = {Stack Graphs: Name Resolution at Scale}, + VOLUME = {109}, + YEAR = {2023}, +} + +@INPROCEEDINGS{RepsHorwitzSagiv1995, + AUTHOR = {Reps, Thomas and Horwitz, Susan and Sagiv, Mooly}, + PUBLISHER = {ACM Press}, + ADDRESS = {New York, NY, USA}, + BOOKTITLE = {Proceedings of the 22nd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages ({POPL} '95)}, + DOI = {10.1145/199448.199462}, + ISBN = {0-89791-692-1}, + PAGES = {49--61}, + TITLE = {Precise Interprocedural Dataflow Analysis via Graph Reachability}, + YEAR = {1995}, +} + +@ONLINE{Hellings2015, + AUTHOR = {Hellings, Jelle}, + DOI = {10.48550/arXiv.1502.02242}, + EPRINT = {1502.02242}, + EPRINTTYPE = {arXiv}, + NOTE = {Version 2, revised 31 January 2016}, + TITLE = {Querying for Paths in Graphs using Context-Free Path Queries}, + URL = {https://arxiv.org/abs/1502.02242}, + URLDATE = {29.08.2026}, + YEAR = {2015}, +} + +@INPROCEEDINGS{HeLuXue2024, + AUTHOR = {He, Dongjie and Lu, Jingbo and Xue, Jingling}, + EDITOR = {Aldrich, Jonathan and Salvaneschi, Guido}, + PUBLISHER = {Schloss Dagstuhl -- Leibniz-Zentrum für Informatik}, + ADDRESS = {Dagstuhl, Germany}, + BOOKTITLE = {38th European Conference on Object-Oriented Programming ({ECOOP} 2024)}, + DOI = {10.4230/LIPIcs.ECOOP.2024.18}, + ISBN = {978-3-95977-341-6}, + ISSN = {1868-8969}, + PAGES = {18:1--18:29}, + SERIES = {Leibniz International Proceedings in Informatics (LIPIcs)}, + TITLE = {A {CFL}-Reachability Formulation of Callsite-Sensitive Pointer Analysis with Built-In On-The-Fly Call Graph Construction}, + VOLUME = {313}, + YEAR = {2024}, +} + +@INPROCEEDINGS{MuravevGrigorev2025, + AUTHOR = {Muravev, Ilia and Grigorev, Semyon}, + PUBLISHER = {Association for Computing Machinery}, + ADDRESS = {New York, NY, USA}, + BOOKTITLE = {Proceedings of the 14th ACM SIGPLAN International Workshop on the State Of the Art in Program Analysis ({SOAP} '25)}, + DOI = {10.1145/3735544.3735585}, + ISBN = {979-8-4007-1922-6}, + PAGES = {28--35}, + TITLE = {Universal High-Performance {CFL}-Reachability via Matrix Multiplication}, + YEAR = {2025}, +} + +@SOFTWARE{CoreJustStackGraphExporter, + AUTHOR = {{CoreJust}}, + HOWPUBLISHED = {GitHub repository}, + TITLE = {Stack Graph Exporter}, + URL = {https://github.com/CoreJust/StackGraphExporter}, + URLDATE = {29.08.2026}, +} + +@SOFTWARE{LibGDX, + AUTHOR = {{libGDX}}, + HOWPUBLISHED = {GitHub repository}, + TITLE = {{libGDX}}, + URL = {https://github.com/libgdx/libgdx}, + URLDATE = {29.08.2026}, +} + +@SOFTWARE{ShatteredPixelDungeon, + AUTHOR = {Debenham, Evan}, + HOWPUBLISHED = {GitHub repository}, + TITLE = {Shattered Pixel Dungeon}, + URL = {https://github.com/00-Evan/shattered-pixel-dungeon}, + URLDATE = {29.08.2026}, +} + +@SOFTWARE{JaywayJsonPath, + AUTHOR = {{json-path}}, + HOWPUBLISHED = {GitHub repository}, + TITLE = {Jayway {JsonPath}}, + URL = {https://github.com/json-path/JsonPath}, + URLDATE = {29.08.2026}, +} + +@SOFTWARE{JiaoZiVideoPlayer, + AUTHOR = {{lipangit}}, + HOWPUBLISHED = {Archived GitHub repository}, + NOTE = {The repository was archived by its owner; the project moved to JZVideo}, + TITLE = {JiaoZiVideoPlayer}, + URL = {https://github.com/lipangit/JiaoZiVideoPlayer}, + URLDATE = {29.08.2026}, +} + diff --git a/InProgress/StackGraphs_to_CFL_Reachability/references-en-prefixed.bib b/InProgress/StackGraphs_to_CFL_Reachability/references-en-prefixed.bib new file mode 100644 index 000000000..e69de29bb diff --git a/InProgress/StackGraphs_to_CFL_Reachability/references.bib b/InProgress/StackGraphs_to_CFL_Reachability/references.bib new file mode 100644 index 000000000..9f18b83e5 --- /dev/null +++ b/InProgress/StackGraphs_to_CFL_Reachability/references.bib @@ -0,0 +1,153 @@ +% Sources cited in the article, in order of first citation. +% Metadata was checked against the publisher record or the official repository +% on 2026-08-29. Originally English-language sources are not duplicated in +% references-en.bib; the KIO preprocessing step creates EN-* clones. + +@inproceedings{Neron2015, + author = {N{\'e}ron, Pierre and Tolmach, Andrew P. and Visser, Eelco and Wachsmuth, Guido}, + title = {A Theory of Name Resolution}, + editor = {Vitek, Jan}, + booktitle = {Programming Languages and Systems: 24th European Symposium on Programming, {ESOP} 2015, Held as Part of {ETAPS} 2015, London, UK, April 11--18, 2015, Proceedings}, + series = {Lecture Notes in Computer Science}, + volume = {9032}, + pages = {205--231}, + year = {2015}, + publisher = {Springer}, + address = {Berlin, Heidelberg}, + doi = {10.1007/978-3-662-46669-8_9} +} + +@article{vanAntwerpen2018, + author = {van Antwerpen, Hendrik and Bach Poulsen, Casper and Rouvoet, Arjen and Visser, Eelco}, + title = {Scopes as Types}, + journal = {Proceedings of the ACM on Programming Languages}, + volume = {2}, + number = {OOPSLA}, + articleno = {114}, + pages = {1--30}, + numpages = {30}, + month = nov, + year = {2018}, + publisher = {Association for Computing Machinery}, + address = {New York, NY, USA}, + doi = {10.1145/3276484} +} + +@inproceedings{Zwaan2023, + author = {Zwaan, Aron and van Antwerpen, Hendrik}, + title = {Scope Graphs: The Story so Far}, + booktitle = {Eelco Visser Commemorative Symposium ({EVCS} 2023)}, + series = {Open Access Series in Informatics (OASIcs)}, + volume = {109}, + pages = {32:1--32:13}, + year = {2023}, + publisher = {Schloss Dagstuhl -- Leibniz-Zentrum f{\"u}r Informatik}, + address = {Dagstuhl, Germany}, + doi = {10.4230/OASIcs.EVCS.2023.32} +} + +@inproceedings{Creager2023, + author = {Creager, Douglas A. and van Antwerpen, Hendrik}, + title = {Stack Graphs: Name Resolution at Scale}, + booktitle = {Eelco Visser Commemorative Symposium ({EVCS} 2023)}, + series = {Open Access Series in Informatics (OASIcs)}, + volume = {109}, + pages = {8:1--8:12}, + year = {2023}, + publisher = {Schloss Dagstuhl -- Leibniz-Zentrum f{\"u}r Informatik}, + address = {Dagstuhl, Germany}, + doi = {10.4230/OASIcs.EVCS.2023.8} +} + +@inproceedings{RepsHorwitzSagiv1995, + author = {Reps, Thomas and Horwitz, Susan and Sagiv, Mooly}, + title = {Precise Interprocedural Dataflow Analysis via Graph Reachability}, + booktitle = {Proceedings of the 22nd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages ({POPL} '95)}, + pages = {49--61}, + year = {1995}, + publisher = {ACM Press}, + address = {New York, NY, USA}, + isbn = {0-89791-692-1}, + doi = {10.1145/199448.199462} +} + +@online{Hellings2015, + author = {Hellings, Jelle}, + title = {Querying for Paths in Graphs using Context-Free Path Queries}, + year = {2015}, + eprint = {1502.02242}, + eprinttype = {arXiv}, + doi = {10.48550/arXiv.1502.02242}, + url = {https://arxiv.org/abs/1502.02242}, + urldate = {29.08.2026}, + note = {Version 2, revised 31 January 2016} +} + +@inproceedings{HeLuXue2024, + author = {He, Dongjie and Lu, Jingbo and Xue, Jingling}, + title = {A {CFL}-Reachability Formulation of Callsite-Sensitive Pointer Analysis with Built-In On-The-Fly Call Graph Construction}, + booktitle = {38th European Conference on Object-Oriented Programming ({ECOOP} 2024)}, + series = {Leibniz International Proceedings in Informatics (LIPIcs)}, + volume = {313}, + pages = {18:1--18:29}, + year = {2024}, + editor = {Aldrich, Jonathan and Salvaneschi, Guido}, + publisher = {Schloss Dagstuhl -- Leibniz-Zentrum f{\"u}r Informatik}, + address = {Dagstuhl, Germany}, + isbn = {978-3-95977-341-6}, + issn = {1868-8969}, + doi = {10.4230/LIPIcs.ECOOP.2024.18} +} + +@inproceedings{MuravevGrigorev2025, + author = {Muravev, Ilia and Grigorev, Semyon}, + title = {Universal High-Performance {CFL}-Reachability via Matrix Multiplication}, + booktitle = {Proceedings of the 14th ACM SIGPLAN International Workshop on the State Of the Art in Program Analysis ({SOAP} '25)}, + pages = {28--35}, + year = {2025}, + publisher = {Association for Computing Machinery}, + address = {New York, NY, USA}, + isbn = {979-8-4007-1922-6}, + doi = {10.1145/3735544.3735585} +} + +@software{CoreJustStackGraphExporter, + author = {{CoreJust}}, + title = {Stack Graph Exporter}, + howpublished = {GitHub repository}, + url = {https://github.com/CoreJust/StackGraphExporter}, + urldate = {29.08.2026} +} + +@software{LibGDX, + author = {{libGDX}}, + title = {{libGDX}}, + howpublished = {GitHub repository}, + url = {https://github.com/libgdx/libgdx}, + urldate = {29.08.2026} +} + +@software{ShatteredPixelDungeon, + author = {Debenham, Evan}, + title = {Shattered Pixel Dungeon}, + howpublished = {GitHub repository}, + url = {https://github.com/00-Evan/shattered-pixel-dungeon}, + urldate = {29.08.2026} +} + +@software{JaywayJsonPath, + author = {{json-path}}, + title = {Jayway {JsonPath}}, + howpublished = {GitHub repository}, + url = {https://github.com/json-path/JsonPath}, + urldate = {29.08.2026} +} + +@software{JiaoZiVideoPlayer, + author = {{lipangit}}, + title = {JiaoZiVideoPlayer}, + howpublished = {Archived GitHub repository}, + url = {https://github.com/lipangit/JiaoZiVideoPlayer}, + urldate = {29.08.2026}, + note = {The repository was archived by its owner; the project moved to JZVideo} +} diff --git a/InProgress/StackGraphs_to_CFL_Reachability/ugost2008.bst b/InProgress/StackGraphs_to_CFL_Reachability/ugost2008.bst new file mode 100644 index 000000000..cb205a19b --- /dev/null +++ b/InProgress/StackGraphs_to_CFL_Reachability/ugost2008.bst @@ -0,0 +1,3131 @@ +%% +%% This is file `ugost2008.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% gost.dtx (with options: `bst,utf8,eprint') +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from ugost2008.bst. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file gost.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) +%% This bibstyle attempts to format bibliography according to +%% GOST 7.0.5-2008 for bibliographic reference. + +ENTRY + { address + annote + author + booktitle + bookauthor + chapter + edition + editor + compiler + howpublished + institution + journal + key + %major % new in v.1.2i, alias for speciality, not implemented + majorcode % new in v.1.2i, alias for specialitycode + month + note + number + organization + pages + eid % new in v1.2c + publisher + school % alias for institution + series + %speciality % new in v.1.2i, eqv. to major in biblatex-gost, not implemented yet... + specialitycode % new in v.1.2i, alias of number, eqv. to majorcode in biblatex-gost + title + %medium % new in v1.2; renamed to media. + media % new in v1.2f + type + volume + year + language + langid % new in v1.2c + booklanguage + date % new in v1.2i + pagetotal + url + urldate + isbn + doi + eprint + eprinttype % = archivePrefix + eprintclass % = primaryClass + % new in v1.2f: + % appear in biblatex: + %addendum % not implemented yet... + holder % see patent + location % new in v.1.2i, alias of address + %subtitle % not implemented yet... + titleaddon % new in v.1.2i, see @thesis + %version % not implemented yet... + % Appear in biblatex-gost for @patent entry: + authorcountry % country of the patent authors + nationality % patent-issuing country (used by IEEE.bst's @patent) + credits % statement of responsibility, other than provided in Biblatex + ipc % Code of the International Patent Classification + %media % General material designation NOTE: medium in the above + requestnumber % Registration number of the application to the patent document + publicationdate % Date of publication + publication % and information on the official gazette, which published patent + prioritydate % Information about the convention priority: the date of filing of the application, + prioritynumber % number and + prioritycountry % country name of convention priority. + requestdate % ?? + } + {} + { label } + +INTEGERS { + output.state + before.all + mid.sentence + after.sentence + after.block + after.dblslash + after.slash + after.colon + after.semicolon +} + +STRINGS { curlanguage } + +STRINGS { s t } + +STRINGS { y m d } % new in v.1.2j +STRINGS { ud.y ud.m ud.d ud.tmp ud.parsed } +INTEGERS { ud.idx ud.len ud.space.pos } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := + #4 'after.dblslash := + #5 'after.slash := + #6 'after.colon := + #7 'after.semicolon := +} + +FUNCTION {set.language} +{ langid empty$ + { language empty$ + { "english" 'curlanguage := } + { language 'curlanguage := } + if$ + } + { langid 'curlanguage := } + if$ +} + +FUNCTION {reset.language} +{ booklanguage empty$ + { "" } + { booklanguage 'curlanguage := + "\selectlanguageifdefined{" + curlanguage * + "}" * + } + if$ +} + +FUNCTION {output.nonnull} +{ + swap$ + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + " " write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { output.state after.dblslash = + { "~//" * reset.language * " " * write$ } + { output.state after.slash = + { "~/ " * write$ } + { output.state after.colon = + { ": " * write$ } + { output.state after.semicolon = + { "; " * write$ } + { add.period$ " " * write$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ + "empty " t * " in " * cite$ * warning$ + } + 'output.nonnull + if$ +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.dblslash} +{ output.state before.all = + 'skip$ + { after.dblslash 'output.state := } + if$ +} + +FUNCTION {new.slash} +{ output.state before.all = + 'skip$ + { after.slash 'output.state := } + if$ +} + +FUNCTION {new.colon} +{ output.state before.all = + 'skip$ + { after.colon 'output.state := } + if$ +} + +FUNCTION {new.semicolon} +{ output.state before.all = + 'skip$ + { after.semicolon 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {add.blank} +{ " " * before.all 'output.state := +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.dblslash.checka} +{ empty$ + 'skip$ + 'new.dblslash + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +%% +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {spaces.around} +{ " " swap$ * " " * } + +FUNCTION {emphasize} +{ duplicate$ empty$ + %{ pop$ "" } + 'skip$ % v.1.2k + { "\BibEmph{" swap$ * "}" * } + if$ +} + +FUNCTION {bracify} +{ duplicate$ empty$ + { pop$ "{}" } + { "{" swap$ * "}" * } + if$ +} + +FUNCTION {bracketise} +{ + duplicate$ empty$ + { pop$ "" } + { "[" swap$ * "]" * } + if$ +} + +FUNCTION {paranthesify} +{ + duplicate$ empty$ + { pop$ "" } + { "(" swap$ * ")" * } + if$ +} + + +FUNCTION {tie.connect} + {"~" swap$ * * + } + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {bbl.edby} +{ curlanguage "english" = + {"ed.\ by"} + { curlanguage "russian" = + {"под ред."} + { curlanguage "german" = + { "ed." } + {"language is not defined: " curlanguage " in bbl.edby" * * warning$ "Ed.\ by"} + if$} + if$} +if$} + +FUNCTION {bbl.compiler} +{ curlanguage "english" = + { "Compiler"} + { curlanguage "german" = + { "Hrsg." } + { curlanguage "russian" = + {"{Сост.}"} + {"language is not defined: " curlanguage " in bbl.compiler" * * warning$ "Compiler"} + if$} + if$} +if$} + +FUNCTION {bbl.edition} +{ curlanguage "english" = + {"ed."} + { curlanguage "russian" = + {"{изд.}"} + { curlanguage "german" = + {" {aus.}" } %%%% { "Aufl." } ?? + { curlanguage "italian" = + {"edizione"} + { curlanguage "french" = + {"\'{e}dition"} + {"language is not defined: " curlanguage " in bbl.edition" * * warning$ "ed."} + if$} + if$} + if$} + if$} +if$} + +FUNCTION {bbl.vvolume} +{ curlanguage "english" = curlanguage "french" = or curlanguage "italian" = or + {"Volume"} + { curlanguage "russian" = + { "Том" } + { curlanguage "german" = + {"{Band}"} %%%% { "Volumen" } + {"language is not defined: " curlanguage " in bbl.vvolume" * * warning$ "Volume"} + if$} + if$} +if$} + +FUNCTION {bbl.vvol} +{ curlanguage "english" = curlanguage "french" = or curlanguage "italian" = or + {"Vol."} + { curlanguage "russian" = + {"Т."} + { curlanguage "german" = + {"{Bd.}"} %%%% { "Vol." } + {"language is not defined: " curlanguage " in bbl.vvol" * * warning$ "Vol."} + if$} + if$} +if$} + +FUNCTION {bbl.iissue} +{ curlanguage "english" = + {"Issue"} + { curlanguage "russian" = + {"Выпуск"} + { curlanguage "german" = + {"{Heft}"} %%%% { "Ausgabe" } + {"language is not defined: " curlanguage " in bbl.iissue" * * warning$ "Issue"} + if$} + if$} +if$} + +FUNCTION {bbl.iiss} +{ curlanguage "english" = + {"Iss."} + { curlanguage "russian" = + {"Вып."} + { curlanguage "german" = + {"{H.}"} + {"language is not defined: " curlanguage " in bbl.iiss" * * warning$ "Iss."} + if$} + if$} +if$} + +FUNCTION {bbl.of} +{ curlanguage "english" = + {"of"} + { curlanguage "german" = + { "von" } + { curlanguage "russian" = + { "из" } + {"language is not defined: " curlanguage " in bbl.of" * * warning$ "of"} + if$} + if$} +if$} + +FUNCTION {bbl.etal} +{ curlanguage "english" = + {"et~al."} + { curlanguage "german" = + { "u.~a." } + { curlanguage "russian" = + {"и~др."} + {"language is not defined: " curlanguage " in bbl.etal" * * warning$ "et~al."} + if$} + if$} +if$} + +FUNCTION {bbl.and} +{ curlanguage "english" = + {"and"} + { curlanguage "german" = + { "und" } + { curlanguage "russian" = + {"и"} + { curlanguage "french" = + {"et"} + {"language is not defined: " curlanguage " in bbl.and" * * warning$ "and"} + if$} + if$} + if$} +if$} + +FUNCTION {bbl.nnumber} +{ curlanguage "english" = + {"Number"} + { curlanguage "russian" = + { "Номер" } + { curlanguage "german" = + {"{Heft}"} %%% { "Anzahl" } + {"language is not defined: " curlanguage " in bbl.nnumber" * * warning$ "Number"} + if$} + if$} +if$} + +FUNCTION {bbl.number} +{ curlanguage "english" = + {"number"} + { curlanguage "russian" = + {"номер"} + { curlanguage "german" = + {"{Heft}"} %%% { "anzahl" }??? + {"language is not defined: " curlanguage " in bbl.number" * * warning$ "number"} + if$} + if$} +if$} + +FUNCTION {bbl.nr} +{ curlanguage "english" = + {"no."} + { curlanguage "italian" = + { "no." } + { curlanguage "russian" = + { "№" } + { curlanguage "german" = + {"{nu.}"} %%% { "an." } + { curlanguage "french" = + { "no." } + {"language is not defined: " curlanguage " in bbl.nr" * * warning$ "no."} + if$} + if$} + if$} + if$} +if$} + +FUNCTION {bbl.nnr} +{ curlanguage "english" = + {"No."} + { curlanguage "russian" = + { "№" } + { curlanguage "german" = + {"{H.}"} %%% { "an." } + {"language is not defined: " curlanguage " in bbl.nnr" * * warning$ "No."} + if$} + if$} +if$} + +FUNCTION {bbl.in} +{ curlanguage "english" = curlanguage "german" = or + {"in"} + { curlanguage "russian" = + { "в" } + {"language is not defined: " curlanguage " in bbl.in" * * warning$ "in"} + if$} +if$} + +FUNCTION {bbl.iin} +{ curlanguage "english" = curlanguage "german" = or + {"In"} + { curlanguage "russian" = + { "В" } + {"language is not defined: " curlanguage " in bbl.iin" * * warning$ "In"} + if$} +if$} + +FUNCTION {bbl.pages} +{ curlanguage "english" = curlanguage "french" = or curlanguage "italian" = or + {"p."} %%% {"pp."} + { curlanguage "russian" = + {"с."} + { curlanguage "german" = + {"S."} %%%% { "s." } + {"language is not defined: " curlanguage " in bbl.pages" * * warning$ "p."} + if$} + if$} +if$} + +FUNCTION {bbl.page} +{ curlanguage "english" = curlanguage "french" = or curlanguage "italian" = or + {"p."} + { curlanguage "russian" = + {"c."} + { curlanguage "german" = + {"S."} %%%% { "s." } + {"language is not defined: " curlanguage " in bbl.page" * * warning$ "p."} + if$} + if$} +if$} + +FUNCTION {bbl.ppages} +{ curlanguage "english" = curlanguage "french" = or curlanguage "italian" = or + {"P."} %%%% { "Pp." } + { curlanguage "russian" = + {"C."} + { curlanguage "german" = + {"S."} + {"language is not defined: " curlanguage " in bbl.ppages" * * warning$ "P."} + if$} + if$} +if$} + +FUNCTION {bbl.ppage} +{ curlanguage "english" = curlanguage "french" = or curlanguage "italian" = or + {"P."} + { curlanguage "russian" = + {"C."} + { curlanguage "german" = + {"S."} + {"language is not defined: " curlanguage " in bbl.ppage" * * warning$ "P."} + if$} + if$} +if$} + +FUNCTION {bbl.url} +{ curlanguage "english" = + {"URL"} + { curlanguage "russian" = + { "URL" } + { curlanguage "german" = + { "URL" } + { curlanguage "french" = + { "URL" } + { "language is not defined: " curlanguage " in bbl.url" * * warning$ "online; accessed" } + if$} + if$} + if$} +if$} +FUNCTION {bbl.urldate} +{ curlanguage "english" = + {"online; accessed"} + { curlanguage "russian" = + { "{дата~обращения}" } + { curlanguage "german" = + { "{online; abgerufen}" } + { curlanguage "french" = + { "{en ligne; acc\'{e}d\'{e}}" } + { "language is not defined: " curlanguage " in bbl.urldate" * * warning$ "online; accessed" } + if$} + if$} + if$} +if$} + +% Localised default word for the "Patent" label used by @patent. +FUNCTION {bbl.patent} +{ curlanguage "english" = + { "Patent" } + { curlanguage "russian" = + { "{Патент}" } + { curlanguage "german" = + { "Patent" } + { curlanguage "french" = + { "Brevet" } + { "language is not defined: " curlanguage " in bbl.patent" * * warning$ "Patent" } + if$ + } + if$ + } + if$ + } +if$} + + +FUNCTION {bbl.techreport} +{ curlanguage "english" = + { "Rep." } + { curlanguage "german" = + { "Bericht" } + { curlanguage "russian" = + { "{Отчет}" } + { "language is not defined: " curlanguage " in bbl.techrep" * * warning$ "Rep." } + if$} + if$} +if$} + +FUNCTION {bbl.mathesis} +{ curlanguage "english" = + { "Master's thesis" } + { curlanguage "german" = + { "diss.~mag." } + { curlanguage "russian" = + { "{квалификационная~работа~магистра}" } + { "language is not defined: " curlanguage " in bbl.mthesis" * * warning$ "Master's thesis" } + if$} + if$} +if$} + +FUNCTION {bbl.phdthesis} +{ curlanguage "english" = + { "Ph.\,D. thesis" } + { curlanguage "german" = + { "diss.~Ph.\,D." } + { curlanguage "russian" = + { "{дис.\ \ldots\ канд.\ наук}" } + { curlanguage "french" = + { "th\`{e}se de doctorat" } + { "language is not defined: " curlanguage " in bbl.phdthesis" * * warning$ "Ph.\,D. thesis" } + if$} + if$} + if$} +if$} + +FUNCTION {bbl.docthesis} +{ curlanguage "english" = + { "dr.\,sci. dissertation" } + { curlanguage "german" = + { "diss.~dr." } + { curlanguage "russian" = + { "{дис.\ \ldots\ д-ра наук}" } + { "language is not defined: " curlanguage " in bbl.docthesis" * * warning$ "Dr.\,Sci. dissertation" } + if$} + if$} +if$} + +FUNCTION {bbl.nnoaddress} +{ curlanguage "english" = + { "S.\ l." } + { curlanguage "russian" = + { "{Б.\ м.}" } + { "language is not defined: " curlanguage " in bbl.nnoaddress" * * warning$ "S.\ l." } + if$} +if$} + +FUNCTION {bbl.nopublisher} +{ curlanguage "english" = + { "s.\ n." } + { curlanguage "russian" = + { "{б.\ и.}" } + { "language is not defined: " curlanguage " in bbl.nnopublisher" * * warning$ "s.\ n." } + if$} +if$} + +FUNCTION {bbl.nnopublisher} +{ curlanguage "english" = + { "S.\ n." } + { curlanguage "russian" = + { "{Б.\ и.}" } + { "language is not defined: " curlanguage " in bbl.nnopublisher" * * warning$ "S.\ n." } + if$} +if$} + +FUNCTION {bbl.media.text} +{ curlanguage "english" = + { "Text" } + { curlanguage "russian" = + { "{Текст}" } + { "language is not defined: " curlanguage " in bbl.media" * * warning$ "Text" } + if$} +if$} + +FUNCTION {bbl.media.eresource} +{ curlanguage "english" = + { "Electronic resource" } + { curlanguage "russian" = + { "Электронный ресурс" } + { "language is not defined: " curlanguage " in bbl.media" * * warning$ "Electronic resource" } + if$} +if$} + +FUNCTION {bbl.media.online} +{ curlanguage "english" = + { "Electronic resource online" } + { curlanguage "russian" = + { "Электронный ресурс онлайн" } + { "language is not defined: " curlanguage " in bbl.media" * * warning$ "Electronic resource" } + if$} +if$} + +FUNCTION {bbl.chief} +{ curlanguage "english" = + { "chief" } + { curlanguage "russian" = + { "рук." } + { "language is not defined: " curlanguage " in bbl.chief" * * warning$ "chief" } + if$} +if$} + +FUNCTION {bbl.executor} +{ curlanguage "english" = + { "authors" } + { curlanguage "russian" = + { "авторы" } + { "language is not defined: " curlanguage " in bbl.executor" * * warning$ "executor" } + if$} +if$} + +FUNCTION {bbl.media} +{ media "online" = + { bbl.media.online } + { media "eresource" = + { bbl.media.eresource } + { bbl.media.text } + if$} +if$} + +FUNCTION {bbl.video.bracket} +{ curlanguage "russian" = + { "[видео]" } + { "[video]" } + if$ + } + + +FUNCTION {bbl.software.developer} +{ curlanguage "russian" = + { "разработчик" } + { "developer" } + if$ + } + + +FUNCTION {bbl.software.kind} +{ curlanguage "russian" = + { "Электронная программа" } + { "Electronic program" } + if$ + } + +FUNCTION {bbl.software.subkind} +{ curlanguage "russian" = + { "электронная" } + { "electronic" } + if$ + } + +FUNCTION {bbl.dataset.kind} +{ curlanguage "russian" = + { "база данных" } + { "database" } + if$ + } + + +FUNCTION {bbl.standard.developed} +{ curlanguage "russian" = + { "разработан" } + { "developed by" } + if$ + } + +FUNCTION {bbl.standard.material} +{ curlanguage "russian" = + { "Текст : непосредственный" } + { "Text : direct" } + if$ + } + +FUNCTION {bbl.req} +{ + curlanguage "english" = + { "req." } + { curlanguage "german" = + { "ang." } + { curlanguage "russian" = + { "заявл." } + { "language is not defined: " curlanguage " in bbl.req" * * warning$ "req" } + if$ + } + if$ + } + if$ +} + +FUNCTION {bbl.publ} +{ + curlanguage "english" = + { "publ." } + { curlanguage "german" = + { "ausg." } + { curlanguage "russian" = + { "опубл." } + { "language is not defined: " curlanguage " in bbl.publication" * * warning$ "publication" } + if$ + } + if$ + } + if$ +} + +FUNCTION {bbl.priority} +{ + curlanguage "english" = + { "priority" } + { curlanguage "german" = + { "Prioritat" } + { curlanguage "russian" = + { "приоритет" } + { "language is not defined: " curlanguage " in bbl.priority" * * warning$ "priority" } + if$ + } + if$ + } + if$ +} + +FUNCTION {bbl.jan} +{ curlanguage "english" = + {"Jan."} + { curlanguage "russian" = + { "Янв." } + { curlanguage "german" = + { "Jan." } % Januar + { "language is not defined: bbl.jan for " curlanguage * warning$ "Jan." } + if$} + if$} +if$} + +FUNCTION {bbl.feb} +{ curlanguage "english" = + {"Feb."} + { curlanguage "russian" = + { "Фев." } + { curlanguage "german" = + {"Feb."} % Februar + {"language is not defined: bbl.feb for " curlanguage * warning$ "Feb."} + if$} + if$} +if$} + +FUNCTION {bbl.mar} +{ curlanguage "english" = + {"Mar."} + { curlanguage "russian" = + { "Март" } + { curlanguage "german" = + {"M^^c3^^a4rz"} % M^^c3^^a4rz + {"language is not defined: bbl.mar for " curlanguage * warning$ "Mar."} + if$} + if$} +if$} + +FUNCTION {bbl.apr} +{ curlanguage "english" = + {"Apr."} + { curlanguage "russian" = + { "Апр." } + { curlanguage "german" = + {"Apr."} % April + { "language is not defined: bbl.apr for " curlanguage * warning$ "Apr." } + if$} + if$} +if$} + +FUNCTION {bbl.may} +{ curlanguage "english" = + {"May"} + { curlanguage "russian" = + { "Май" } + { curlanguage "german" = + {"Mai"} + { "language is not defined: bbl.may for " curlanguage * warning$ "May" } + if$} + if$} +if$} + +FUNCTION {bbl.jun} +{ curlanguage "english" = + {"June"} + { curlanguage "russian" = + { "Июнь" } + { curlanguage "german" = + {"Juni"} + { "language is not defined: bbl.jun for " curlanguage * warning$ "June" } + if$} + if$} +if$} + +FUNCTION {bbl.jul} +{ curlanguage "english" = + {"July"} + { curlanguage "russian" = + { "Июль" } + { curlanguage "german" = + {"Juli"} + { "language is not defined: bbl.jul for " curlanguage * warning$ "July" } + if$} + if$} +if$} + +FUNCTION {bbl.aug} +{ curlanguage "english" = + {"Aug."} + { curlanguage "russian" = + { "Авг." } + { curlanguage "german" = + {"Aug."} % August + { "language is not defined: bbl.aug for " curlanguage * warning$ "Aug." } + if$} + if$} +if$} + +FUNCTION {bbl.sep} +{ curlanguage "english" = + {"Sep."} + { curlanguage "russian" = + { "Сен." } + { curlanguage "german" = + {"Sep."} % September + { "language is not defined: bbl.sep for " curlanguage * warning$ "Sep." } + if$} + if$} +if$} + +FUNCTION {bbl.oct} +{ curlanguage "english" = + {"Oct."} + { curlanguage "russian" = + { "Окт." } + { curlanguage "german" = + {"Okt."} % Oktober + { "language is not defined: bbl.oct for " curlanguage * warning$ "Oct." } + if$} + if$} +if$} + +FUNCTION {bbl.nov} +{ curlanguage "english" = + {"Nov."} + { curlanguage "russian" = + { "Ноя." } + { curlanguage "german" = + {"Nov."} % November + { "language is not defined: bbl.nov for " curlanguage * warning$ "Nov." } + if$} + if$} +if$} + +FUNCTION {bbl.dec} +{ curlanguage "english" = + {"Dec."} + { curlanguage "russian" = + { "Дек." } + { curlanguage "german" = + {"Dez."} % Dezember + { "language is not defined: bbl.dec for " curlanguage * warning$ "Dec." } + if$} + if$} +if$} +FUNCTION {bbl.arxiv} +{ curlanguage "english" = + { "ArXiv" } + { curlanguage "russian" = + { "ArXiv" } + { curlanguage "german" = + { "ArXiv" } + { "language is not defined: bbl.arxiv for " curlanguage * warning$ "ArXiv" } + if$} + if$} +if$} + +FUNCTION {bbl.jstor} +{ curlanguage "english" = + { "JSTOR" } + { curlanguage "russian" = + { "JSTOR" } + { curlanguage "german" = + { "JSTOR" } + { "language is not defined: bbl.jstor for " curlanguage * warning$ "JSTOR" } + if$} + if$} +if$} + +FUNCTION {bbl.pubmed} +{ curlanguage "english" = + { "PubMed" } + { curlanguage "russian" = + { "PubMed" } + { curlanguage "german" = + { "PubMed" } + { "language is not defined: bbl.pubmed for " curlanguage * warning$ "PubMed" } + if$} + if$} +if$} + +FUNCTION {bbl.googlebooks} +{ curlanguage "english" = + { "Google Books" } + { curlanguage "russian" = + { "Google Книги" } + { curlanguage "german" = + { "Google Books" } + { "language is not defined: bbl.googlebooks for " curlanguage * warning$ "Google Books" } + if$} + if$} +if$} + +FUNCTION {bbl.hdl} +{ curlanguage "english" = + { "Handle.Net" } + { curlanguage "russian" = + { "Handle.Net" } + { curlanguage "german" = + { "Handle.Net" } + { "language is not defined: bbl.hdl for " curlanguage * warning$ "Handle.Net" } + if$} + if$} +if$} +FUNCTION {address.or.location} +{ + address empty$ + { location } + { address } + if$ +} + +FUNCTION {specialitycode.or.number} +{ + specialitycode empty$ + { number } + { specialitycode } + if$ +} + +FUNCTION {institution.or.school} +{ + institution empty$ + { school} + { institution } + if$ +} +FUNCTION {date.to.year} +{ + date empty$ + { date } + { + date text.length$ #3 > + { + date #1 #4 substring$ 'y := + y + } + { + "wrong format of date in " cite$ * ": date=" * date * warning$ + date + } + if$ + } + if$ +} + +FUNCTION {date.to.month} +{ + date empty$ + { date } + { + date text.length$ #6 > + { + date #6 #2 substring$ 'm := + m + } + { + "wrong format of date in " cite$ * ": date=" * date * warning$ + date + } + if$ + } + if$ +} + +FUNCTION {date.to.day} +{ + date empty$ + { date } + { + date text.length$ #10 = + { + date #9 #2 substring$ 'd := + d + } + { + "wrong format of date in " cite$ * ": date=" * date * warning$ + date + } + if$ + } + if$ +} + +FUNCTION {year.or.date.to.year} +{ + year empty$ + { + date.to.year + } + { year } + if$ +} + +FUNCTION {format.month} +{ month empty$ + { "" } + { month "Jan." = + { bbl.jan } + { month "Feb." = + { bbl.feb } + { month "Mar." = + { bbl.mar } + { month "Apr." = + { bbl.apr } + { month "May" = + { bbl.may } + { month "Jun." = + { bbl.jun } + { month "Jul." = + { bbl.jul } + { month "Aug." = + { bbl.aug } + { month "Sep." = + { bbl.sep } + { month "Oct." = + { "^^d0^^9e^^d0^^ba^^d1^^82." } + { month "Nov." = + { bbl.nov } + { month "Dec." = + { bbl.dec } + { + "unknown month in " cite$ * warning$ + month + } + if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$} + if$ +} +FUNCTION {format.date} +{ year.or.date.to.year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + format.month + } + if$ + } + { month empty$ + 'year.or.date.to.year + { year.or.date.to.year ". " format.month * * } + if$ + } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {fmt.names.three} +{ + 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}{~jj}{~f.}" + format.name$ 't := + nameptr #1 > + { nameptr #4 = numnames #4 > and + { "others" 't := + #1 'namesleft := + } + 'skip$ + if$ + namesleft #1 > + { ", " * t * } + { t "others" = t "~others" = or + { " " * bbl.etal * } + { ", " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {fmt.names.all} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + %"{vv~}{ll}" format.name$ 't := + "{vv~}{ll}{~jj}{~f.}" + format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { numnames #2 > curlanguage "english" = and + { "," * } + 'skip$ + if$ + t "others" = t "~others" = or + { " " * bbl.etal * } + { " " bbl.and " " * * * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +%% { author fmt.names.all emphasize} +%% { author fmt.names.three emphasize} +FUNCTION {format.author} +{ + author empty$ + { author } %%%'skip$ + { author num.names$ #400 < + { + author fmt.names.all + } + { "" } %%%'skip$ + if$} + if$ +} + + +FUNCTION {format.editors.rest} +{ editor empty$ + { "" } + { bbl.edby "\ " * editor fmt.names.all * } + if$ +} + +FUNCTION {format.chief.rest} +{ editor empty$ + { "" } + { bbl.chief "\ " * editor fmt.names.all * } + if$ +} + +FUNCTION {format.executor.rest} +{ author empty$ + { "" } + { author fmt.names.all } + if$ +} + +FUNCTION {format.compiler.rest} +{ compiler empty$ + { "" } + { bbl.compiler "\ " * compiler fmt.names.all * } + if$ +} + +FUNCTION {output.address.publisher} +{ + address empty$ location empty$ and + 'skip$ + { address.or.location output + publisher empty$ + 'skip$ + { new.colon } + if$ + } + if$ + publisher output +} +FUNCTION {output.bibitem} +{ + set.language + newline$ + "\bibitem" write$ + cite$ bracify write$ + newline$ + "\selectlanguageifdefined" curlanguage bracify * write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { bbl.vvol volume tie.connect + series empty$ + 'skip$ + { bbl.of spaces.around * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { series empty$ + { "there's a number but no series in " cite$ * warning$ + bbl.nnr } + { + %new.dblslash + new.sentence + series + bbl.nr + tie.or.space.connect} + if$ + number tie.or.space.connect + } + if$ + } + { "" } + if$ +} + + +FUNCTION {convert.edition} +{ edition +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { convert.edition " " * bbl.edition * } + { convert.edition " " * bbl.edition * } + if$ + } + if$ +} + +FUNCTION {format.pages} +{ eid empty$ + { + pages empty$ + { "" } + { pages multi.page.check + { bbl.ppages pages n.dashify tie.connect } + { bbl.ppage pages tie.connect } + if$ + } + if$ + } + { eid multi.page.check + { bbl.ppages eid n.dashify tie.connect } + { bbl.ppage eid tie.connect } + if$ + } + if$ +} + +FUNCTION {format.pages.page} +{ eid empty$ + { pages empty$ + { pagetotal empty$ + { "" } + { pagetotal bbl.pages tie.connect } + if$ + } + { format.pages} + if$ + } + { format.pages } + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume field.or.null + number empty$ + 'skip$ + { + ", no." number tie.or.space.connect * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ": " * pages n.dashify * } + if$ + } + if$ +} + +FUNCTION {format.volume} +{ volume empty$ + { "" } + { bbl.vvol volume tie.or.space.connect } + if$ +} + +FUNCTION {format.number} +{ number empty$ + { "" } + { bbl.nr number tie.or.space.connect } + if$ +} + + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {bbl.thesis.type} +{ type "mathesis" = + { bbl.mathesis } + { type "phdthesis" = + { bbl.phdthesis } + { type "docthesis" = + { bbl.docthesis } + %%{ "!!!" type * "t" change.case$ } + { type } + if$} + if$} +if$} + +%% bbl.thesis.type "t" change.case$ +%% bbl.thesis.type +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + bbl.thesis.type + } + if$ +} +%% { "t" change.case$ } +%% { "" } + +FUNCTION {format.techreport.type} +{ type empty$ + { bbl.techreport } + 'type + if$ +} + +FUNCTION {output.author.head} +{ + author empty$ + 'skip$ + {author num.names$ #400 < + { + author fmt.names.all output + new.sentence + } + 'skip$ + if$} + if$ +} + +FUNCTION {output.author.rest} +{ +%'skip$ +% author empty$ +% 'skip$ +% {author num.names$ #3 > +% { author fmt.names.all output +% new.semicolon +% } +% 'skip$ +% if$} +% if$ +} + +FUNCTION {bookauthor.rest} +{ + bookauthor empty$ + 'skip$ + { + bookauthor fmt.names.three output + new.semicolon + } + if$ +} + +FUNCTION {editor.organization.rest} +{ + compiler empty$ + {} + { format.compiler.rest output + new.semicolon + } + if$ + editor empty$ + {} + { format.editors.rest output.nonnull + new.semicolon + } + if$ + organization empty$ + {} + {organization output.nonnull + new.semicolon + } + if$ +} + +%% ----- urldate normalisation ----------------------------------------- +%% The `urldate` field in the .bib may be written in any of three +%% popular formats; we parse it and re-emit as GOST "DD.MM.YYYY". +%% Inputs supported: +%% * ISO "YYYY-MM-DD" e.g. 2026-04-06 +%% * GOST "DD.MM.YYYY" e.g. 06.04.2026 +%% * IEEE "Mon. DD, YYYY" / "Month DD, YYYY" e.g. Apr. 6, 2026 +%% Anything else passes through unchanged. + +% Zero-pad a 1-digit number string to 2 digits ("6" -> "06"). +FUNCTION {ud.pad2} +{ duplicate$ text.length$ #1 = + { "0" swap$ * } + { skip$ } + if$ +} + +FUNCTION {ud.month.name.to.num} +{ duplicate$ #1 #3 substring$ "l" change.case$ 'ud.tmp := + ud.tmp "jan" = + { pop$ "01" } + { ud.tmp "feb" = + { pop$ "02" } + { ud.tmp "mar" = + { pop$ "03" } + { ud.tmp "apr" = + { pop$ "04" } + { ud.tmp "may" = + { pop$ "05" } + { ud.tmp "jun" = + { pop$ "06" } + { ud.tmp "jul" = + { pop$ "07" } + { ud.tmp "aug" = + { pop$ "08" } + { ud.tmp "sep" = + { pop$ "09" } + { ud.tmp "oct" = + { pop$ "10" } + { ud.tmp "nov" = + { pop$ "11" } + { ud.tmp "dec" = + { pop$ "12" } + { skip$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + +FUNCTION {parse.urldate} +{ "no" 'ud.parsed := + "" 'ud.y := "" 'ud.m := "" 'ud.d := + urldate empty$ 'skip$ + { urldate text.length$ 'ud.len := + ud.len #10 = + { % ISO YYYY-MM-DD? + urldate #5 #1 substring$ "-" = + urldate #8 #1 substring$ "-" = and + { urldate #1 #4 substring$ 'ud.y := + urldate #6 #2 substring$ 'ud.m := + urldate #9 #2 substring$ 'ud.d := + "yes" 'ud.parsed := + } + { % GOST DD.MM.YYYY? + urldate #3 #1 substring$ "." = + urldate #6 #1 substring$ "." = and + { urldate #1 #2 substring$ 'ud.d := + urldate #4 #2 substring$ 'ud.m := + urldate #7 #4 substring$ 'ud.y := + "yes" 'ud.parsed := + } + { skip$ } + if$ + } + if$ + } + { skip$ } + if$ + ud.parsed "no" = + { ud.len #7 > + { urldate ud.len #3 - #4 substring$ 'ud.y := + urldate ud.len #4 - #1 substring$ " " = + urldate ud.len #5 - #1 substring$ "," = and + { #1 'ud.idx := + #0 'ud.space.pos := + { ud.idx ud.len #5 - < + ud.space.pos #0 = and + } + { urldate ud.idx #1 substring$ " " = + { ud.idx 'ud.space.pos := } + { skip$ } + if$ + ud.idx #1 + 'ud.idx := + } + while$ + ud.space.pos #0 > + { urldate #1 ud.space.pos #1 - substring$ + ud.month.name.to.num 'ud.m := + urldate ud.space.pos #1 + + ud.len #6 - ud.space.pos - + substring$ 'ud.d := + "yes" 'ud.parsed := + } + { skip$ } + if$ + } + { skip$ } + if$ + } + { skip$ } + if$ + } + { skip$ } + if$ + } + if$ +} + +FUNCTION {urldate.in.gost.style} +{ parse.urldate + ud.parsed "yes" = + { ud.d ud.pad2 "." * ud.m ud.pad2 * "." * ud.y * } + { urldate } + if$ +} + + +FUNCTION {format.url} +{ url empty$ + { "" } + { + bbl.url ": \url{" * url * "}" * + urldate empty$ + { "" } + { " (" bbl.urldate * ": " * urldate.in.gost.style * ")" * } + if$ * + } + if$ +} + +FUNCTION {output.url} +{ doi empty$ + { url empty$ + 'skip$ + { format.url output } + if$ + } + 'skip$ + if$ +} + +FUNCTION {format.annote} +{ annote empty$ + { "" } +{ after.sentence 'output.state := + "\BibAnnote{" annote add.period$ * "}" * +} + if$ +} + +FUNCTION {format.isbn} +{ + isbn empty$ + { "" } + { "ISBN:~\href{http://isbndb.com/search-all.html?kw=" isbn * + "}{" * isbn * "}" * + } + if$ +} + +FUNCTION {format.doi} +{ doi empty$ + { "" } + { "doi:\mylinkurl{" doi * "}" * } + if$ +} + +FUNCTION {add.media} +{ duplicate$ empty$ + 'skip$ + { media empty$ + 'skip$ + { " " * bbl.media bracketise * } + if$ + } + if$ +} + + + +FUNCTION {format.eprint} +{ eprint empty$ + { "" } + { eprinttype empty$ + { "" } + { eprinttype "~: " *} + if$ + eprintclass empty$ + { } + { eprintclass * "/" *} + if$ + url empty$ + { eprint * } + { "\href{" * url * "}{" * eprint * "}}" *} + if$ + } + if$ +} + +FUNCTION {output.eprint.url} +{ doi empty$ + {eprint empty$ + { format.url output } + { format.eprint output } + if$ + } + 'skip$ + if$ +} + + + +FUNCTION {add.number} +{ duplicate$ empty$ + { "" } + { bbl.nr swap$ tie.or.space.connect } + if$ +} + +FUNCTION {format.type.number} +{ + type empty$ + { "" } + { + number empty$ + { "" } + { type number tie.or.space.connect } + if$ + } + if$ +} +FUNCTION {format.patent.id} +{ number empty$ + { "" } + { type empty$ + { bbl.patent } + { type } + if$ + nationality empty$ + { skip$ } + { " " * nationality * } + if$ + " " * number * + } + if$ +} + +FUNCTION {format.requestdate} +{ requestdate empty$ + { "" } + { bbl.req requestdate tie.or.space.connect } + if$ +} + +FUNCTION {format.publicationdate} +{ publicationdate empty$ + { "" } + { bbl.publ publicationdate tie.or.space.connect } + if$ +} + +FUNCTION {format.prioritydate} +{ prioritydate empty$ + { "" } + { bbl.priority prioritydate tie.or.space.connect } + if$ +} + +FUNCTION {article} +{ + output.bibitem + output.author.head + new.sentence + title add.media "title" output.check + new.slash +% output.author.rest + new.dblslash + journal emphasize "journal" output.check % new in v1.2 + new.block + format.date "year/date" output.check + new.block + format.volume output + format.number output + new.block + format.pages.page output + new.block + note output + new.sentence + format.doi output + new.sentence + output.eprint.url + format.annote output + fin.entry +} + +FUNCTION {book} +{ + output.bibitem + output.author.head + new.sentence + title add.media "title" output.check + new.colon % added in v.1.2k + titleaddon output % added in v.1.2k + new.slash +% output.author.rest + editor.organization.rest + new.sentence + format.number.series output + new.block + format.edition output + new.block + output.address.publisher + format.date "year/date" output.check + new.block + format.bvolume output + new.block + format.pages.page output + new.block + format.isbn output + new.block + note output + new.sentence + format.doi output + new.sentence + output.eprint.url + format.annote output + fin.entry +} + +FUNCTION {booklet} +{ + output.bibitem + output.author.head + new.sentence + title add.media "title" output.check + new.colon % added in v.1.2k + titleaddon output % added in v.1.2k + new.slash +% output.author.rest + editor.organization.rest + new.block + howpublished output + address.or.location output + format.date "year/date" output.check + new.block + note output + new.sentence + format.doi output + new.sentence + output.eprint.url + format.annote output + fin.entry +} + +FUNCTION {inbook} +{ + output.bibitem + output.author.head + new.sentence + title add.media "title" output.check + new.colon % added in v.1.2k + titleaddon output % added in v.1.2k + new.slash +% output.author.rest + new.dblslash + booktitle "booktitle" output.check + new.slash + bookauthor.rest + editor.organization.rest + new.block + format.edition output + new.block + format.number.series output + new.sentence + output.address.publisher + format.date "year/date" output.check + new.block + format.bvolume output + new.block + format.pages.page output + new.block + format.isbn output + new.block + note output + new.sentence + format.doi output + new.sentence + output.eprint.url + format.annote output + fin.entry +} + +FUNCTION {incollection} +{ + output.bibitem + output.author.head + new.sentence + new.sentence + title add.media "title" output.check + new.colon % added in v.1.2k + titleaddon output % added in v.1.2k + new.slash +% output.author.rest + new.dblslash + booktitle "booktitle" output.check + new.slash + editor.organization.rest + new.block + output.address.publisher + format.date "year/date" output.check + new.block + format.bvolume output + format.number.series output + new.block + format.pages.page output + new.block + note output + new.sentence + format.doi output + new.sentence + output.eprint.url + format.annote output + fin.entry +} + +FUNCTION {proceedings} +{ + output.bibitem + title add.media "title" output.check + new.colon % added in v.1.2k + titleaddon output % added in v.1.2k + new.slash + editor.organization.rest + new.block + output.address.publisher % 1.2k moved from below + new.block % added in v.1.2k + format.date "year/date" output.check + new.block + format.bvolume output + format.number.series output + new.block + format.pages.page output + %%%output.address.publisher % 1.2k moved upper + new.block + note output + new.sentence + format.doi output + new.sentence + output.eprint.url + format.annote output + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + output.author.head + new.sentence + new.sentence + title add.media "title" output.check + new.colon % added in v.1.2k + titleaddon output % added in v.1.2k + new.slash +% output.author.rest + new.dblslash + booktitle "booktitle" output.check + new.slash + editor.organization.rest + new.block + output.address.publisher % 1.2k moved from below + new.block % added in v.1.2k + format.date "year/date" output.check + new.block + format.bvolume output + format.number.series output + new.block + format.pages.page output + new.block + note output + new.sentence + format.doi output + new.sentence + output.eprint.url + format.annote output + fin.entry +} + +FUNCTION {manual} +{ output.bibitem + author empty$ + { organization empty$ + 'skip$ + { organization output.nonnull + address output + } + if$ + } + { format.author output.nonnull } + if$ + new.block + title add.media "title" output.check + new.colon % added in v.1.2k + titleaddon output % added in v.1.2k + author empty$ + { organization empty$ + { + address new.block.checka + address output + } + 'skip$ + if$ + } + { + organization address new.block.checkb + organization output + address output + } + if$ + format.edition output + format.date "year/date" output.check + new.block + note output + new.sentence + format.doi output + new.sentence + output.eprint.url + format.annote output + fin.entry +} + +FUNCTION {patent} +{ + output.bibitem + title add.media "title" output.check + new.colon % added in v.1.2k + titleaddon output % added in v.1.2k + format.patent.id + duplicate$ empty$ + { pop$ add.period$ new.colon format.type.number output } + { output.nonnull } + if$ + add.blank + address.or.location output + new.colon + ipc output + new.slash + format.author "author" output.check + %add.blank + authorcountry missing$ + 'skip$ + { authorcountry paranthesify output } + if$ + new.semicolon + holder output + new.semicolon + credits output + new.block + requestnumber missing$ + 'skip$ + { requestnumber add.number output } + if$ + new.semicolon + format.requestdate output + new.semicolon + format.publicationdate output + publication missing$ + 'skip$ + { publication output } + if$ + new.semicolon + format.prioritydate output + prioritynumber missing$ + 'skip$ + { prioritynumber output } + if$ + prioritycountry missing$ + 'skip$ + { prioritycountry paranthesify output } + if$ + new.block + format.date output + new.block + note output + new.sentence + output.url + format.annote output + new.block + pagetotal output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + %format.author output % < v.1.2k + output.author.head % v.1.2k + new.sentence % v.1.2k + title howpublished new.sentence.checkb + title add.media output + howpublished new.block.checka + howpublished output + new.block + format.date "year/date" output.check + new.block + note output + new.sentence + output.eprint.url + format.annote output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + output.author.head + new.sentence + title "title" output.check + new.colon % added in v.1.2k + titleaddon output % added in v.1.2k + new.slash +% output.author.rest + editor.organization.rest + new.block + format.date "year/date" output.check + new.block + note "note" output.check + new.sentence + output.eprint.url + format.annote output + fin.entry +} + +FUNCTION {online} +{ output.bibitem + format.author output + title howpublished new.sentence.checkb + title add.media "title" output.check + new.colon % added in v.1.2k + titleaddon output % added in v.1.2k + howpublished new.dblslash.checka + howpublished output + editor.organization.rest + new.sentence + new.block + output.address.publisher + format.date output + new.sentence + format.doi output + new.block + output.eprint.url + new.sentence + note output + format.annote output + fin.entry +} + +FUNCTION {internet} {online} +FUNCTION {www} {online} +FUNCTION {webpage} {online} +FUNCTION {electronic} {online} +FUNCTION {thesis} +{ output.bibitem + format.author "author" output.check + new.sentence + title add.media "title" output.check + new.colon + bbl.phdthesis format.thesis.type output.nonnull + new.colon + specialitycode.or.number output % code of the speciality, new in v.1.2i + new.colon + titleaddon output % date of defence and approvement; new in v.1.2i + new.slash + %%%format.author.rest output %% dupplicates athours from the head zone +% output.author.rest %% prints if num.names$ > 3 or > 1 + new.semicolon + %institution "institution" output.check + institution.or.school "institution/school" output.check + new.block + output.address.publisher + format.date "year/date" output.check + new.block + format.pages.page output + new.block + note output + new.sentence + format.doi output + new.sentence + output.eprint.url + format.annote output + fin.entry +} +%% format.techrep.type.number output.nonnull +%% format.url output +FUNCTION {report} +{ + output.bibitem + title add.media "title" output.check + new.colon % added in v.1.2k + titleaddon output % added in v.1.2k + new.colon + type "type" output.check + new.colon + number output + new.slash + %institution "institution" output.check + institution.or.school "institution/school" output.check + new.semicolon + format.chief.rest output % from editor field + new.semicolon + format.executor.rest output % from author field + new.block + address.or.location output + new.colon + organization output + format.date "year/date" output.check + new.block % v.2 + format.pages.page output % v.2 + new.sentence + format.doi output + new.sentence % ^^d0^^b8^^d0^^bb^^d0^^b8 new.block ? + output.eprint.url + new.block + note output + format.annote output + fin.entry +} + +FUNCTION {phdthesis} +{ output.bibitem + format.author "author" output.check + new.sentence + title add.media "title" output.check + new.colon + bbl.phdthesis format.thesis.type output.nonnull + new.colon + %%number output % code of the speciality + specialitycode.or.number output % code of the speciality, new in v.1.2i + new.colon + titleaddon output % date of defence and approvement; new in v.1.2i + new.slash + %%%format.author.rest output %% dupplicates athours +% output.author.rest %% prints if num.names$ > 3 or > 1 + new.semicolon + %institution "institution" output.check + institution.or.school "institution/school" output.check + new.block + output.address.publisher + format.date "year/date" output.check + new.block + format.pages.page output + new.block + note output + new.sentence + format.doi output + new.sentence + output.eprint.url + format.annote output + fin.entry +} +FUNCTION {mastersthesis} +{ output.bibitem + format.author "author" output.check + new.sentence + title add.media "title" output.check + new.colon + bbl.mathesis format.thesis.type output.nonnull + new.colon + %%number output % code of the speciality + specialitycode.or.number output % code of the speciality, new in v.1.2i + new.colon + titleaddon output % date of defence and approvement; new in v.1.2i + new.slash + %%%format.author.rest output %% dupplicates athours +% output.author.rest %% prints if num.names$ > 3 or > 1 + new.semicolon + %institution "institution" output.check + institution.or.school "institution/school" output.check + new.block + output.address.publisher + format.date "year/date" output.check + new.block + format.pages.page output + new.block + note output + new.sentence + format.doi output + new.sentence + output.eprint.url + format.annote output + fin.entry +} +FUNCTION {docthesis} +{ output.bibitem + format.author "author" output.check + new.sentence + title add.media "title" output.check + new.colon + bbl.docthesis format.thesis.type output.nonnull + new.colon + %%number output % code of the speciality + specialitycode.or.number output % code of the speciality, new in v.1.2i + new.colon + titleaddon output % date of defence and approvement; new in v.1.2i + new.slash + %%%format.author.rest output %% dupplicate athours +% output.author.rest %% prints if num.names$ > 3 or > 1 + new.semicolon + %institution "institution" output.check + institution.or.school "institution/school" output.check + new.block + output.address.publisher + format.date "year/date" output.check + new.block + format.pages.page output + new.block + note output + new.sentence + format.doi output + new.sentence + output.eprint.url + format.annote output + fin.entry +} +FUNCTION {conference} { inproceedings } + +%% format.url output + +% FUNCTION {article} +% { +% output.bibitem +% output.author.head +% new.sentence +% title add.media "title" output.check +% new.slash +% output.author.rest +% new.dblslash +% journal emphasize "journal" output.check % new in v1.2 +% new.block +% format.date "year/date" output.check +% new.block +% format.volume output +% format.number output +% new.block +% format.pages.page output +% new.block +% note output +% new.sentence +% format.doi output +% new.sentence +% output.eprint.url +% format.annote output +% fin.entry +% } + + +FUNCTION {techreport} +{ + output.bibitem + format.executor.rest output % from author field + new.sentence + title add.media "title" output.check + new.slash + format.techreport.type output + number output + new.slash + %institution "institution" output.check + institution.or.school "institution/school" output.check + new.semicolon + format.chief.rest output % from editor field + new.block + address.or.location output + new.colon + organization output + format.date "year/date" output.check + new.block % v.2 + format.pages.page output % v.2 + new.sentence + format.doi output + new.sentence % ^^d0^^b8^^d0^^bb^^d0^^b8 new.block ? + output.eprint.url + new.block + note output + format.annote output + fin.entry +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% New IEEE type aliases — best-fit mappings to GOST 7.0.5 handlers. %% +%% These let the same BibTeX file feed both the IEEE.bst (English) %% +%% and ugost2008.bst (Russian) bibliographies. GOST has no separate %% +%% layouts for blogs, datasets, software, lectures, social-media etc, %% +%% so each new IEEE entry type is routed to the closest existing %% +%% GOST handler: %% +%% * any online/electronic resource → @online (URL-based, with %% +%% \BIBforeignlanguage / [Электронный ресурс] handling), %% +%% * news article in a periodical → @article, %% +%% * presentation / conf. paper → @inproceedings, %% +%% * preprint → @misc, %% +%% * standard / handbook → @manual, %% +%% * government document → @misc, %% +%% * patent (any form) → @patent, %% +%% * dissertation → @phdthesis. %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% @video — dedicated GOST 7.0.5 handler. +%% Layout (Russian): +%% Title : [видео] / Author -- URL: (дата обращения: ) +%% Layout (English): +%% Title : [video] / Author -- URL: (online; accessed: ) +%% The entry is built as a single string for full control over the +%% segment separators (which mix " : ", " / ", and "\BibDash{}" — a +%% combination the standard state machine doesn't model). +FUNCTION {video} +{ output.bibitem + % output.bibitem leaves an empty buffer on the stack; discard it so we + % can build the entry as a single string from scratch. + pop$ + title duplicate$ empty$ + { pop$ "empty title in " cite$ * warning$ "" } + 'skip$ + if$ + "~: " * + bbl.video.bracket * + author empty$ + 'skip$ + { "~/ " * + format.author * + } + if$ + url empty$ + 'skip$ + { " \BibDash{} " * + bbl.url * + ": \url{" * + url * + "}" * + urldate empty$ + 'skip$ + { " (" * + bbl.urldate * + ": " * + urldate.in.gost.style * + ")" * + } + if$ + } + if$ + add.period$ + write$ + newline$ +} + +FUNCTION {software} +{ output.bibitem + pop$ + title duplicate$ empty$ + { pop$ "empty title in " cite$ * warning$ "" } + 'skip$ + if$ + author empty$ organization empty$ and howpublished empty$ and + 'skip$ + { "~/ " * + bbl.software.developer * + ": " * + author empty$ + { organization empty$ + { howpublished * } + { organization * } + if$ + } + { format.author * } + if$ + } + if$ + address empty$ year empty$ and + 'skip$ + { add.period$ + " \BibDash{} " * + address empty$ + { year * } + { address * + year empty$ + 'skip$ + { " : " * year * } + if$ + } + if$ + } + if$ + add.period$ + " \BibDash{} " * + bbl.software.kind * + " : " * + bbl.software.subkind * + url empty$ + 'skip$ + { add.period$ + " \BibDash{} " * + bbl.url * + ": \url{" * + url * + "}" * + urldate empty$ + 'skip$ + { " (" * + bbl.urldate * + ": " * + urldate.in.gost.style * + ")" * + } + if$ + } + if$ + add.period$ + write$ + newline$ +} + +FUNCTION {dataset} +{ output.bibitem + pop$ + title duplicate$ empty$ + { pop$ "empty title in " cite$ * warning$ "" } + 'skip$ + if$ + "~: " * + bbl.dataset.kind * + author empty$ organization empty$ and howpublished empty$ and + 'skip$ + { "~/ " * + author empty$ + { organization empty$ + { howpublished * } + { organization * } + if$ + } + { format.author * } + if$ + } + if$ + year empty$ + 'skip$ + { ", " * year * } + if$ + url empty$ + 'skip$ + { add.period$ + " " * + bbl.url * + ": \url{" * + url * + "}" * + urldate empty$ + 'skip$ + { " (" * + bbl.urldate * + ": " * + urldate.in.gost.style * + ")" * + } + if$ + } + if$ + add.period$ + write$ + newline$ +} + +FUNCTION {blog} {online} +FUNCTION {news} {article} +FUNCTION {newsarticle} {article} +FUNCTION {lecture} {online} +FUNCTION {website} {online} +FUNCTION {socialmedia} {online} +FUNCTION {government} {misc} +FUNCTION {presentation} {inproceedings} +FUNCTION {confonline} {online} +FUNCTION {conferenceonline} {online} +FUNCTION {confpaperonline} {online} +FUNCTION {patentonline} {patent} +FUNCTION {preprint} {misc} +FUNCTION {arxiv} {misc} +FUNCTION {dissertation} {phdthesis} + +%% @standard — dedicated GOST handler. +%% Forms the leading identifier from the organization + number fields, +%% so the standard number is not lost. Layout: +%% [Organization Number]. Title. — Address. — Year. — Note. — doi. +FUNCTION {standard} +{ output.bibitem + pop$ + organization empty$ number empty$ and + { "" } + { organization empty$ + { number } + { number empty$ + { organization } + { organization " " * number * } + if$ + } + if$ + } + if$ + title empty$ + 'skip$ + { duplicate$ empty$ + { pop$ title } + { add.period$ " " * title * } + if$ + } + if$ + % " : " + type empty$ + 'skip$ + { " : " * type * } + if$ + % " / разработан " + author empty$ + 'skip$ + { "~/ " * + bbl.standard.developed * + " " * + format.author * + } + if$ + % ". --

: , " + address empty$ publisher empty$ and year empty$ and + 'skip$ + { add.period$ + " \BibDash{} " * + address empty$ + 'skip$ + { address * } + if$ + publisher empty$ + 'skip$ + { address empty$ + 'skip$ + { " : " * } + if$ + publisher * + } + if$ + year empty$ + 'skip$ + { address empty$ publisher empty$ and + 'skip$ + { ", " * } + if$ + year * + } + if$ + } + if$ + % ". -- " + pages empty$ + 'skip$ + { add.period$ + " \BibDash{} " * + pages * + } + if$ + % ". -- Note" if provided. + note empty$ + 'skip$ + { add.period$ + " \BibDash{} " * + note * + } + if$ + % ". -- Текст : непосредственный" + add.period$ + " \BibDash{} " * + bbl.standard.material * + add.period$ + write$ + newline$ +} + +FUNCTION {default.type} { misc } + +MACRO {jan} {"Jan."} +MACRO {feb} {"Feb."} +MACRO {mar} {"Mar."} +MACRO {apr} {"Apr."} +MACRO {may} {"May"} +MACRO {jun} {"Jun."} +MACRO {jul} {"Jul."} +MACRO {aug} {"Aug."} +MACRO {sep} {"Sep."} +MACRO {oct} {"Oct."} +MACRO {nov} {"Nov."} +MACRO {dec} {"Dec."} +MACRO {aa}{"Astron.\ \& Astrophys."} +MACRO {aasup}{"Astron.\ \& Astrophys.\ Suppl.\ Ser."} +MACRO {aj} {"Astron.\ J."} +MACRO {aph} {"Acta Phys."} +MACRO {advp} {"Adv.\ Phys."} +MACRO {ajp} {"Amer.\ J.\ Phys."} +MACRO {ajm} {"Amer.\ J.\ Math."} +MACRO {amsci} {"Amer.\ Sci."} +MACRO {anofd} {"Ann.\ Fluid Dyn."} +MACRO {am} {"Ann.\ Math."} +MACRO {ap} {"Ann.\ Phys.\ (NY)"} +MACRO {adp} {"Ann.\ Phys.\ (Leipzig)"} +MACRO {ao} {"Appl.\ Opt."} +MACRO {apl} {"Appl.\ Phys.\ Lett."} +MACRO {app} {"Astroparticle Phys."} +MACRO {apj} {"Astrophys.\ J."} +MACRO {apjsup} {"Astrophys.\ J.\ Suppl."} +MACRO {apss} {"Astrophys.\ Space Sci."} +MACRO {araa} {"Ann.\ Rev.\ Astron.\ Astrophys."} +MACRO {baas} {"Bull.\ Amer.\ Astron.\ Soc."} +MACRO {baps} {"Bull.\ Amer.\ Phys.\ Soc."} +MACRO {cmp} {"Comm.\ Math.\ Phys."} +MACRO {cpam} {"Commun.\ Pure Appl.\ Math."} +MACRO {cppcf} {"Comm.\ Plasma Phys.\ \& Controlled Fusion"} +MACRO {cpc} {"Comp.\ Phys.\ Comm."} +MACRO {cqg} {"Class.\ Quant.\ Grav."} +MACRO {cra} {"C.\ R.\ Acad.\ Sci.\ A"} +MACRO {fed} {"Fusion Eng.\ \& Design"} +MACRO {ft} {"Fusion Tech."} +MACRO {grg} {"Gen.\ Relativ.\ Gravit."} +MACRO {ieeens} {"IEEE Trans.\ Nucl.\ Sci."} +MACRO {ieeeps} {"IEEE Trans.\ Plasma Sci."} +MACRO {ijimw} {"Interntl.\ J.\ Infrared \& Millimeter Waves"} +MACRO {ip} {"Infrared Phys."} +MACRO {irp} {"Infrared Phys."} +MACRO {jap} {"J.\ Appl.\ Phys."} +MACRO {jasa} {"J.\ Acoust.\ Soc.\ America"} +MACRO {jcp} {"J.\ Comp.\ Phys."} +MACRO {jchp} {"J.\ Chem.\ Phys."} +MACRO {jetp} {"Sov.\ Phys.--JETP"} +MACRO {jfe} {"J.\ Fusion Energy"} +MACRO {jfm} {"J.\ Fluid Mech."} +MACRO {jmp} {"J.\ Math.\ Phys."} +MACRO {jne} {"J.\ Nucl.\ Energy"} +MACRO {jnec} {"J.\ Nucl.\ Energy, C: Plasma Phys., Accelerators, Thermonucl.\ Res."} +MACRO {jnm} {"J.\ Nucl.\ Mat."} +MACRO {jpc} {"J.\ Phys.\ Chem."} +MACRO {jpp} {"J.\ Plasma Phys."} +MACRO {jpsj} {"J.\ Phys.\ Soc.\ Japan"} +MACRO {jsi} {"J.\ Sci.\ Instrum."} +MACRO {jvst} {"J.\ Vac.\ Sci.\ \& Tech."} +MACRO {nat} {"Nature"} +MACRO {nature} {"Nature"} +MACRO {nedf} {"Nucl.\ Eng.\ \& Design/Fusion"} +MACRO {nf} {"Nucl.\ Fusion"} +MACRO {nim} {"Nucl.\ Inst.\ \& Meth."} +MACRO {nimpr} {"Nucl.\ Inst.\ \& Meth.\ in Phys.\ Res."} +MACRO {np} {"Nucl.\ Phys."} +MACRO {npb} {"Nucl.\ Phys.\ B"} +MACRO {nt/f} {"Nucl.\ Tech./Fusion"} +MACRO {npbpc} {"Nucl.\ Phys.\ B (Proc.\ Suppl.)"} +MACRO {inc} {"Nuovo Cimento"} +MACRO {nc} {"Nuovo Cimento"} +MACRO {pf} {"Phys.\ Fluids"} +MACRO {pfa} {"Phys.\ Fluids A: Fluid Dyn."} +MACRO {pfb} {"Phys.\ Fluids B: Plasma Phys."} +MACRO {pl} {"Phys.\ Lett."} +MACRO {pla} {"Phys.\ Lett.\ A"} +MACRO {plb} {"Phys.\ Lett.\ B"} +MACRO {prep} {"Phys.\ Rep."} +MACRO {pnas} {"Proc.\ Nat.\ Acad.\ Sci.\ USA"} +MACRO {pp} {"Phys.\ Plasmas"} +MACRO {pop} {"Phys.\ Plasmas"} +MACRO {ppcf} {"Plasma Phys.\ \& Controlled Fusion"} +MACRO {phitrsl} {"Philos.\ Trans.\ Roy.\ Soc.\ London"} +MACRO {prl} {"Phys.\ Rev.\ Lett."} +MACRO {pr} {"Phys.\ Rev."} +MACRO {physrev} {"Phys.\ Rev."} +MACRO {pra} {"Phys.\ Rev.\ A"} +MACRO {prb} {"Phys.\ Rev.\ B"} +MACRO {prc} {"Phys.\ Rev.\ C"} +MACRO {prd} {"Phys.\ Rev.\ D"} +MACRO {pre} {"Phys.\ Rev.\ E"} +MACRO {ps} {"Phys.\ Scripta"} +MACRO {procrsl} {"Proc.\ Roy.\ Soc.\ London"} +MACRO {rmp} {"Rev.\ Mod.\ Phys."} +MACRO {rsi} {"Rev.\ Sci.\ Inst."} +MACRO {science} {"Science"} +MACRO {sciam} {"Sci.\ Am."} +MACRO {sam} {"Stud.\ Appl.\ Math."} +MACRO {st} {"Sky and Telesc."} +MACRO {cjp} {"Czech. J. Phys."} +MACRO {el} {"Europhys. Lett."} +MACRO {en} {"Europhys. News"} +MACRO {fujitsustj} {"FUJITSU Sci. Tech. J."} +MACRO {ieeeed} {"IEEE Trans. Electron Devices"} +MACRO {ieeeim} {"IEEE Trans. Instrum. Meas."} +MACRO {ieeejqe} {"IEEE J. Quantum Electron."} +MACRO {ieeem} {"IEEE Trans. Magn."} +MACRO {ieeeptl} {"IEEE Photonic Technol. Lett."} +MACRO {ieeeuffc} {"IEEE Trans. Ultrason., Ferroelect., Freq. Cont."} +MACRO {jem} {"J. Electron. Mater."} +MACRO {jes} {"J. Electrochem. Soc."} +MACRO {jetplett} {"JETP Lett."} +MACRO {jjap} {"Japan. J. Appl. Phys."} +MACRO {jpha} {"J. Phys. A: Math. Gen."} +MACRO {jphb} {"J. Phys. B: At. Mol. Opt. Phys."} +MACRO {jphbold} {"J. Phys. B: At. Mol. Phys."} +MACRO {jphc} {"J. Phys.: Condens. Matter"} +MACRO {jphcold} {"J. Phys. C: Solid State Phys."} +MACRO {jphd} {"J. Phys. D: Appl. Phys."} +MACRO {jvsta} {"J. Vac. Sci. Technol. A"} +MACRO {jvstb} {"J. Vac. Sci. Technol. B"} +MACRO {me} {"Microelectron. Eng."} +MACRO {necrd} {"NEC Res.{\&} Develop."} +MACRO {pa} {"Physica A"} +MACRO {pb} {"Physica B"} +MACRO {pc} {"Physica C"} +MACRO {pd} {"Physica D"} +MACRO {procieee} {"Proc. IEEE"} +MACRO {procspie} {"Proc. SPIE"} +MACRO {pssa} {"Phys. Stat. Sol. A"} +MACRO {pssb} {"Phys. Stat. Sol. B"} +MACRO {rpp} {"Rep. Progr. Phys."} +MACRO {sm} {"Synthet. Metal"} +MACRO {sost} {"Solid State Technol."} +MACRO {ss} {"Surf. Sci."} +MACRO {ssc} {"Solid State Commun."} +MACRO {sst} {"Semicond. Sci. Technol."} +MACRO {suplatt} {"Superlatt. Microstr."} +MACRO {sust} {"Supercond. Sci. Technol."} +MACRO {znat} {"Z. Naturforsch."} +MACRO {appopt} {"Appl.\ Opt."} +MACRO {bell} {"Bell Syst.\ Tech.\ J."} +MACRO {ell} {"Electron.\ Lett."} +MACRO {jasp} {"J.\ Appl.\ Spectr."} +MACRO {jqe} {"IEEE J.\ Quantum Electron."} +MACRO {jlwt} {"J.\ Lightwave Technol."} +MACRO {jmo} {"J.\ Mod.\ Opt."} +MACRO {josa} {"J.\ Opt.\ Soc.\ America"} +MACRO {josaa} {"J.\ Opt.\ Soc.\ Amer.~A"} +MACRO {josab} {"J.\ Opt.\ Soc.\ Amer.~B"} +MACRO {jdp} {"J.\ Phys.\ (Paris)"} +MACRO {oc} {"Opt.\ Commun."} +MACRO {ol} {"Opt.\ Lett."} +MACRO {os} {"Opt.\ Spectrosc."} +MACRO {phtl} {"IEEE Photon. Technol. Lett."} +MACRO {pspie} {"Proc.\ Soc.\ Photo-Opt.\ Instrum. Eng."} +MACRO {vr} {"Vision Res."} +MACRO {zph} {"Z.\ f.\ Physik"} +MACRO {zphb} {"Z.\ f.\ Physik~B"} +MACRO {zphd} {"Z.\ f.\ Physik~D"} +MACRO {sse} {"Solid-State Electron."} +MACRO {pss} {"Phys. Sol. State"} +MACRO {nl} {"Nano Lett."} +MACRO {sjpp} {"Sov.\ J.\ Plasma Phys."} +MACRO {spd} {"Sov.\ Phys.--Doklady"} +MACRO {sptp} {"Sov.\ Phys.--Tech. Phys."} +MACRO {spu} {"Sov.\ Phys.--Uspekhi"} +MACRO {ufn} {"^^d0^^a3^^d0^^a4^^d0^^9d"} +MACRO {pu} {"Phys.--Uspekhi"} +MACRO {sjot} {"Sov.\ J.\ Opt.\ Technol."} +MACRO {sjqe} {"Sov.\ J.\ Quantum Electron."} +MACRO {sleb} {"Sov.\ Phys.--Leb.\ Inst.\ Rep."} +MACRO {stph} {"Sov.\ Phys.--Techn.\ Phys."} +MACRO {stphl}{"Sov.\ Techn.\ Phys.\ Lett."} + +READ + + + + +STRINGS { longest.label } + +INTEGERS { number.label longest.label.width } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #1 'number.label := + #0 'longest.label.width := +} + +EXECUTE {initialize.longest.label} + +FUNCTION {forward.pass} +{ number.label int.to.str$ 'label := + number.label #1 + 'number.label := + label width$ longest.label.width > + { label 'longest.label := + label width$ 'longest.label.width := + } + 'skip$ + if$ +} + +ITERATE {forward.pass} + + +FUNCTION {begin.bib} +{ "\begin{thebibliography}{" longest.label * "}" * write$ newline$ + "\def\selectlanguageifdefined#1{" write$ newline$ + "\expandafter\ifx\csname date#1\endcsname\relax" write$ newline$ + "\else\selectlanguage{#1}\fi}" write$ newline$ +% "\providecommand*{\href}[2]{{\small #2}}" write$ newline$ +% "\providecommand*{\url}[1]{{\small #1}}" write$ newline$ + "\providecommand*{\BibUrl}[1]{\url{#1}}" write$ newline$ + "\providecommand{\BibAnnote}[1]{}" write$ newline$ + "\providecommand*{\BibEmph}[1]{#1}" write$ newline$ + % User-configurable appearance hooks. Defaults match the historic + % ugost2008.bst look (\small font, single line spacing, -5pt itemsep). + % Override from the document preamble with \renewcommand, e.g.: + % \renewcommand{\bibfontsize}{\footnotesize} + % \renewcommand{\biblinespread}{1.1} + % \renewcommand{\bibitemsep}{0pt} + "\providecommand{\bibfontsize}{\small}" write$ newline$ + "\providecommand{\biblinespread}{1.0}" write$ newline$ + "\providecommand{\bibitemsep}{-5pt}" write$ newline$ + "\bibfontsize\linespread{\biblinespread}\selectfont" write$ newline$ + "\setlength{\itemsep}{\bibitemsep}" write$ newline$ + "\setlength{\labelwidth}{20pt}" write$ newline$ + + + "\ProvideTextCommandDefault{\cyrdash}{\iflanguage{russian}{\hbox to.8em{--\hss--}}{\textemdash}}" write$ newline$ + "\providecommand*{\BibDash}{\ifdim\lastskip>0pt\unskip\nobreak\hskip.2em plus 0.1em\fi" write$ newline$ + "\cyrdash\hskip.2em plus 0.1em\ignorespaces}" write$ newline$ + "\renewcommand{\newblock}{\ignorespaces}" write$ newline$ + preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} + +%%\endinput +%% +%% End of file `ugost2008.bst'.