diff options
Diffstat (limited to 'support/splint/examples/ld/ldlex.w')
-rw-r--r-- | support/splint/examples/ld/ldlex.w | 519 |
1 files changed, 278 insertions, 241 deletions
diff --git a/support/splint/examples/ld/ldlex.w b/support/splint/examples/ld/ldlex.w index 2312fd1027..0add0b0294 100644 --- a/support/splint/examples/ld/ldlex.w +++ b/support/splint/examples/ld/ldlex.w @@ -1,4 +1,4 @@ -@q Copyright 2012-2020 Alexander Shibakov@> +@q Copyright 2012-2022 Alexander Shibakov@> @q Copyright 2002-2014 Free Software Foundation, Inc.@> @q This file is part of SPLinT@> @@ -17,10 +17,10 @@ @** The lexer. \ifbootstrapmode - \input ldman.sty - \modebootstrap - \input dcols.sty - \setupfootnotes + \input limbo.sty + \input yystype.sty + \input grabstates.sty + \immediate\openout\stlist=ldl_states.h \def\MRI{} \def\ld{} \fi @@ -37,7 +37,7 @@ the \bison\ parser which is part of this distribution. %{@> @<\ld\ lexer \Cee\ preamble@> @=%} @> @<\ld\ lexer options@> @= %% - @> @<\ld\ token regular expressions@> @= + @> @<Regular expressions for \ld\ tokens@> @= %% @O void define_all_states( void ) { @@ -47,7 +47,7 @@ void define_all_states( void ) { @g @ @<\ld\ lexer options@>= -@G +@G(fs1) %option bison-bridge %option noyywrap nounput noinput reentrant %option noyy_top_state @@ -57,10 +57,10 @@ void define_all_states( void ) { @g @ @<\ld\ lexer \Cee\ preamble@>= -#include <stdint.h> -#include <stdbool.h> -@ @<Collect state definitions for the \ld\ lexer@>= +@ The file \.{ldl\_states.h} below contains the names of all the start +conditions@^start conditions@> (or states) collected by the bootstrap parser. +@<Collect state definitions for the \ld\ lexer@>= #define _register_name( name ) @[Define_State( #name, name )@] #include "ldl_states.h" #undef _register_name @@ -94,7 +94,7 @@ same section simplifies the job of the \locallink{bootstrapstates}bootstrap parser\endlink, as well. \ifbootstrapmode\immediate\openout\stlist=ldl_states.h\fi @<\ld\ lexer states@>= -@G +@G(fs1) %s SCRIPT %s EXPRESSION %s BOTH @@ -117,8 +117,9 @@ function. The typesetting parser uses the \.{\\ldcomment} macro for the same purpose. For the curious, here is a \flex\ style regular expression defining \Cee\ comments\footnote{Taken from W.~McKeeman's site at -\url{http://www.cs.dartmouth.edu/~mckeeman/cs118/assignments/comment.html} -and adapted to \flex\ syntax.}: +\url{http://www.cs.dartmouth.edu/~mckeeman/cs118/assignments/comment.html} and +adapted to \flex\ syntax. Here is the same regular expression pretty printed by +\splint: \flexrestyle{"/*"("/"`[\^*/]`"*"+[\^*/])*"*"+"/"}}: $$ \hbox{\.{"/*" ("/"\yl[\^*/]\yl"*"+[\^*/])* "*"+ "/"}} $$ @@ -193,6 +194,15 @@ possible, however, if \.{\\yylextail} is not used inside actions (in the case of an `optimized' lexer the restriction is even weaker, namely, \.{\\yylextail} merely has to be absent in the portion of the action following \.{\\ldcomment}). + +Another remark might be in order. It would seem more appropriate to +employ \TeX's native grouping mechanism to avoid the side effects +casued by the assignments performed by the macros (such as +\.{\\let\\oldyyreturn\\yyreturn}). While this is possible with some +careful macro writing, a na\:\i ve grouping attempt would interfere +with the assignments performed by \.{\\yymatch} +(e.g.~\.{\\yyresetstreams}). Avoiding assignments like these is still +possible although the effort required is bordering on excessive. @<Additional macros for the \ld\ lexer/parser@>= @G(t) \def\ldcomment#1\yylextail{% @@ -221,14 +231,24 @@ We would like to simulate the file inclusion by inserting the appropriate end of file marker for the lexer (a double \.{\\yyeof}). After the relevant production completes, the marker has to be cleaned up from the input stream (the lexer is designed to -leave it intact). The macros below are designed to handle this assignment. +leave it intact to be able to read the end of file multiple times +while looking for the longest match). + +The macro below is designed to handle this task. The idea is to replace +the double \.{\\yyeof} at the beginning of the input with an appropriate +lexer action. The \.{\\yyreadinput} handles the input buffer and inserts the +tail portion of the current \flex\ action in front of it. @<Additional macros for the \ld\ lexer/parser@>= @G(t) \def\ldcleanyyeof#1\yylextail{% - \let\oldyyinput\yyinput - \def\yyinput\yyeof\yyeof{\let\yyinput\oldyyinput#1\yylextail}% - \yymatch + \yyreadinput{\ldcl@@anyyeof{#1\yylextail}}{\romannumeral0\yyr@@@@dinput}% +} + +\def\ldcl@@anyyeof#1#2#3{% + #3\ldcl@@anyye@@f{#1}#2% } + +\def\ldcl@@anyye@@f#1#2\yyeof\yyeof{#1} @g @*1 Regular expressions. @@ -237,204 +257,166 @@ describe the {\it tokens\/} of the appropriate language. The variey of tokens recognized by \ld\ is quite extensive and is described in the sections that follow. -Variable names and algebraic operations come first. -@<\ld\ token regular expressions@>= +Variable names, constants, and algebraic operations come first. +@<Regular expressions for \ld\ tokens@>= @G(fs2) -<BOTH,SCRIPT,EXPRESSION,VERS_START,VERS_NODE,VERS_SCRIPT>"/*" {@> @[TeX_( "/ldcomment/yylexnext" );@]@=} -<DEFSYMEXP>"-" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<DEFSYMEXP>"+" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<DEFSYMEXP>{FILENAMECHAR1}{SYMBOLCHARN}* {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=} -<DEFSYMEXP>"=" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<MRI,EXPRESSION>"$"([0-9A-Fa-f])+ {@> @<Return an absolute hex constant@> @=} -<MRI,EXPRESSION>([0-9A-Fa-f])+(H|h|X|x|B|b|O|o|D|d) {@> @<Return a constant in a specific radix@>@=} -<SCRIPT,DEFSYMEXP,MRI,BOTH,EXPRESSION>((("$"|0[xX])([0-9A-Fa-f])+)|(([0-9])+))(M|K|m|k)? { - @> @<Return a constant with a multiplier@>@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"]" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"[" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"<<=" {@> @[TeX_( "/yylexreturnptr{LSHIFTEQ}" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>">>=" {@> @[TeX_( "/yylexreturnptr{RSHIFTEQ}" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"||" {@> @[TeX_( "/yylexreturnptr{OROR}" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"==" {@> @[TeX_( "/yylexreturnptr{EQ}" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"!=" {@> @[TeX_( "/yylexreturnptr{NE}" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>">=" {@> @[TeX_( "/yylexreturnptr{GE}" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"<=" {@> @[TeX_( "/yylexreturnptr{LE}" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"<<" {@> @[TeX_( "/yylexreturnptr{LSHIFT}" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>">>" {@> @[TeX_( "/yylexreturnptr{RSHIFT}" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"+=" {@> @[TeX_( "/yylexreturnptr{PLUSEQ}" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"-=" {@> @[TeX_( "/yylexreturnptr{MINUSEQ}" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"*=" {@> @[TeX_( "/yylexreturnptr{MULTEQ}" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"/=" {@> @[TeX_( "/yylexreturnptr{DIVEQ}" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"&=" {@> @[TeX_( "/yylexreturnptr{ANDEQ}" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"|=" {@> @[TeX_( "/yylexreturnptr{OREQ}" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"&&" {@> @[TeX_( "/yylexreturnptr{ANDAND}" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>">" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"," {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"&" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"|" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"~" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"!" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"?" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"*" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"+" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"-" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"/" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"%" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"<" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"=" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"}" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"{" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>")" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>"(" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>":" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<BOTH,SCRIPT,EXPRESSION,MRI>";" {@> @[TeX_( "/yylexreturnchar" );@]@=} +<BOTH,SCRIPT,EXPRESSION,VERS_START,VERS_NODE,VERS_SCRIPT>{ + "/*" {@> @[TeX_( "/ldcomment/yylexnext" );@]@=} +} + +<DEFSYMEXP>{ + "-" {@> @[TeX_( "/yylexreturnchar" );@]@=} + "+" {@> @[TeX_( "/yylexreturnchar" );@]@=} + {FILENAMECHAR1}{SYMBOLCHARN}* {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=} + "=" {@> @[TeX_( "/yylexreturnchar" );@]@=} +} + +<MRI,EXPRESSION>{ + "$"([0-9A-Fa-f])+ {@> @<Return an absolute hex constant@> @=} + ([0-9A-Fa-f])+(H|h|X|x|B|b|O|o|D|d) {@> @<Return a constant in a specific radix@>@=} +} + +<SCRIPT,DEFSYMEXP,MRI,BOTH,EXPRESSION>{ + ((("$"|0[xX])([0-9A-Fa-f])+)|(([0-9])+))(M|K|m|k)? {@> @<Return a constant with a multiplier@>@=} +} + +<BOTH,SCRIPT,EXPRESSION,MRI>{ + "<<=" {@> @[TeX_( "/yylexreturnptr{LSHIFTEQ}" );@]@=} + ">>=" {@> @[TeX_( "/yylexreturnptr{RSHIFTEQ}" );@]@=} + "||" {@> @[TeX_( "/yylexreturnptr{OROR}" );@]@=} + "==" {@> @[TeX_( "/yylexreturnptr{EQ}" );@]@=} + "!=" {@> @[TeX_( "/yylexreturnptr{NE}" );@]@=} + ">=" {@> @[TeX_( "/yylexreturnptr{GE}" );@]@=} + "<=" {@> @[TeX_( "/yylexreturnptr{LE}" );@]@=} + "<<" {@> @[TeX_( "/yylexreturnptr{LSHIFT}" );@]@=} + ">>" {@> @[TeX_( "/yylexreturnptr{RSHIFT}" );@]@=} + "+=" {@> @[TeX_( "/yylexreturnptr{PLUSEQ}" );@]@=} + "-=" {@> @[TeX_( "/yylexreturnptr{MINUSEQ}" );@]@=} + "*=" {@> @[TeX_( "/yylexreturnptr{MULTEQ}" );@]@=} + "/=" {@> @[TeX_( "/yylexreturnptr{DIVEQ}" );@]@=} + "&=" {@> @[TeX_( "/yylexreturnptr{ANDEQ}" );@]@=} + "|=" {@> @[TeX_( "/yylexreturnptr{OREQ}" );@]@=} + "&&" {@> @[TeX_( "/yylexreturnptr{ANDAND}" );@]@=} + [&|~!?*+\-/%=<>{}()\[\]:;,] {@> @[TeX_( "/yylexreturnchar" );@]@=} +} @g @ The bulk of tokens produced by the lexer are the keywords used inside script files. File name syntax is listed as well, along with -miscellanea such as whitespace and version symbols. -@<\ld\ token regular expressions@>= +the miscellanea like whitespace and version symbols. +@<Regular expressions for \ld\ tokens@>= @G(fs2) -<BOTH,SCRIPT>"MEMORY" {@> @[TeX_( "/yylexreturnptr{MEMORY}" );@]@=} -<BOTH,SCRIPT>"REGION_ALIAS" {@> @[TeX_( "/yylexreturnptr{REGION_ALIAS}" );@]@=} -<BOTH,SCRIPT>"LD_FEATURE" {@> @[TeX_( "/yylexreturnptr{LD_FEATURE}" );@]@=} -<BOTH,SCRIPT,EXPRESSION>"ORIGIN" {@> @[TeX_( "/yylexreturnptr{ORIGIN}" );@]@=} -<BOTH,SCRIPT>"VERSION" {@> @[TeX_( "/yylexreturnptr{VERSIONK}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"BLOCK" {@> @[TeX_( "/yylexreturnptr{BLOCK}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"BIND" {@> @[TeX_( "/yylexreturnptr{BIND}" );@]@=} -<BOTH,SCRIPT,EXPRESSION>"LENGTH" {@> @[TeX_( "/yylexreturnptr{LENGTH}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"ALIGN" {@> @[TeX_( "/yylexreturnptr{ALIGN_K}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"DATA_SEGMENT_ALIGN" {@> @[TeX_( "/yylexreturnptr{DATA_SEGMENT_ALIGN}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"DATA_SEGMENT_RELRO_END" {@> @[TeX_( "/yylexreturnptr{DATA_SEGMENT_RELRO_END}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"DATA_SEGMENT_END" {@> @[TeX_( "/yylexreturnptr{DATA_SEGMENT_END}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"ADDR" {@> @[TeX_( "/yylexreturnptr{ADDR}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"LOADADDR" {@> @[TeX_( "/yylexreturnptr{LOADADDR}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"ALIGNOF" {@> @[TeX_( "/yylexreturnptr{ALIGNOF}" );@]@=} -<EXPRESSION,BOTH>"MAX" {@> @[TeX_( "/yylexreturnptr{MAX_K}" );@]@=} -<EXPRESSION,BOTH>"MIN" {@> @[TeX_( "/yylexreturnptr{MIN_K}" );@]@=} -<EXPRESSION,BOTH>"LOG2CEIL" {@> @[TeX_( "/yylexreturnptr{LOG2CEIL}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"ASSERT" {@> @[TeX_( "/yylexreturnptr{ASSERT_K}" );@]@=} -<BOTH,SCRIPT>"ENTRY" {@> @[TeX_( "/yylexreturnptr{ENTRY}" );@]@=} -<BOTH,SCRIPT,MRI>"EXTERN" {@> @[TeX_( "/yylexreturnptr{EXTERN}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"NEXT" {@> @[TeX_( "/yylexreturnptr{NEXT}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"sizeof_headers" {@> @[TeX_( "/yylexreturnptr{SIZEOF_HEADERS}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"SIZEOF_HEADERS" {@> @[TeX_( "/yylexreturnptr{SIZEOF_HEADERS}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"SEGMENT_START" {@> @[TeX_( "/yylexreturnptr{SEGMENT_START}" );@]@=} -<BOTH,SCRIPT>"MAP" {@> @[TeX_( "/yylexreturnptr{MAP}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"SIZEOF" {@> @[TeX_( "/yylexreturnptr{SIZEOF}" );@]@=} -<BOTH,SCRIPT>"TARGET" {@> @[TeX_( "/yylexreturnptr{TARGET_K}" );@]@=} -<BOTH,SCRIPT>"SEARCH_DIR" {@> @[TeX_( "/yylexreturnptr{SEARCH_DIR}" );@]@=} -<BOTH,SCRIPT>"OUTPUT" {@> @[TeX_( "/yylexreturnptr{OUTPUT}" );@]@=} -<BOTH,SCRIPT>"INPUT" {@> @[TeX_( "/yylexreturnptr{INPUT}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"GROUP" {@> @[TeX_( "/yylexreturnptr{GROUP}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"AS_NEEDED" {@> @[TeX_( "/yylexreturnptr{AS_NEEDED}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"DEFINED" {@> @[TeX_( "/yylexreturnptr{DEFINED}" );@]@=} -<BOTH,SCRIPT>"CREATE_OBJECT_SYMBOLS" {@> @[TeX_( "/yylexreturnptr{CREATE_OBJECT_SYMBOLS}" );@]@=} -<BOTH,SCRIPT>"CONSTRUCTORS" {@> @[TeX_( "/yylexreturnptr{CONSTRUCTORS}" );@]@=} -<BOTH,SCRIPT>"FORCE_COMMON_ALLOCATION" {@> @[TeX_( "/yylexreturnptr{FORCE_COMMON_ALLOCATION}" );@]@=} -<BOTH,SCRIPT>"INHIBIT_COMMON_ALLOCATION" {@> @[TeX_( "/yylexreturnptr{INHIBIT_COMMON_ALLOCATION}" );@]@=} -<BOTH,SCRIPT>"SECTIONS" {@> @[TeX_( "/yylexreturnptr{SECTIONS}" );@]@=} -<BOTH,SCRIPT>"INSERT" {@> @[TeX_( "/yylexreturnptr{INSERT_K}" );@]@=} -<BOTH,SCRIPT>"AFTER" {@> @[TeX_( "/yylexreturnptr{AFTER}" );@]@=} -<BOTH,SCRIPT>"BEFORE" {@> @[TeX_( "/yylexreturnptr{BEFORE}" );@]@=} -<BOTH,SCRIPT>"FILL" {@> @[TeX_( "/yylexreturnptr{FILL}" );@]@=} -<BOTH,SCRIPT>"STARTUP" {@> @[TeX_( "/yylexreturnptr{STARTUP}" );@]@=} -<BOTH,SCRIPT>"OUTPUT_FORMAT" {@> @[TeX_( "/yylexreturnptr{OUTPUT_FORMAT}" );@]@=} -<BOTH,SCRIPT>"OUTPUT_ARCH" {@> @[TeX_( "/yylexreturnptr{OUTPUT_ARCH}" );@]@=} -<BOTH,SCRIPT>"HLL" {@> @[TeX_( "/yylexreturnptr{HLL}" );@]@=} -<BOTH,SCRIPT>"SYSLIB" {@> @[TeX_( "/yylexreturnptr{SYSLIB}" );@]@=} -<BOTH,SCRIPT>"FLOAT" {@> @[TeX_( "/yylexreturnptr{FLOAT}" );@]@=} -<BOTH,SCRIPT>"QUAD" {@> @[TeX_( "/yylexreturnptr{QUAD}" );@]@=} -<BOTH,SCRIPT>"SQUAD" {@> @[TeX_( "/yylexreturnptr{SQUAD}" );@]@=} -<BOTH,SCRIPT>"LONG" {@> @[TeX_( "/yylexreturnptr{LONG}" );@]@=} -<BOTH,SCRIPT>"SHORT" {@> @[TeX_( "/yylexreturnptr{SHORT}" );@]@=} -<BOTH,SCRIPT>"BYTE" {@> @[TeX_( "/yylexreturnptr{BYTE}" );@]@=} -<BOTH,SCRIPT>"NOFLOAT" {@> @[TeX_( "/yylexreturnptr{NOFLOAT}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"NOCROSSREFS" {@> @[TeX_( "/yylexreturnptr{NOCROSSREFS}" );@]@=} -<BOTH,SCRIPT>"OVERLAY" {@> @[TeX_( "/yylexreturnptr{OVERLAY}" );@]@=} -<BOTH,SCRIPT>"SORT_BY_NAME" {@> @[TeX_( "/yylexreturnptr{SORT_BY_NAME}" );@]@=} -<BOTH,SCRIPT>"SORT_BY_ALIGNMENT" {@> @[TeX_( "/yylexreturnptr{SORT_BY_ALIGNMENT}" );@]@=} -<BOTH,SCRIPT>"SORT" {@> @[TeX_( "/yylexreturnptr{SORT_BY_NAME}" );@]@=} -<BOTH,SCRIPT>"SORT_BY_INIT_PRIORITY" {@> @[TeX_( "/yylexreturnptr{SORT_BY_INIT_PRIORITY}" );@]@=} -<BOTH,SCRIPT>"SORT_NONE" {@> @[TeX_( "/yylexreturnptr{SORT_NONE}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"NOLOAD" {@> @[TeX_( "/yylexreturnptr{NOLOAD}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"DSECT" {@> @[TeX_( "/yylexreturnptr{DSECT}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"COPY" {@> @[TeX_( "/yylexreturnptr{COPY}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"INFO" {@> @[TeX_( "/yylexreturnptr{INFO}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"OVERLAY" {@> @[TeX_( "/yylexreturnptr{OVERLAY}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"ONLY_IF_RO" {@> @[TeX_( "/yylexreturnptr{ONLY_IF_RO}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"ONLY_IF_RW" {@> @[TeX_( "/yylexreturnptr{ONLY_IF_RW}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"SPECIAL" {@> @[TeX_( "/yylexreturnptr{SPECIAL}" );@]@=} -<BOTH,SCRIPT>"o" {@> @[TeX_( "/yylexreturnptr{ORIGIN}" );@]@=} -<BOTH,SCRIPT>"org" {@> @[TeX_( "/yylexreturnptr{ORIGIN}" );@]@=} -<BOTH,SCRIPT>"l" {@> @[TeX_( "/yylexreturnptr{LENGTH}" );@]@=} -<BOTH,SCRIPT>"len" {@> @[TeX_( "/yylexreturnptr{LENGTH}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"INPUT_SECTION_FLAGS" {@> @[TeX_( "/yylexreturnptr{INPUT_SECTION_FLAGS}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"INCLUDE" {@> @[TeX_( "/yylexreturnptr{INCLUDE}" );@]@=} -<BOTH,SCRIPT>"PHDRS" {@> @[TeX_( "/yylexreturnptr{PHDRS}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"AT" {@> @[TeX_( "/yylexreturnptr{AT}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"ALIGN_WITH_INPUT" {@> @[TeX_( "/yylexreturnptr{ALIGN_WITH_INPUT}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"SUBALIGN" {@> @[TeX_( "/yylexreturnptr{SUBALIGN}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"HIDDEN" {@> @[TeX_( "/yylexreturnptr{HIDDEN}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"PROVIDE" {@> @[TeX_( "/yylexreturnptr{PROVIDE}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"PROVIDE_HIDDEN" {@> @[TeX_( "/yylexreturnptr{PROVIDE_HIDDEN}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"KEEP" {@> @[TeX_( "/yylexreturnptr{KEEP}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"EXCLUDE_FILE" {@> @[TeX_( "/yylexreturnptr{EXCLUDE_FILE}" );@]@=} -<EXPRESSION,BOTH,SCRIPT>"CONSTANT" {@> @[TeX_( "/yylexreturnptr{CONSTANT}" );@]@=} -<MRI>"#".*\n? {@> @[TeX_( "/yylexnext" );@]@=} -<MRI>"\n" {@> @[TeX_( "/yylexreturnptr{NEWLINE}" );@]@=} -<MRI>"*".* {@> @[TeX_( "/yylexnext" );@]@=} -<MRI>";".* {@> @[TeX_( "/yylexnext" );@]@=} -<MRI>"END" {@> @[TeX_( "/yylexreturnptr{ENDWORD}" );@]@=} -<MRI>"ALIGNMOD" {@> @[TeX_( "/yylexreturnptr{ALIGNMOD}" );@]@=} -<MRI>"ALIGN" {@> @[TeX_( "/yylexreturnptr{ALIGN_K}" );@]@=} -<MRI>"CHIP" {@> @[TeX_( "/yylexreturnptr{CHIP}" );@]@=} -<MRI>"BASE" {@> @[TeX_( "/yylexreturnptr{BASE}" );@]@=} -<MRI>"ALIAS" {@> @[TeX_( "/yylexreturnptr{ALIAS}" );@]@=} -<MRI>"TRUNCATE" {@> @[TeX_( "/yylexreturnptr{TRUNCATE}" );@]@=} -<MRI>"LOAD" {@> @[TeX_( "/yylexreturnptr{LOAD}" );@]@=} -<MRI>"PUBLIC" {@> @[TeX_( "/yylexreturnptr{PUBLIC}" );@]@=} -<MRI>"ORDER" {@> @[TeX_( "/yylexreturnptr{ORDER}" );@]@=} -<MRI>"NAME" {@> @[TeX_( "/yylexreturnptr{NAMEWORD}" );@]@=} -<MRI>"FORMAT" {@> @[TeX_( "/yylexreturnptr{FORMAT}" );@]@=} -<MRI>"CASE" {@> @[TeX_( "/yylexreturnptr{CASE}" );@]@=} -<MRI>"START" {@> @[TeX_( "/yylexreturnptr{START}" );@]@=} -<MRI>"LIST".* {@> @[TeX_( "/yylexreturnptr{LIST}" );@]@=} -<MRI>"SECT" {@> @[TeX_( "/yylexreturnptr{SECT}" );@]@=} -<EXPRESSION,BOTH,SCRIPT,MRI>"ABSOLUTE" {@> @[TeX_( "/yylexreturnptr{ABSOLUTE}" );@]@=} -<MRI>"end" {@> @[TeX_( "/yylexreturnptr{ENDWORD}" );@]@=} -<MRI>"alignmod" {@> @[TeX_( "/yylexreturnptr{ALIGNMOD}" );@]@=} -<MRI>"align" {@> @[TeX_( "/yylexreturnptr{ALIGN_K}" );@]@=} -<MRI>"chip" {@> @[TeX_( "/yylexreturnptr{CHIP}" );@]@=} -<MRI>"base" {@> @[TeX_( "/yylexreturnptr{BASE}" );@]@=} -<MRI>"alias" {@> @[TeX_( "/yylexreturnptr{ALIAS}" );@]@=} -<MRI>"truncate" {@> @[TeX_( "/yylexreturnptr{TRUNCATE}" );@]@=} -<MRI>"load" {@> @[TeX_( "/yylexreturnptr{LOAD}" );@]@=} -<MRI>"public" {@> @[TeX_( "/yylexreturnptr{PUBLIC}" );@]@=} -<MRI>"order" {@> @[TeX_( "/yylexreturnptr{ORDER}" );@]@=} -<MRI>"name" {@> @[TeX_( "/yylexreturnptr{NAMEWORD}" );@]@=} -<MRI>"format" {@> @[TeX_( "/yylexreturnptr{FORMAT}" );@]@=} -<MRI>"case" {@> @[TeX_( "/yylexreturnptr{CASE}" );@]@=} -<MRI>"extern" {@> @[TeX_( "/yylexreturnptr{EXTERN}" );@]@=} -<MRI>"start" {@> @[TeX_( "/yylexreturnptr{START}" );@]@=} -<MRI>"list".* {@> @[TeX_( "/yylexreturnptr{LIST}" );@]@=} -<MRI>"sect" {@> @[TeX_( "/yylexreturnptr{SECT}" );@]@=} -<EXPRESSION,BOTH,SCRIPT,MRI>"absolute" {@> @[TeX_( "/yylexreturnptr{ABSOLUTE}" );@]@=} -<MRI>{FILENAMECHAR1}{NOCFILENAMECHAR}* {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=} -<BOTH>{FILENAMECHAR1}{FILENAMECHAR}* {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=} -<BOTH>"-l"{FILENAMECHAR}+ {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=} -<EXPRESSION>{FILENAMECHAR1}{NOCFILENAMECHAR}* {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=} -<EXPRESSION>"-l"{NOCFILENAMECHAR}+ {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=} +<BOTH,SCRIPT>{ + "MEMORY" {@> @[TeX_( "/yylexreturnptr{MEMORY}" );@]@=} + "REGION_ALIAS" {@> @[TeX_( "/yylexreturnptr{REGION_ALIAS}" );@]@=} + "LD_FEATURE" {@> @[TeX_( "/yylexreturnptr{LD_FEATURE}" );@]@=} + "VERSION" {@> @[TeX_( "/yylexreturnptr{VERSIONK}" );@]@=} + "TARGET" {@> @[TeX_( "/yylexreturnptr{TARGET_K}" );@]@=} + "SEARCH_DIR" {@> @[TeX_( "/yylexreturnptr{SEARCH_DIR}" );@]@=} + "OUTPUT" {@> @[TeX_( "/yylexreturnptr{OUTPUT}" );@]@=} + "INPUT" {@> @[TeX_( "/yylexreturnptr{INPUT}" );@]@=} + "ENTRY" {@> @[TeX_( "/yylexreturnptr{ENTRY}" );@]@=} + "MAP" {@> @[TeX_( "/yylexreturnptr{MAP}" );@]@=} + "CREATE_OBJECT_SYMBOLS" {@> @[TeX_( "/yylexreturnptr{CREATE_OBJECT_SYMBOLS}" );@]@=} + "CONSTRUCTORS" {@> @[TeX_( "/yylexreturnptr{CONSTRUCTORS}" );@]@=} + "FORCE_COMMON_ALLOCATION" {@> @[TeX_( "/yylexreturnptr{FORCE_COMMON_ALLOCATION}" );@]@=} + "INHIBIT_COMMON_ALLOCATION" {@> @[TeX_( "/yylexreturnptr{INHIBIT_COMMON_ALLOCATION}" );@]@=} + "SECTIONS" {@> @[TeX_( "/yylexreturnptr{SECTIONS}" );@]@=} + "INSERT" {@> @[TeX_( "/yylexreturnptr{INSERT_K}" );@]@=} + "AFTER" {@> @[TeX_( "/yylexreturnptr{AFTER}" );@]@=} + "BEFORE" {@> @[TeX_( "/yylexreturnptr{BEFORE}" );@]@=} + "FILL" {@> @[TeX_( "/yylexreturnptr{FILL}" );@]@=} + "STARTUP" {@> @[TeX_( "/yylexreturnptr{STARTUP}" );@]@=} + "OUTPUT_FORMAT" {@> @[TeX_( "/yylexreturnptr{OUTPUT_FORMAT}" );@]@=} + "OUTPUT_ARCH" {@> @[TeX_( "/yylexreturnptr{OUTPUT_ARCH}" );@]@=} + "HLL" {@> @[TeX_( "/yylexreturnptr{HLL}" );@]@=} + "SYSLIB" {@> @[TeX_( "/yylexreturnptr{SYSLIB}" );@]@=} + "FLOAT" {@> @[TeX_( "/yylexreturnptr{FLOAT}" );@]@=} + "QUAD" {@> @[TeX_( "/yylexreturnptr{QUAD}" );@]@=} + "SQUAD" {@> @[TeX_( "/yylexreturnptr{SQUAD}" );@]@=} + "LONG" {@> @[TeX_( "/yylexreturnptr{LONG}" );@]@=} + "SHORT" {@> @[TeX_( "/yylexreturnptr{SHORT}" );@]@=} + "BYTE" {@> @[TeX_( "/yylexreturnptr{BYTE}" );@]@=} + "NOFLOAT" {@> @[TeX_( "/yylexreturnptr{NOFLOAT}" );@]@=} + "OVERLAY" {@> @[TeX_( "/yylexreturnptr{OVERLAY}" );@]@=} + "SORT_BY_NAME" {@> @[TeX_( "/yylexreturnptr{SORT_BY_NAME}" );@]@=} + "SORT_BY_ALIGNMENT" {@> @[TeX_( "/yylexreturnptr{SORT_BY_ALIGNMENT}" );@]@=} + "SORT" {@> @[TeX_( "/yylexreturnptr{SORT_BY_NAME}" );@]@=} + "SORT_BY_INIT_PRIORITY" {@> @[TeX_( "/yylexreturnptr{SORT_BY_INIT_PRIORITY}" );@]@=} + "SORT_NONE" {@> @[TeX_( "/yylexreturnptr{SORT_NONE}" );@]@=} + "EXTERN" {@> @[TeX_( "/yylexreturnptr{EXTERN}" );@]@=} + "o"|"org" {@> @[TeX_( "/yylexreturnptr{ORIGIN}" );@]@=} + "l"|"len" {@> @[TeX_( "/yylexreturnptr{LENGTH}" );@]@=} + "PHDRS" {@> @[TeX_( "/yylexreturnptr{PHDRS}" );@]@=} +} + +<EXPRESSION,BOTH,SCRIPT>{ + "BLOCK" {@> @[TeX_( "/yylexreturnptr{BLOCK}" );@]@=} + "BIND" {@> @[TeX_( "/yylexreturnptr{BIND}" );@]@=} + "LENGTH" {@> @[TeX_( "/yylexreturnptr{LENGTH}" );@]@=} + "ORIGIN" {@> @[TeX_( "/yylexreturnptr{ORIGIN}" );@]@=} + "ALIGN" {@> @[TeX_( "/yylexreturnptr{ALIGN_K}" );@]@=} + "DATA_SEGMENT_ALIGN" {@> @[TeX_( "/yylexreturnptr{DATA_SEGMENT_ALIGN}" );@]@=} + "DATA_SEGMENT_RELRO_END" {@> @[TeX_( "/yylexreturnptr{DATA_SEGMENT_RELRO_END}" );@]@=} + "DATA_SEGMENT_END" {@> @[TeX_( "/yylexreturnptr{DATA_SEGMENT_END}" );@]@=} + "ADDR" {@> @[TeX_( "/yylexreturnptr{ADDR}" );@]@=} + "LOADADDR" {@> @[TeX_( "/yylexreturnptr{LOADADDR}" );@]@=} + "ALIGNOF" {@> @[TeX_( "/yylexreturnptr{ALIGNOF}" );@]@=} + "ASSERT" {@> @[TeX_( "/yylexreturnptr{ASSERT_K}" );@]@=} + "NEXT" {@> @[TeX_( "/yylexreturnptr{NEXT}" );@]@=} + "sizeof_headers" {@> @[TeX_( "/yylexreturnptr{SIZEOF_HEADERS}" );@]@=} + "SIZEOF_HEADERS" {@> @[TeX_( "/yylexreturnptr{SIZEOF_HEADERS}" );@]@=} + "SEGMENT_START" {@> @[TeX_( "/yylexreturnptr{SEGMENT_START}" );@]@=} + "SIZEOF" {@> @[TeX_( "/yylexreturnptr{SIZEOF}" );@]@=} + "GROUP" {@> @[TeX_( "/yylexreturnptr{GROUP}" );@]@=} + "AS_NEEDED" {@> @[TeX_( "/yylexreturnptr{AS_NEEDED}" );@]@=} + "DEFINED" {@> @[TeX_( "/yylexreturnptr{DEFINED}" );@]@=} + "NOCROSSREFS" {@> @[TeX_( "/yylexreturnptr{NOCROSSREFS}" );@]@=} + "NOLOAD" {@> @[TeX_( "/yylexreturnptr{NOLOAD}" );@]@=} + "DSECT" {@> @[TeX_( "/yylexreturnptr{DSECT}" );@]@=} + "COPY" {@> @[TeX_( "/yylexreturnptr{COPY}" );@]@=} + "INFO" {@> @[TeX_( "/yylexreturnptr{INFO}" );@]@=} + "OVERLAY" {@> @[TeX_( "/yylexreturnptr{OVERLAY}" );@]@=} + "ONLY_IF_RO" {@> @[TeX_( "/yylexreturnptr{ONLY_IF_RO}" );@]@=} + "ONLY_IF_RW" {@> @[TeX_( "/yylexreturnptr{ONLY_IF_RW}" );@]@=} + "SPECIAL" {@> @[TeX_( "/yylexreturnptr{SPECIAL}" );@]@=} + "INPUT_SECTION_FLAGS" {@> @[TeX_( "/yylexreturnptr{INPUT_SECTION_FLAGS}" );@]@=} + "INCLUDE" {@> @[TeX_( "/yylexreturnptr{INCLUDE}" );@]@=} + "AT" {@> @[TeX_( "/yylexreturnptr{AT}" );@]@=} + "ALIGN_WITH_INPUT" {@> @[TeX_( "/yylexreturnptr{ALIGN_WITH_INPUT}" );@]@=} + "SUBALIGN" {@> @[TeX_( "/yylexreturnptr{SUBALIGN}" );@]@=} + "HIDDEN" {@> @[TeX_( "/yylexreturnptr{HIDDEN}" );@]@=} + "PROVIDE" {@> @[TeX_( "/yylexreturnptr{PROVIDE}" );@]@=} + "PROVIDE_HIDDEN" {@> @[TeX_( "/yylexreturnptr{PROVIDE_HIDDEN}" );@]@=} + "KEEP" {@> @[TeX_( "/yylexreturnptr{KEEP}" );@]@=} + "EXCLUDE_FILE" {@> @[TeX_( "/yylexreturnptr{EXCLUDE_FILE}" );@]@=} + "CONSTANT" {@> @[TeX_( "/yylexreturnptr{CONSTANT}" );@]@=} + "\n" {@> @[TeX_( "/yylexnext" );@]@=} +} + +<EXPRESSION,BOTH>{ + "MAX" {@> @[TeX_( "/yylexreturnptr{MAX_K}" );@]@=} + "MIN" {@> @[TeX_( "/yylexreturnptr{MIN_K}" );@]@=} + "LOG2CEIL" {@> @[TeX_( "/yylexreturnptr{LOG2CEIL}" );@]@=} +} + +<EXPRESSION,BOTH,SCRIPT,MRI>{ + "ABSOLUTE"|"absolute" {@> @[TeX_( "/yylexreturnptr{ABSOLUTE}" );@]@=} + [ \t\r]+ {@> @[TeX_( "/yylexnext" );@]@=} +} + +<BOTH>{ + {FILENAMECHAR1}{FILENAMECHAR}* {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=} + "-l"{FILENAMECHAR}+ {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=} +} + +<EXPRESSION>{ + {FILENAMECHAR1}{NOCFILENAMECHAR}* {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=} + "-l"{NOCFILENAMECHAR}+ {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=} +} + <SCRIPT>{WILDCHAR}* {@> @[@<Skip a possible comment and return a \prodstyle{NAME}@>@]@=} <EXPRESSION,BOTH,SCRIPT,VERS_NODE>"\""[^\"]*"\"" {@> @[@<Return the \prodstyle{NAME} inside quotes@>@]@=} -<BOTH,SCRIPT,EXPRESSION>"\n" {@> @[TeX_( "/yylexnext" );@]@=} -<MRI,BOTH,SCRIPT,EXPRESSION>[ \t\r]+ {@> @[TeX_( "/yylexnext" );@]@=} -<VERS_NODE,VERS_SCRIPT>[:,;] {@> @[TeX_( "/yylexreturnchar" );@]@=} -<VERS_NODE>global {@> @[TeX_( "/yylexreturnptr{GLOBAL}" );@]@=} -<VERS_NODE>local {@> @[TeX_( "/yylexreturnptr{LOCAL}" );@]@=} -<VERS_NODE>extern {@> @[TeX_( "/yylexreturnptr{EXTERN}" );@]@=} -<VERS_NODE>{V_IDENTIFIER} {@> @[TeX_( "/yylexreturnval{VERS_IDENTIFIER}" );@]@=} -<VERS_SCRIPT>{V_TAG} {@> @[TeX_( "/yylexreturnval{VERS_TAG}" );@]@=} -<VERS_START>"{" {@> @[TeX_( "/yyBEGIN{VERS_SCRIPT}/yylexreturnchar" );@]@=} @g @ There is a bit of a trick to returning an absolute hex value. The @@ -455,23 +437,6 @@ macros are looking for a \.{\$} suffix while the contents of @[TeX_( "{/the/yyfmark}{/the/yysmark}}}/next" );@]@; @[TeX_( "/yylexreturn{INT}" );@]@; -@ @<Additional macros for the \ld\ lexer/parser@>= -@G(t) -@=\def\matchcomment@@#1/*#2\yyeof#3#4{%@>@; - \yystringempty{#1}{#3}{#4}% -} -\def\matchcomment#1{% -@= \expandafter\matchcomment@@\the#1/*\yyeof@>@; -} -\def\ldstripquotes@@"#1"\yyeof{#1} -\def\ldstripquotes#1{% - \yytext\expandafter\expandafter\expandafter - {\expandafter\ldstripquotes@@\the\yytext\yyeof}% - \yytextpure\expandafter\expandafter\expandafter - {\expandafter\ldstripquotes@@\the\yytextpure\yyeof}% -} -@g - @ {\it Annoyingly, this pattern can match comments, and we have longest match issues to consider. So if the first two characters are a comment opening, put the input back and @@ -485,31 +450,103 @@ try again.} @<Return the \prodstyle{NAME} inside quotes@>= @[TeX_( "/ldstripquotes/yylexreturnsym{NAME}" );@]@; -@ @<Additional macros for the \ld\ lexer/parser@>= +@ Some syntax specific to version scripts. +@<Regular expressions for \ld\ tokens@>= +@G(fs2) +<VERS_SCRIPT>{ + "{" {@> @[TeX_( "/yyBEGIN{VERS_NODE}/versnodenesting=/z@@/yylexreturnchar" );@]@=} + "}" {@> @[TeX_( "/yylexreturnchar" );@]@=} + {V_TAG} {@> @[TeX_( "/yylexreturnval{VERS_TAG}" );@]@=} +} + +<VERS_NODE>{ + global {@> @[TeX_( "/yylexreturnptr{GLOBAL}" );@]@=} + local {@> @[TeX_( "/yylexreturnptr{LOCAL}" );@]@=} + extern {@> @[TeX_( "/yylexreturnptr{EXTERN}" );@]@=} + {V_IDENTIFIER} {@> @[TeX_( "/yylexreturnval{VERS_IDENTIFIER}" );@]@=} + "{" {@> @[TeX_( "/advance/versnodenesting/@@ne /yylexreturnchar" );@]@=} + "}" {@> @<Finish the current group, possibly switch to \flexsnstyle{VERS_SCRIPT}@> @=} +} + +<VERS_NODE,VERS_SCRIPT>[:,;] {@> @[TeX_( "/yylexreturnchar" );@]@=} +<VERS_START>"{" {@> @[TeX_( "/yyBEGIN{VERS_SCRIPT}/yylexreturnchar" );@]@=} + +<VERS_START,VERS_NODE,VERS_SCRIPT>{ + [\n] {@> @[TeX_( "/yylexnext" );@]@=} + #.* {@> @[TeX_( "/yylexnext" );@]@=} + [ \t\r]+ {@> @[TeX_( "/yylexnext" );@]@=} +} +@g + +@ @<Finish the current group, possibly switch to \flexsnstyle{VERS_SCRIPT}@>= + @[TeX_( "/advance/versnodenesting/m@@ne" );@]@; + @[TeX_( "/ifnum/versnodenesting</z@@" );@]@; + @[TeX_( " /yyBEGIN{VERS_SCRIPT}" );@]@; + @[TeX_( "/fi" );@]@; + @[TeX_( "/yylexreturnchar" );@]@; + +@ Some syntax specific to \MRI\ scripts. +@<Regular expressions for \ld\ tokens@>= +@G(fs2) +<MRI>{ + "#".*\n? {@> @[TeX_( "/yylexnext" );@]@=} + "\n" {@> @[TeX_( "/yylexreturnptr{NEWLINE}" );@]@=} + "*".* {@> @[TeX_( "/yylexnext" );@]@=} + ";".* {@> @[TeX_( "/yylexnext" );@]@=} + "END"|"end" {@> @[TeX_( "/yylexreturnptr{ENDWORD}" );@]@=} + "ALIGNMOD"|"alignmod" {@> @[TeX_( "/yylexreturnptr{ALIGNMOD}" );@]@=} + "ALIGN"|"align" {@> @[TeX_( "/yylexreturnptr{ALIGN_K}" );@]@=} + "CHIP"|"chip" {@> @[TeX_( "/yylexreturnptr{CHIP}" );@]@=} + "BASE"|"base" {@> @[TeX_( "/yylexreturnptr{BASE}" );@]@=} + "ALIAS"|"alias" {@> @[TeX_( "/yylexreturnptr{ALIAS}" );@]@=} + "TRUNCATE"|"truncate" {@> @[TeX_( "/yylexreturnptr{TRUNCATE}" );@]@=} + "LOAD"|"load" {@> @[TeX_( "/yylexreturnptr{LOAD}" );@]@=} + "PUBLIC"|"public" {@> @[TeX_( "/yylexreturnptr{PUBLIC}" );@]@=} + "ORDER"|"order" {@> @[TeX_( "/yylexreturnptr{ORDER}" );@]@=} + "NAME"|"name" {@> @[TeX_( "/yylexreturnptr{NAMEWORD}" );@]@=} + "FORMAT"|"format" {@> @[TeX_( "/yylexreturnptr{FORMAT}" );@]@=} + "CASE"|"case" {@> @[TeX_( "/yylexreturnptr{CASE}" );@]@=} + "START"|"start" {@> @[TeX_( "/yylexreturnptr{START}" );@]@=} + ("LIST"|"list").* {@> @[TeX_( "/yylexreturnptr{LIST}" );@]@=} + "SECT"|"sect" {@> @[TeX_( "/yylexreturnptr{SECT}" );@]@=} + "EXTERN"|"extern" {@> @[TeX_( "/yylexreturnptr{EXTERN}" );@]@=} + {FILENAMECHAR1}{NOCFILENAMECHAR}* {@> @[TeX_( "/yylexreturnsym{NAME}" );@]@=} +} +@g + +@ The macros and the register definitions used to implement the actions above have been collected in this +section. +@<Additional macros for the \ld\ lexer/parser@>= @G(t) \newcount\versnodenesting \newcount\includestackptr + +\def\matchcomment#1{% +@= \expandafter\matchcomment@@\the#1/*\yyeof@>@; +} + +@=\def\matchcomment@@#1/*#2\yyeof#3#4{%@>@; + \yystringempty{#1}{#3}{#4}% +} + +\def\ldstripquotes#1{% + \yytext\expandafter\expandafter\expandafter + {\expandafter\ldstripquotes@@\the\yytext\yyeof}% + \yytextpure\expandafter\expandafter\expandafter + {\expandafter\ldstripquotes@@\the\yytextpure\yyeof}% +} + +\def\ldstripquotes@@"#1"\yyeof{#1} @g -@ Some syntax specific to version scripts. -@<\ld\ token regular expressions@>= +@ Catchall actions. These react to unexpected characters with (somewhat misleading) error messages. The placement +of these rules is important, since they may match a token of the same length defined earlier. +@<Regular expressions for \ld\ tokens@>= @G(fs2) -<VERS_SCRIPT>"{" {@> @[TeX_( "/yyBEGIN{VERS_NODE}/versnodenesting=/z@@/yylexreturnchar" );@]@=} -<VERS_SCRIPT>"}" {@> @[TeX_( "/yylexreturnchar" );@]@=} -<VERS_NODE>"{" {@> @[TeX_( "/advance/versnodenesting/@@ne /yylexreturnchar" );@]@=} -<VERS_NODE>"}" {@> @[TeX_( "/advance/versnodenesting/m@@ne" );@]@= - @> @[TeX_( "/ifnum/versnodenesting</z@@" );@]@= - @> @[TeX_( " /yyBEGIN{VERS_SCRIPT}" );@]@= - @> @[TeX_( "/fi" );@]@= - @> @[TeX_( "/yylexreturnchar" );@]@=} -<VERS_START,VERS_NODE,VERS_SCRIPT>[\n] {@> @[TeX_( "/yylexnext" );@]@=} -<VERS_START,VERS_NODE,VERS_SCRIPT>#.* {@> @[TeX_( "/yylexnext" );@]@=} -<VERS_START,VERS_NODE,VERS_SCRIPT>[ \t\r]+ {@> @[TeX_( "/yylexnext" );@]@=} +<SCRIPT,MRI,VERS_START,VERS_SCRIPT,VERS_NODE>. {@> @[TeX_( "/yyfatal{bad character `/the/yytext' in script}" );@]@=} +<EXPRESSION,DEFSYMEXP,BOTH>. {@> @[TeX_( "/yyfatal{bad character `/the/yytext' in expression}" );@]@=} <<EOF>> {@> @[@<Process the end of (possibly included) file@>@]@=} - -<SCRIPT,MRI,VERS_START,VERS_SCRIPT,VERS_NODE>. {@> @[TeX_( "/yyfatal{bad character `/the/yytext' in script}" );@]@=} -<EXPRESSION,DEFSYMEXP,BOTH>. {@> @[TeX_( "/yyfatal{bad character `/the/yytext' in expression}" );@]@=} @g @ @<Process the end of (possibly included) file@>= |