Compare commits

..

No commits in common. "master" and "v2.6.1" have entirely different histories.

245 changed files with 36596 additions and 32568 deletions

View File

@ -1,15 +0,0 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
groups:
github-actions:
patterns:
- "*"

View File

@ -1,31 +0,0 @@
name: Build and Test
on:
push:
branches: [ master ]
tags-ignore:
- 'v*'
pull_request:
branches: [ master ]
permissions: read-all
jobs:
build:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: apt
run: sudo apt-get update && sudo apt-get install -y gcc autoconf automake libtool gettext autopoint bison help2man lzip texinfo texlive
- name: autogen
run: ./autogen.sh
- name: configure
run: ./configure
- name: make
run: make
- name: make check
run: make check
- name: make distcheck
run: make distcheck

View File

@ -1,83 +0,0 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
schedule:
- cron: '39 5 * * 5'
permissions: {}
jobs:
analyze:
name: Analyze (${{ matrix.language }})
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: ubuntu-22.04
timeout-minutes: 240
permissions:
# required for all workflows
security-events: write
# required to fetch internal or private CodeQL packs
packages: read
# only required for workflows in private repositories
actions: read
contents: read
strategy:
fail-fast: false
matrix:
include:
- language: c-cpp
build-mode: autobuild
# CodeQL supports the following values keywords for 'language': 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift'
# Use `c-cpp` to analyze code written in C, C++ or both
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
# Ensure autopoint is installed. CodeQL misses it sometimes.
- name: apt
run: sudo apt-get update && sudo apt-get install -y gcc autoconf automake libtool gettext autopoint bison help2man lzip texinfo texlive
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
with:
category: "/language:${{matrix.language}}"

View File

@ -1,90 +0,0 @@
name: Nightly
on:
schedule:
- cron: '04 00 * * *'
workflow_dispatch:
permissions: {}
jobs:
nightly:
name: Run a Nightly Build and Save the Artifacts
runs-on: ubuntu-22.04
outputs:
update_needed: ${{ steps.update.outputs.needed }}
version_slug: ${{ steps.update.outputs.slug }}
version: ${{ steps.version.outputs.version }}
permissions:
actions: read
contents: write
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Check time since last commit
id: update
run: |
slug=$(git log -n 1 --pretty='format:%h-%as')
echo "slug=$slug" >> $GITHUB_OUTPUT
authorDate=$(echo $slug | cut -d '-' -f 2-4)
update=1
[ $(( $(date +%s) - $(date --date=$authorDate +%s) )) -ge 172800 ] && echo "::notice title=No Changes::No changes within the last two days. Skipping nightly build." && update=0
echo "needed=$update" >> $GITHUB_OUTPUT
- name: Change version number
id: version
env:
slug: ${{ steps.update.outputs.slug }}
update_needed: ${{ steps.update.outputs.needed }}
if: ${{ env.update_needed == 1 }}
run: |
ver=$(sed -n "s/^\(AC_INIT.*generator\],\)\[\(.*\)\]\(,\[flex-help.*\)$/\2/p" $GITHUB_WORKSPACE/configure.ac)
ver=${ver#v}
ver=${ver%-*}
ver=$ver-$slug
echo "version=$ver" >> $GITHUB_OUTPUT
sed -i "s/^\(AC_INIT.*generator\],\)\(.*\)\(,\[flex-help.*\)$/\1[$ver]\3/" $GITHUB_WORKSPACE/configure.ac
- name: apt
env:
update_needed: ${{ steps.update.outputs.needed }}
if: ${{ env.update_needed == 1 }}
run: sudo apt-get update && sudo apt-get install -y gcc autoconf automake libtool gettext autopoint bison help2man lzip texinfo texlive
- name: Update CHANGE_LOG
env:
update_needed: ${{ steps.update.outputs.needed }}
if: ${{ env.update_needed == 1 }}
run: |
./tools/git2cl > $GITHUB_WORKSPACE/ChangeLog
- name: build
env:
update_needed: ${{ steps.update.outputs.needed }}
if: ${{ env.update_needed == 1 }}
run: |
./autogen.sh
./configure
make
make distcheck
- name: Make Git archives
env:
ver: ${{ steps.version.outputs.version }}
update_needed: ${{ steps.update.outputs.needed }}
if: ${{ env.update_needed == 1 }}
run: |
git archive -o $ver.src.tar.gz --prefix=flex-$ver/ HEAD
TZ=America/Los_Angeles git archive -o $ver.src.zip --prefix=flex-$ver/ HEAD
echo "SOURCE_GZ=$(echo $ver.src.tar.gz)" >> $GITHUB_ENV
echo "SOURCE_ZIP=$(echo $ver.src.zip)" >> $GITHUB_ENV
- name: Get artifact names
env:
ver: ${{ steps.version.outputs.version }}
update_needed: ${{ steps.update.outputs.needed }}
if: ${{ env.update_needed == 1 }}
run: |
echo "ARTIFACT_GZ=$(echo flex-$ver.tar.gz)" >> $GITHUB_ENV
echo "ARTIFACT_LZ=$(echo flex-$ver.tar.lz)" >> $GITHUB_ENV
- name: Upload Artifacts to Nightlies Release
id: upload-nightly-artifacts
env:
update_needed: ${{ steps.update.outputs.needed }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
if: ${{ env.update_needed == 1 }}
run: |
gh release upload nightlies ${{ env.ARTIFACT_GZ }} ${{ env.ARTIFACT_LZ }} ${{ env.SOURCE_GZ }} ${{ env.SOURCE_ZIP }} --clobber

9
.gitignore vendored
View File

@ -1,24 +1,25 @@
*.orig
*.rej
*.sig
*.tar.bz2
*.tar.gz
*.tar.lz
*.tar.xz
*~
.deps
.libs
ABOUT-NLS
ChangeLog
INSTALL
Makefile
Makefile.in
aclocal.m4
autom4te.cache
autoscan.log
build-aux/
config.log
config.status
configure
configure.scan
flex-*/
libtool
m4/
stamp-*
m4/
build-aux/

View File

@ -1,50 +0,0 @@
Aaron Stone <sodabrew@users.sourceforge.net>
Akim Demaille <akim@lrde.epita.fr>
Alastair Hughes <hobbitalastair@gmail.com>
Alex Kennedy <alexzanderkennedy@gmail.com>
Alexis La Goutte <alexis.lagoutte@gmail.com>
Bastian Köcher <git@kchr.de>
Christoph Junghans <ottxor@gentoo.org>
Christos Zoulas <christos@zoulas.com>
Cyril Brulebois <kibi@debian.org>
Demi Obenour <demiobenour@gmail.com>
Dennis Clarke <dclarke@blastwave.org>
Egor Pugin <egor.pugin@gmail.com>
Elias Pipping <pipping@users.sourceforge.net>
Explorer09 <explorer09@gmail.com>
Hans-Bernhard Broeker <HBBroeker@T-Online.de>
Harald van Dijk <harald@gigawatt.nl>
Hugh Sasse <hgs@dmu.ac.uk>
Jaska Uimonen <jaska.uimonen@helsinki.fi>
Jeff Smith <whydoubt@gmail.com>
John Millaway <john43@users.sourceforge.net>
Manoj Srivastava <srivasta@golden-gryphon.com>
Mariusz Pluciński <mplucinski@mplucinski.com>
Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com>
Michael McConville <mmcconville@mykolab.com> <mmcco@mykolab.com>
Michael Reed <m.reed@mykolab.com>
Michael van Elst <mlelstv@NetBSD.org>
Mightyjo <mightyjo@gmail.com>
Mike Frysinger <vapier@gentoo.org>
OBATA Akio <obache@NetBSD.org>
Robert Larice <Robert.Larice@t-online.de> rlar <rlar>
Robert Larice <Robert.Larice@t-online.de> Robert.Larice Robert Larice <Robert.Larice@t-online.de>
Robert Minsk <rminsk@users.sourceforge.net>
Samuel Thibault <samuel.thibault@ens-lyon.org>
Sean McBride <sean@rogue-research.com>
Serguey Parkhomovsky <sergueyparkhomovsky@gmail.com> <xindigo@gmail.com>
Simon Sobisch <simonsobisch@web.de>
Stefan Reinauer <stefan.reinauer@coreboot.org>
Thomas Klausner <wiz@NetBSD.org>
Till Varoquaux <till.varoquaux@gmail.com>
Tobias Klauser <tklauser@distanz.ch>
Todd C. Miller <Todd.Miller@courtesan.com>
Translation Project <coordinator@translationproject.org> <coordinators@translationproject.org>
Translation Project <coordinator@translationproject.org> <translation@translationproject.org>
Vern Paxson <vern@ee.lbl.gov>
Will Estes <westes575@gmail.com> <wlestes@users.sourceforge.net>
Yuri <yuri@tsoft.com>
luistung <dongliang1986@gmail.com>
lukeallardyce <lukeallardyce@users.sourceforge.net>
nomis52 <nomis52@users.sourceforge.net>
viktor.shepel <shepelvictor@bigmir.net>

View File

@ -1 +0,0 @@
2.6.4

107
BUGS Normal file
View File

@ -0,0 +1,107 @@
This is a list of bugs still in the queue at lex.sf.net at the time we closed
out the project and moved it to flex.sf.net.
-------------------------------------------------------------
Some strict compilers warn about a few internal flex variables signedness. They
are bogus warnings and can be ignored, but people send in reports nonethless.
-------------------------------------------------------------
The initializer of the yy_transition array in the
generated scanner
contains fewer entries than the declared size of the array.
Examples include yy_transition[6504] with 6250 entries,
yy_transition[13215] with 12961 entries. This looks
like it
is always 254 fewer entries than the declared size.
This bug is present in flex 2.5.4a as well. It appears to be harmless.
-------------------------------------------------------------
The examples in the chapter "Generating C++ Scanners"
contain suspicious code. Attached is a patch that
corrects this, and after these
modifications this example compiles and works.
-------------------------------------------------------------
C++ scanners derived from the yyFlexLexer base class
will not compile with flex-2.5.31 because the
&lt;FlexLexer.h&gt; automatically gets included into the
scanner twice. Because yyFlexLexer is now defined by
default even if no prefix is specified, including
FlexLexer.h twice causes the class yyFlexLexer to be
declared twice. In flex-2.5.4 because yyFlexLexer was
not defined by flex in the scanner code, including
FlexLexer.h more than once only declared yyFlexLexer
once. I appreciate that this is because of the M4
additions to flex, but I can not find a way to stop
flex defining yyFlexLexer if it is not needed.
Here is an example of a class that will not compile:
derived_lexer.h:
#ifndef __derived_lexer__
#define __derived_lexer__
#include &lt;FlexLexer.h&gt;
class derived_lexer : public yyFlexLexer
{
public:
derived_lexer(std::istream* arg_yyin = 0) :
yyFlexLexer(arg_yyin){}
int yylex();
int x;
};
#endif
derived_lexer.l:
%{
#include &quot;derived_lexer.h&quot;
%}
%option yyclass=&quot;derived_lexer&quot;
%%
[0-9]+ {
x = atoi(yytext);
}
%%
main.cpp:
#include &quot;derived_lexer.h&quot;
#include &lt;fstream&gt;
int main()
{
std::ifstream input;
input.open(&quot;input&quot;);
derived_lexer lexer(&amp;input);
lexer.yylex();
}
-------------------------------------------------------------
Hi, the anomally is that if I generate a c++ parser it will not make
yy_scan_buffer and friends.
this is happenning on flex version 2.5.4.
Is this the intent, if so how do I make a c++ parser read from my buffer?
P.S. in c++ it will only generate:
#ifndef YY_NO_SCAN_BUFFER
#endif
#ifndef YY_NO_SCAN_STRING
#endif
#ifndef YY_NO_SCAN_BYTES
#endif
-------------------------------------------------------------

View File

@ -1,199 +0,0 @@
# CONTRIBUTING to Flex
## Introduction
Thank you for your interest in contributing to Flex! Flex's [issue
tracker](https://github.com/westes/flex/issues) is on GitHub. That's
the best place to find a task that needs attention. It's also the best
place to check whether a problem you've found is known to the
community.
## Baseline Build Environment
The maintenance baseline build environment is Ubuntu 20.04 LTS.
Flex needs a previous version of itself in order to build a new
version of itself. You can either install an operating system package
of flex, or you can build flex from one of the release tar balls.
Configuring your Flex development environment to match the maintenance
baseline will help you collaborate and review contributions with the
other developers working on Flex. See the
[INSTALL](https://github.com/westes/flex/blob/master/INSTALL.md) for
programs required to build flex from scratch.
## Branching Convention
Flex source code is maintained in Git at GitHub. Each Flex developer
forks their own copy of the main repository at
[westes/flex](https://github.com/westes/flex). Flex development occurs
in feature branches of the forks. PRs will eventually be submitted
from the feature branches of the forks to westes/flex.
Flex development forks are not required to reside on GitHub. However:
- GitHub's pull request (PR) process only works with repositories
hosted on GitHub;
- Flex's automated testing pipeline depends on GitHub's Actions
infrastructure and may not function on other Git servers.
Therefore, if your fork of flex resides outside of github, you may
wish to submit your patches via email, using standard git mechanisms.
## Preparing Your Commits
Small PRs are easier to review and merge. Minimize the scope of the
changes in a single PR within reason. Changes that touch one or two
files are likely to be reviewed and accepted more quickly than changes
that touch every file in Flex. Your pull request should do one atomic
thing unless there is a really good reason for your pull request to do
more than one thing.
Format your commit messages following [Conventional Commits
1.0.0](https://www.conventionalcommits.org/en/v1.0.0/) (CC BY 3.0
netlify.com). Briefly:
```
<type>[(optional scope)][!]: <description>
[BLANK LINE]
[optional body]
[BLANK LINE]
[optional footer(s)]
```
A typical commit message might look like:
```
docs: Add CONTRIBUTING manual
Refs: #1234
```
The description should summarize the changes in a single, short
sentence. The description should be written in the imperative mood,
like the descriptions of the types below.
The primary types are:
- build: Change the build system, including tracking external dependencies
- ci: Change the CI/CD system
- docs: Update the package documentation
- feat: Add a new feature
- fix: Fix a bug or incorrect behavior
- perf: Improve performance of a feature
- refactor: Simplify maintainability without affecting performance or behavior
- revert: Revert a previous commit
- style: Correct a style mismatch (indentation, etc.)
- test: Change or add to the test suite
The optional scope must appear in parentheses and must consist of a
noun describing the section of the code base that was changed.
```
docs(contrib): Update URLs in CONTRIBUTING manual
```
The optional `!` must appear before the description whenever the
commit introduces a breaking change - one that breaks compatibility
with previous versions of the code base. Whenever the `!` marker
appears, a BREAKING-CHANGE footer should also be included.
The optional body may be included to provid additional information
or context about the change. If it appears, it must be preceded by a
blank line.
The optional footers may be included to provide additional referential
information and links to tracked issues, PRs, etc. Each footer must be
preceded by a blank line. Footers must be formatted as `<footer-type>:
<description>`, similar to the first line of commit messages. The
description's format depends upon the footer-type. Known footer-types
include:
- Refs: A comma-separated list of commit hashes and/or issue and PR numbers. Issue and PR numbers must be prefixed with a `#`.
- BREAKING-CHANGE: A description of the change that breaks compatibility with previous versions of the code, including the version number at which compatibility is broken.
A breaking change commit message might look like:
```
feat!: Switch to quantum scanner
BREAKING-CHANGE: New scanner runs in constant time but doesn't support any existing hardware.
Breaks compatibility with 1.0.0.
```
Squash your commits so that each commit is an atomic change. This aids
discussion and revision during the review process. In particular,
there should be no commits that fixup prior commits.
## Submitting PRs
Before submitting a PR to flex, test your changes either locally or
using the GitHub Actions pipeline.
### Testing locally
1. Commit and/or stash your changes.
1. Clean your working copy using
```
git clean -xdf
```
1. Build flex following the directions in [INSTALL](https://www.github.com/westes/flex/blob/master/INSTALL.md).
1. Run both the `make check` and `make distcheck` targets.
### Testing with GitHub Actions
If you created a fork of Flex on GitHub, any PR you make to your own
main branch will trigger the build and test pipeline.
1. Commit your changes.
1. Push your local branch to your remote at GitHub. Assuming your GitHub remote is called origin:
```
git push origin feature_branch
```
To submit a pull request through GitHub's web interface:
1. Open your GitHub Flex repository in your web browser.
1. Click the 'Pull requests' link.
1. Click the 'New pull request' button.
1. Change the 'base repository' from 'westes/flex' to your fork.
1. Change the 'base' branch to 'master' if it isn't already set.
1. Change the 'compare' branch to your feature branch.
1. Click the 'Create pull request' button.
1. Click the 'Actions' link to monitor the progress of your build and test job.
### Submitting PRs to westes/flex
Sending a PR to westes/flex follows nearly the same process as sending one to your own main branch.
1. Commit your changes.
1. Push your local branch to your remote at GitHub. Assuming your GitHub remote is called origin:
```
git push origin feature_branch
```
To use GitHub's web interface:
1. Open your GitHub Flex repository in your web browser.
1. Click the 'Pull requests' link.
1. Click the 'New pull request' button.
1. Change the 'base repository' to 'westes/flex'.
1. Change the 'base' branch to 'master' if it isn't already set.
1. Change the 'compare' branch to your feature branch.
1. Click the 'Create pull request' button.
1. Add notes to your PR including
- A title or commit-like message
- A summary of the commits in your pull request
- Issue numbers your PR covers
- Links to your GitHub Actions test results or a copy of the last few lines of output from your local test results.
If this is your first contribution to Flex, execution of the Actions
pipeline will have to be manually approved by the maintainer. If you
are a returning contributor, you can click the Actions link to watch
your job run.
Keep an eye on your PR's discussion page and your email for review
notes and questions from other developers.
Thanks for contributing!

View File

@ -1,110 +0,0 @@
# INSTALLING Flex
## Should you be here at all?
If building, developing or compiling C programs is new to you, you
probably want to use your operating system's standard means of
installing software to install flex. If you do not need the latest
features of flex, you probably just want to use your operating
system's standard means of installing software to obtain flex.
## Now that you know you should be here ...
If you are not familiar with bootstrapping C code from a git
repository or if GNU autotools seems like a jumble of tenuous
incantationery to you, then make sure that you downloaded one of the
release tar archives of flex. You can verify this by checking the
filename of what you downloaded. If it is something like
`flex-<version>.tar.<compressiontype>` then you have a release tar
archive. If you have a filename like `flex.tar.gz` or `flex.zip`, you
have a copy of the git repository and you didn't download the thing
you wanted to.
## Building from a release archive
To build flex from a release archive:
```bash
$ ./configure <any configure options you need>
$ make
```
To see what options are available from the configure script:
```bash
$ ./configure --help
```
Optionally run the test suite:
```bash
$ make check
```
To install the flex you just built:
```bash
$ make install
```
Note that you may want to make use of the DESTDIR argument on the
`make install` command line or that you may want to have used the
`--prefix` argument with configure (or mostly equivalently the
`prefix` argument on the make command line).
## Building from the git repository
To build from the git repository:
First, make sure you have a copy of flex installed somewhere on your
path so that configure can find it. You can usually do this with your
operating system's standard means of installing software. Sometimes,
you have to build from a recent release of flex, however. Using a
version of flex built from the flex codebase is always acceptable if
you have already bootstrapped doing so.
You will also need all the programs that flex needs in order to be
built from scratch:
* compiler suite - flex is built with gcc
* bash, or a good Bourne-style shell
* m4 - `m4 -P` needs to work; GNU m4 and a few others are suitable
* GNU bison; to generate parse.c from parse.y
* autoconf; for handling the build system
* automake; for Makefile generation
* libtool; often packaged with automake, but not always
* make; for running the generated Makefiles
* gettext; for i18n support
* help2man; to generate the flex man page
* tar, gzip, lzip, etc.; for packaging of the source distribution
* GNU texinfo; to build and test the flex manual. Note that if you want
to build the dvi/ps/pdf versions of the documentation you will need
texi2dvi and related programs, along with a sufficiently powerful
implementation of TeX to process them. See your operating system
documentation for how to achieve this. The printable versions of the
manual are not built unless specifically requested, but the targets
are included by automake.
* GNU indent; for indenting the flex source the way we want it done
* GNU sed; GNU extensions are used so other sed versions will not work
In cases where the versions of the above tools matter, the file
configure.ac will specify the minimum required versions.
Then:
```bash
$ ./autogen.sh
```
After autogen.sh finishes successfully, building flex follows the same
steps as building flex from a release archive.
Note that, in addition to `make check`, `make distcheck` builds a
release archive and builds and tests flex from inside a directory
containing only known distributed files.
If you have trouble building flex from git sources on non-Debian systems,
(e.g. MacOS) make sure that any required GNU tools have been added to
your PATH before your system defaults. Also check that required GNU tools
are aliased to their typical names - some package systems prefix them with
"gnu-" which make them hard for configure to find.

View File

@ -29,24 +29,21 @@
# to DEFS.
ACLOCAL_AMFLAGS = -I m4
indent = @INDENT@
dist_doc_DATA = \
AUTHORS \
COPYING \
NEWS \
ONEWS \
README.md
README
EXTRA_DIST = \
.indent.pro \
INSTALL.md \
CONTRIBUTING.md
dist_noinst_SCRIPTS = \
autogen.sh \
po/update_linguas.sh
autogen.sh
SUBDIRS = \
lib \
src \
doc \
examples \
@ -54,29 +51,6 @@ SUBDIRS = \
tests \
tools
# Convenience targets to build libfl only
# These are actually wrappers around automake- and libtool-generated targets
libfl:
cd src && $(MAKE) $(AM_MAKEFLAGS) libfl.la libfl.pc
install-libfl:
cd src && \
$(MAKE) $(AM_MAKEFLAGS) lib_LTLIBRARIES=libfl.la \
pkgconfig_DATA=libfl.pc install-libLTLIBRARIES install-pkgconfigDATA
uninstall-libfl:
cd src && \
$(MAKE) $(AM_MAKEFLAGS) \
lib_LTLIBRARIES=libfl.la pkgconfig_DATA=libfl.pc \
uninstall-libLTLIBRARIES uninstall-pkgconfigDATA
# libfl.pc is cleaned via 'distclean' target
clean-libfl:
cd src && \
$(MAKE) $(AM_MAKEFLAGS) lib_LTLIBRARIES=libfl.la clean-libLTLIBRARIES \
clean-libtool
# Create the ChangeLog, but only if we're inside a git working directory
ChangeLog: $(srcdir)/tools/git2cl
@ -84,15 +58,8 @@ ChangeLog: $(srcdir)/tools/git2cl
$(srcdir)/tools/git2cl > $@ \
; fi
indent:
cd src && $(MAKE) $(AM_MAKEFLAGS) indent
install-exec-hook:
cd $(DESTDIR)$(bindir) && \
$(LN_S) -f flex$(EXEEXT) flex++$(EXEEXT)
lint:
shellcheck -f gcc tests/*.sh src/*.sh *.sh
.PHONY: libfl install-libfl uninstall-libfl clean-libfl \
ChangeLog indent lint
.PHONY: ChangeLog tags indent

210
NEWS
View File

@ -1,197 +1,7 @@
flex NEWS
This is the file NEWS for the flex package. It records user -visible
changes between releases of flex.
* Noteworthy changes in release ?.? (????-??-??) [?]
** build
*** Flex now includes its own <config.h> header before including
system headers so that any system specific features detected by
configure are taken into account during compilation of flex
itself.
*** The flex build system now includes Makefile targets at the top
level to allow just building and installing libfl.
*** The flex distribution now includes a file, src/libfl.pc, to allow
using pkgconfig to find out what flags to use when building
against libfl from flex.
*** Various edge cases, mostly involving out-of-tree builds have been
accounted for in the autotools build system.
*** A crash during building on NetBSD has been fixed.
*** Flex is now automatically built by travis-ci. That should increase
the visibility of bugs and help prevent regressions.
** documentation
*** new bg, eo, ka, pt, uk translations from the translation project
** scanner
*** Some memory leaks have been fixed.
*** A long standing bug that effected expressions of the form c{i,j}
where 'c' is a character and {i,j} describes the number of times
to match against 'c' when case sensitivity was turned on has been
fixed.
*** New option: --backup-file allows setting the name of the file
written containing backing up information. Useful if you need
backing up information from multiple scanners in the same
directory.
*** flex emits correct line number directives when line numbers refer
to the file containing the line number directives.
*** The options {no,}yy{get,set}_column are now supported.
** test
*** Generating the various tableoptions make rules is now more portable.
*** Tests of the options -C*f and -C*F will now run correctly on
filesystems that are not case sensitive.
* Noteworthy changes in release 2.6.4 (2017-05-06) [stable]
** build
*** The indent target now knows about flex's new (as of 2.6.0)
layout. The indent rules it would apply are not correct and do
need to be fixed.
*** The files included in the flex distribution are now built by the
version of flex that is included in the distribution.
*** The configure script has a better idea of which headers are
required to build flex. It will also error when missing functions
are detected.
*** We have lowered the versions of automake and gettext that
configure.ac lists as required for building flex. In autogen.sh,
we now check for how to call libtoolize and use what we find in
the rest of the script.
*** Since files in lib/ are picked up as needed by src/, we no longer
generate a Makefile for that directory.
*** Flex can be cross compiled.
** documentation
*** Some typos were removed from the manual.
** scanner
*** Some minor performance enhancements.
*** We honor user defined yy_* macros again. We are also more careful
to not leak macro definitions into header files.
*** A number of portability fixes were introduced so building flex is
more reliable on more platforms. Additionally, outdated function
calls were removed.
*** When building the flex executable itself, %# comments from
flex.skl are removed when generating the C source code array. This
reduces the size of flex.
** test suite
*** All scripts in the test suite are now run by $(SHELL) and the
needed portability fixes have been included.
*** Test suite dependencies are handled much better. This only matters
if you are actively developing flex or its test suite.
*** Tests that depend on platform dependent features now properly skip
when those platforms are not present.
*** When running "make check", you can now pas V=0 to silence more of
the build. This is useful when you're less concerned about the
details of building and linking the test programs themselves.
* Noteworthy changes in release 2.6.3 (2016-12-30) [stable]
** scanner
*** several bug fixes resolved problems introduced in recent flex
versions regarding processing of comments, literals and various
quoting scenarios.
*** If the path to m4 was sufficiently long, a buffer overflow could
occur. This has been resolved. The fix also removes dependence on
the constant PATH_MAX.
** build
*** A new configure option --disable-bootstrap changes the behavior of
the build system when building flex. The default
"--enable-bootstrap" behavior is to build flex, then to use that
flex to build flex again. With --disable-bootstrap, the scanner is
simply built by sedding the scanner source. This is friendlier to
cross compilation.
*** The compatibility functions in lib/ are no longer built as a
library. Instead, they are built as $(LIBOBJ) objects. This is
simpler and friendlier to cross compilation.
*** It is now possible to build flex without building the accompanying
libfl. This is friendlier to cross compilation. See the
--disable-libfl option to configure. Resolves #99.
*** the PIC version of libfl was not correctly built. It is no longer
included in the build/installation targets of flex since it was
unused.
*** the distributed man page is only rebuilt when the relevant source
files change or when the binary doesn't exist. In particular, this
is friendlier to cross compilation. Resolves #108
** test
*** the shell scripts in the test suite are more portable across different shell implementations.
* version 2.6.2 released 2016-10-24
** flex internals
*** a segfault involving yyrestart(NULL) has been fixed
*** flex should now handle quoting when mixed with m4 processing correctly
*** flex handles `[[' and `]]' correctly
*** flex no longer generates non-ANSI code
*** more compilation warnings were squashed in generated scanners
*** prevented a buffer overflow that could occur when input buffers were the exact wrong size
** test suite
*** input filenames on MSWindows are now calculated correctly
*** general code cleanups in a number of tests now make the test suite compile much more cleanly
** build system
*** the xz archive has been replaced with an lzip archive
*** a new option to configure --enable-warnings to encapsulate passing
of warning-related flags which is useful in testing flex
*** make indent now works for out of source builds
*** Portability warnings when generating Makefile.in files are now suppressed; they were just noise and the use of GNU extensions in Makefile.{am,in,} was intentional and well known.
** bugs
*** resolved gh#67
** new sv translation from the translation project
See the file COPYING for copying conditions.
* version 2.6.1 released 2016-03-01
@ -245,7 +55,7 @@ flex NEWS
*** Removed deprecated 'register' storage class specifier
*** Changed output formats from octal to hexadecimal
*** Changeed output formats from octal to hexadecimal
*** check limits before using array index cclp; resolves sf-166
@ -402,7 +212,7 @@ distribution
* version 2.5.31 released 2003-4-1
** remove --enable-maintainer-mode configure option; none of the
Makefiles were using it and it can be unduly confusing
Makefiles were using it and it can be unduely confusing
* version 2.5.30 released 2003-4-1
@ -451,7 +261,7 @@ distribution
** new es translation from the translation project
** slight tweaks to the flex_int*_t types
** slight tweeks to the flex_int*_t types
** flex now warns about pattern ranges that might be ambiguous when
generating a case-insensitive scanner
@ -605,7 +415,7 @@ formatting the manual in postscript and pdf in the distributed
** the test suite now respects the usual CFLAGS, etc. variables
** removed some warnings which some tests triggered with the -s option
** removed some warnings which some tests trigggered with the -s option
** the flex-generated header file now tries to be smarter about
conditionally including start conditions
@ -741,7 +551,7 @@ options, see accompanying documentation
*** Updated the manual with the new reentrant API
*** Two new options %option reentrant (-R) and
*** Two new options %option reentrant (-R) and
%option reentrant-bison (-Rb)
*** All globals optionally placed into struct yyglobals_t
@ -771,7 +581,7 @@ But the inverse is still true
** Developer test suite added
*** TESTS/ directory has been added. Users can
*** TESTS/ directory has been added. Users can
'make test' in the TESTS directory to execute the test suite
** Support for bison variables yylval and yylloc added
@ -792,8 +602,6 @@ But the inverse is still true
See the file ONEWS for changes in earlier releases.
See the file COPYING for copying conditions.
Local Variables:
mode: text
mode: outline-minor

4
ONEWS
View File

@ -929,7 +929,7 @@ Changes between 2.3 Patch #2 (02Aug90) and original 2.3 release:
Reordered #ifdef maze in the scanner skeleton in the hope of
getting the declarations right for cfront and g++, too.
- Note that this patch supersedes patch #1 for release 2.3,
- Note that this patch supercedes patch #1 for release 2.3,
which was never announced but was available briefly for
anonymous ftp.
@ -987,7 +987,7 @@ Things which didn't used to be documented but now are:
- yy_switch_to_buffer() can be used in the yywrap() macro/routine.
- flex scanners do not use stdio for their input, and hence when
writing an interactive scanner one must explicitly call fflush()
writing an interactive scanner one must explictly call fflush()
after writing out a prompt.
- flex scanner can be made reentrant (after a fashion) by using

113
README Normal file
View File

@ -0,0 +1,113 @@
This is flex, the fast lexical analyzer generator.
flex is a tool for generating scanners: programs which recognize
lexical patterns in text.
More information about flex as well as the latest official release of
flex can be found at:
http://flex.sourceforge.net/
The flex codebase is kept in git at:
https://github.com/westes/flex
Bugs and pull requests should be filed against flex using github's
issue tracker and pull request facilities.
There are several mailing lists available as well:
flex-announce@lists.sourceforge.net - where posts will be made
announcing new releases of flex.
flex-help@lists.sourceforge.net - where you can post questions about
using flex
flex-devel@lists.sourceforge.net - where you can discuss development of
flex itself
Find information on subscribing to the mailing lists at:
http://sourceforge.net/mail/?group_id=97492
The flex distribution contains the following files which may be of interest:
README - This file.
NEWS - current version number and list of user-visible changes.
INSTALL - basic installation information.
ABOUT-NLS - description of internationalization support in flex.
COPYING - flex's copyright and license.
doc/ - user documentation.
examples/ - containing examples of some possible flex scanners and a
few other things. See the file examples/README for more details.
TODO - outstanding bug reports, desired features, etc.
tests/ - regression tests. See TESTS/README for details.
po/ - internationalization support files.
You need the following tools to build flex from the maintainer's
repository:
compiler suite - flex is built with gcc
bash, or a good Bourne-style shell
m4 - m4 -p needs to work; GNU m4 and a few others are suitable
GNU bison; to generate parse.c from parse.y
autoconf; for handling the build system
automake; for Makefile generation
gettext; for i18n support
help2man; to generate the flex man page
tar, gzip, etc.; for packaging of the source distribution
GNU texinfo; to build and test the flex manual. Note that if you want
to build the dvi/ps/pdf versions of the documentation you will need
texi2dvi and related programs, along with a sufficiently powerful
implementation of \TeX to process them. See your operating system
documentation for how to achieve this. The printable versions of the
manual are not built unless specifically requested, but the targets
are included by automake.
GNU indent; for indenting the flex source the way we want it done
In cases where the versions of the above tools matter, the file
configure.ac will specify the minimum required versions.
Once you have all the necessary tools installed, life becomes
simple. To prepare the flex tree for building, run the script:
$ ./autogen.sh
in the top level of the flex source tree.
This script calls the various tools needed to get flex ready for the
GNU-style configure script to be able to work.
From this point on, building flex follows the usual configure, make,
make install routine.
This file is part of flex.
This code is derived from software contributed to Berkeley by
Vern Paxson.
The United States Government has rights in this work pursuant
to contract no. DE-AC03-76SF00098 between the United States
Department of Energy and the University of California.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
Neither the name of the University nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.

View File

@ -1,73 +0,0 @@
[![Build Status](https://github.com/westes/flex/actions/workflows/build.yml/badge.svg)](https://github.com/westes/flex/actions/workflows/build.yml)
This is flex, the fast lexical analyzer generator.
flex is a tool for generating scanners: programs which recognize
lexical patterns in text.
The flex codebase is kept in
[Git on GitHub.](https://github.com/westes/flex) Source releases of flex with some intermediate files already built can be found on [the github releases page.](https://github.com/westes/flex/releases)
Use GitHub's [issues](https://github.com/westes/flex/issues) and
[pull request](https://github.com/westes/flex) features to file bugs
and submit patches.
There are several mailing lists available as well:
* flex-announce@lists.sourceforge.net - where posts will be made
announcing new releases of flex.
* flex-help@lists.sourceforge.net - where you can post questions about
using flex
* flex-devel@lists.sourceforge.net - where you can discuss development
of flex itself
Find information on subscribing to the mailing lists or search in the
archive at: https://sourceforge.net/p/flex/mailman/
Note: Posting is only allowed from addresses that are subscribed to
the lists.
The flex distribution contains the following files which may be of
interest:
* README.md - This file.
* NEWS - current version number and list of user-visible changes.
* INSTALL.md - basic installation information.
* ABOUT-NLS - description of internationalization support in flex.
* COPYING - flex's copyright and license.
* doc/ - user documentation.
* examples/ - containing examples of some possible flex scanners and a
few other things. See the file examples/README for more
details.
* tests/ - regression tests. See tests/README for details.
* po/ - internationalization support files.
---
This file is part of flex.
This code is derived from software contributed to Berkeley by
Vern Paxson.
The United States Government has rights in this work pursuant
to contract no. DE-AC03-76SF00098 between the United States
Department of Energy and the University of California.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
Neither the name of the University nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.

69
TODO
View File

@ -1,9 +1,66 @@
Things to be worked on:
* the manual:
* Tests for %option user-init, %option pre-action, %option post-action.
** do an end-to-end proofread of the manual (this is under way, but is
going slowly)
* integrate examples directory into tests so that normal testing
proves the examples are up to date.
** pretty up the dvi output; overflows, etc.
* Do away with any need for -lfl by generating a default yywrap
if the user doesn't specify one.
** faq
*** clean up the faqs section. The information is good; the texinfo
could use some touching up.
*** index the faq entries
*** mention that it's possible to use a variable to scan matching
brackets, nested comments etc.
*** include something about lexing/parsing fortran
** create a section on flex design, features, etc.
* getext
** make sure all flex modules use gettext translation facilities
*subdirectories
** in examples/manual, integrate the Makefile.examples into the
Makefile.am
* test suite
** integrate the test suite into automake's framework (note that the
test suite can be run from the top level directory with "make
check". Still, we want to get it completely under automake's control.)
** make test suite more complete
* generic coding
** move as much skeleton code as possible out of gen.c and into
flex.skl
** figure out whether we want to add the capability to have
auto-generated backout rules
** token-type and token buffer support
** check if we still need to #undef macros at the end of a header
** merge yylineno into support for location tracking
** bug where yylineno is not decremented on REJECT
** bug where yylineno is counted in trailing context
* C++
** have a separate skeleton for c++
** revisit the C++ API. We get requests to make it more complete.
Local Variables:
Mode: text
mode: outline-minor
End:

View File

@ -22,31 +22,12 @@
# PURPOSE.
# If you see no configure script, then run ./autogen.sh to create it
# and proceed with the "normal" build procedures.
# use LIBTOOLIZE, if set
if test "x$LIBTOOLIZE" = "x"; then
for ac_prog in libtoolize glibtoolize; do
if $ac_prog --version >/dev/null 2>&1; then
LIBTOOLIZE=$ac_prog
break
fi
done
fi
# test libtoolize
if test "x$LIBTOOLIZE" = "x" || ! $LIBTOOLIZE --version >/dev/null; then
echo "error: libtoolize not working, re-run with LIBTOOLIZE=/path/to/libtoolize">&2
echo " LIBTOOLIZE is currently \"$LIBTOOLIZE\"">&2
exit 1
fi
# and procede with the "normal" build procedures.
#if we pretend to have a ChangeLog, then automake is less
#worried. (Don't worry, we *do* have a ChangeLog, we just need the
#Makefile first.)
if ! test -f ChangeLog; then
touch ChangeLog
fi
$LIBTOOLIZE --install --force
touch ChangeLog
libtoolize --install --force || glibtoolize --install --force
autoreconf --install --force

View File

@ -24,23 +24,12 @@
# autoconf requirements and initialization
dnl We recommend builders to regenerate configure and auxiliary scripts with
dnl exact versions of tools that generate flex release tarball, or latest
dnl versions of tools for flex development. The minimum feature and version
dnl requirements are provided for information only (no guarantee that the tools
dnl will work and we may bump requirements with future code changes).
dnl Uses AC_PATH_PROGS_FEATURE_CHECK. Requires autoconf-2.62 as minimum.
AC_PREREQ([2.62])
AC_INIT([the fast lexical analyser generator],[2.6.4],[flex-help@lists.sourceforge.net],[flex])
AC_INIT([the fast lexical analyser generator],[2.6.1],[flex-help@lists.sourceforge.net],[flex])
AC_CONFIG_SRCDIR([src/scan.l])
AC_CONFIG_AUX_DIR([build-aux])
AC_USE_SYSTEM_EXTENSIONS
dnl "LT_*" macros and "libtoolize --install" require libtool-2.2 as minimum.
LT_PREREQ([2.2])
LT_INIT
dnl Uses dist-lzip. Requires automake-1.11.3 as minimum.
AM_INIT_AUTOMAKE([1.11.3 -Wno-portability foreign std-options dist-lzip parallel-tests subdir-objects])
AC_CONFIG_HEADERS([src/config.h])
AM_INIT_AUTOMAKE([gnu check-news std-options dist-xz parallel-tests 1.14.1])
AC_CONFIG_HEADER([src/config.h])
AC_CONFIG_LIBOBJ_DIR([lib])
AC_CONFIG_MACRO_DIR([m4])
SHARED_VERSION_INFO="2:0:0"
@ -49,86 +38,29 @@ AC_SUBST(SHARED_VERSION_INFO)
# checks for programs
AM_GNU_GETTEXT([external])
dnl Try to pull in latest gettext infrastructure ("po" and "m4") files.
dnl Unfortunately autoreconf as of 2.69 doesn't recognize
dnl AM[_]GNU[_]GETTEXT_REQUIRE_VERSION so we provide AM[_]GNU[_]GETTEXT_VERSION
dnl as fallback. (autopoint will ignore latter if former is specified.)
dnl
dnl Bugs in gettext before 0.14 prevent building flex with it.
dnl FLEX_GNU_GETTEXT_REAL_REQUIRE_VERSION=0.14
AM_GNU_GETTEXT_REQUIRE_VERSION([0.19.6])
AM_GNU_GETTEXT_VERSION([0.19.6])
AM_GNU_GETTEXT_VERSION([0.19])
AC_PROG_YACC
AC_MSG_CHECKING(whether $YACC is GNU Bison)
AS_IF([test -n "$YACC" && $YACC --version 2>&1 | $GREP "GNU Bison" >/dev/null],
[AC_MSG_RESULT(yes)
use_gnu_bison=1],
[AC_MSG_RESULT(no)
AC_MSG_WARN($YACC does not appear to be GNU Bison; required for maintainers)
use_gnu_bison=0
YACC="\${top_srcdir}/build-aux/missing bison"
])
AM_CONDITIONAL([HAVE_BISON], [test $use_gnu_bison -eq 1])
dnl AC_PROG_LEX requires an argument in autoconf 2.70, but we cannot
dnl specify it through AM_PROG_LEX until automake 1.17.
AC_PROG_LEX([noyywrap])
AM_PROG_LEX
AC_PROG_CC
AX_PROG_CC_FOR_BUILD
AC_PROG_CXX
AM_PROG_CC_C_O
AC_PROG_LN_S
AC_PROG_AWK
AC_PROG_INSTALL
AS_IF([test "x${BUILD_OBJEXT-}" = x],
[AS_IF([test "$cross_compiling" = no],
[BUILD_EXEEXT="$EXEEXT"
BUILD_OBJEXT="$OBJEXT"],
[BUILD_EXEEXT="${ac_cv_build_exeext-}"
BUILD_OBJEXT="${ac_cv_build_objext-}"])])
AS_IF([test "x${BUILD_OBJEXT-}" = x && test "x${enable_bootstrap-yes}" = xyes],
[AC_MSG_ERROR([BUILD_OBJEXT is invalid; please regenerate 'configure' with a newer ax_prog_cc_for_build.m4 (serial 23 or later) or configure with '--disable-bootstrap'])])
pkgconfigdir=${libdir}/pkgconfig
AC_SUBST(pkgconfigdir)
# allow passing a variable `WARNINGFLAGS',
# either when invoking `configure', or when invoking `make'
# default to something useful if GCC was detected
AC_ARG_ENABLE([warnings],
[AS_HELP_STRING([--enable-warnings],
[enable a bunch of compiler warning flags (defaults to GCC warning flags).])],
[AS_IF([test "x$GCC" = xyes],
[ : ${WARNINGFLAGS="-Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs -Wold-style-definition -Wredundant-decls -Wconversion -Wno-unused-but-set-variable"} ])])
AC_SUBST([WARNINGFLAGS])
AC_ARG_ENABLE([libfl],
[AS_HELP_STRING([--disable-libfl],
[do not build -lfl runtime support library])],
[], [enable_libfl=yes])
AM_CONDITIONAL([ENABLE_LIBFL], [test "x$enable_libfl" = xyes])
# --disable-bootstrap is intended only to workaround problems with bootstrap
# (e.g. when cross-compiling flex or when bootstrapping has bugs).
# Ideally we should be able to bootstrap even when cross-compiling.
AC_ARG_ENABLE([bootstrap],
[AS_HELP_STRING([--disable-bootstrap],
[don't perform a bootstrap when building flex])],
[], [enable_bootstrap=yes])
AM_CONDITIONAL([ENABLE_BOOTSTRAP], [test "x$enable_bootstrap" = xyes])
AM_CONDITIONAL([CROSS], [test "x$cross_compiling" = xyes])
AC_PATH_PROG([BISON], bison, no)
AS_IF([test "$BISON" != no],[],
[ AC_SUBST([BISON], [\${top_srcdir}/build-aux/missing bison])
AC_MSG_NOTICE(no bison program found: only required for maintainers)
])
AC_PATH_PROG([HELP2MAN], help2man, [\${top_srcdir}/build-aux/missing help2man])
AS_IF([test "$HELP2MAN" = "\${top_srcdir}/build-aux/missing help2man"],
AC_MSG_WARN(help2man: program not found: building man page will not work)
AS_IF([test -z "$ac_cv_path_HELP2MAN" ],[],
AC_MSG_WARN(program not found: help2man: building man page will not work)
)
AC_PATH_PROGS([TEXI2DVI], [gtexi2dvi texi2dvi], [\${top_srcdir}/build-aux/missing texi2dvi])
AS_IF([test "$TEXI2DVI" = "\${top_srcdir}/build-aux/missing texi2dvi"],
AS_IF([test -z "$ac_cv_path_TEXI2DVI" ], [],
AC_MSG_WARN(texi2dvi: program not found: building pdf version of manual will not work)
)
@ -143,23 +75,23 @@ AC_CACHE_CHECK([for m4 that supports -P], [ac_cv_path_M4],
AC_SUBST([M4], [$ac_cv_path_M4])
AC_DEFINE_UNQUOTED([M4], ["$M4"], [Define to the m4 executable name.])
AC_PATH_PROG([INDENT], indent)
AS_IF([test -n "$INDENT"], [
AC_MSG_CHECKING(whether $INDENT is GNU indent)
AS_IF([$INDENT --version 2>/dev/null | $GREP "GNU indent" >/dev/null],
[AC_MSG_RESULT(yes)],
[AC_MSG_RESULT(no)
AC_MSG_WARN($INDENT does not appear to be GNU indent; 'make indent' may not function properly)
INDENT="\${top_srcdir}/build-aux/missing indent"
])
])
AC_PATH_PROG(INDENT, indent, indent)
# if INDENT is set to 'indent' then we didn't find indent
if test "$INDENT" != indent ; then
AC_MSG_CHECKING(if $INDENT is GNU indent)
if $INDENT --version 2>/dev/null | head -n 1|grep "GNU indent" > /dev/null ; then
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
AC_MSG_WARN($INDENT does not appear to be GNU indent.)
fi
else
AC_MSG_WARN(no indent program found: make indent target will not function)
fi
# checks for headers
AC_CHECK_HEADERS([regex.h strings.h sys/wait.h unistd.h], [],
[AC_MSG_ERROR(required header not found on your system)])
AC_CHECK_HEADERS([inttypes.h libintl.h limits.h locale.h malloc.h netinet/in.h])
AC_CHECK_HEADERS([inttypes.h libintl.h limits.h locale.h malloc.h netinet/in.h regex.h unistd.h])
# checks for libraries
@ -167,12 +99,12 @@ AC_CHECK_HEADERS([inttypes.h libintl.h limits.h locale.h malloc.h netinet/in.h])
# all we need is the preprocessor symbol defined since we don't need
# LIBS to include libpthread for building flex.
LIBPTHREAD=''
AC_CHECK_LIB(pthread, pthread_mutex_lock,
[AC_CHECK_HEADERS([pthread.h], [LIBPTHREAD=-lpthread],
[AC_MSG_WARN([pthread tests will be skipped])])],
[AC_MSG_WARN([pthread tests will be skipped])])
AC_SUBST([LIBPTHREAD])
AC_DEFINE([HAVE_LIBPTHREAD], 1, [pthread library] ),
AC_DEFINE([HAVE_LIBPTHREAD], 0, [pthread library] )
)
AC_CHECK_HEADERS([pthread.h])
AM_CONDITIONAL([want_pthread], [test x$ac_cv_lib_pthread_pthread_mutex_lock = xyes])
AC_CHECK_LIB(m, log10)
@ -186,32 +118,19 @@ AC_TYPE_SIZE_T
AC_FUNC_ALLOCA
AC_FUNC_FORK
dnl Autoconf bug: AC_FUNC_MALLOC and AC_FUNC_REALLOC might not warn of cross
dnl compilation. Workaround this.
AC_FUNC_MALLOC
AS_IF([test "$cross_compiling" = yes],
AC_MSG_WARN([result $ac_cv_func_malloc_0_nonnull guessed because of cross compilation]))
AC_FUNC_REALLOC
AS_IF([test "$cross_compiling" = yes],
AC_MSG_WARN([result $ac_cv_func_realloc_0_nonnull guessed because of cross compilation]))
dnl Autoheader (<= 2.69) bug: "dnl" comments in a quoted argument of
dnl AC_CHECK_FUNCS will expand wierdly in config.h.in.
dnl (https://lists.gnu.org/archive/html/bug-autoconf/2018-02/msg00005.html)
AC_CHECK_FUNCS(dup2 dnl
memset dnl
pow dnl
regcomp dnl
setlocale dnl
strchr dnl
strdup dnl
strtol)
AC_CHECK_FUNCS([dup2 memset regcomp strcasecmp strchr strdup strtol], [],
[AC_MSG_ERROR(required library function not found on your system)])
# Optional library functions:
# pow - Used only by "examples/manual/expr".
# setlocale - Needed only if NLS is enabled.
# reallocarr - NetBSD function. Use reallocarray if not available.
# reallocarray - OpenBSD function. We have replacement if not available.
AC_CHECK_FUNCS([pow setlocale reallocarr reallocarray])
AC_CHECK_DECLS(__func__)
AS_IF([test "$cross_compiling" = yes],
[AC_CONFIG_FILES([src/config_for_build.h])])
AC_REPLACE_FUNCS(reallocarray)
AC_CONFIG_FILES(
Makefile
@ -219,8 +138,8 @@ doc/Makefile
examples/Makefile
examples/fastwc/Makefile
examples/manual/Makefile
lib/Makefile
po/Makefile.in
src/libfl.pc
src/Makefile
tools/Makefile
tests/Makefile

3
doc/.gitignore vendored
View File

@ -25,6 +25,3 @@ flex.ps
version.texi
flex.html
flex.t2p
flex
flex.exe

69
doc/Makefile.am Executable file → Normal file
View File

@ -1,51 +1,30 @@
if CROSS
FLEX = $(top_builddir)/src/stage1flex
else
FLEX = $(top_builddir)/src/flex$(EXEEXT)
endif
TEXI2DVI = @TEXI2DVI@ -I $(srcdir)/../examples/manual/
TEXI2PDF = @TEXI2PDF@ -I $(srcdir)/../examples/manual/
help2man = @HELP2MAN@
info_TEXINFOS = flex.texi
AM_MAKEINFOFLAGS = -I $(srcdir)/../examples/manual/
dist_man_MANS = flex.1
MAINTAINERCLEANFILES = flex.1
CLEANFILES = \
*.aux \
*.cp \
*.cps \
*.fn \
*.fns \
*.hk \
*.hks \
*.ky \
*.log \
*.op \
*.ops\
*.pg \
*.toc \
*.tp \
*.tps \
*.vr \
*.vrs \
flex
flex.aux \
flex.cp \
flex.cps \
flex.fn \
flex.fns \
flex.hk \
flex.hks \
flex.ky \
flex.log \
flex.op \
flex.ops \
flex.pg \
flex.toc \
flex.tp \
flex.tps \
flex.vr \
flex.vrs
# Use a fixed program name, without extension (such as ".exe"), for man
# page generation. 'help2man' strips directory prefix ("./") from the
# usage string, but not file extensions.
flex.1: $(top_srcdir)/configure.ac $(top_srcdir)/src/cpp-flex.skl $(top_srcdir)/src/options.c $(top_srcdir)/src/options.h
( cd $(top_builddir)/src && \
prog_name=`echo '$(FLEX)' | sed 's|^$(top_builddir)/src/||'` && \
$(MAKE) $(AM_MAKEFLAGS) $$prog_name \
)
$(INSTALL) -m 700 $(FLEX) flex$(EXEEXT)
$(HELP2MAN) \
--name='$(PACKAGE_NAME)' \
--section=1 \
--source='The Flex Project' \
--manual='Programming' \
--output=$@ \
./flex
$(dist_man_MANS): $(top_srcdir)/configure.ac $(top_srcdir)/src/flex.skl $(top_srcdir)/src/options.c $(top_srcdir)/src/options.h
for i in $(dist_man_MANS) ; do \
$(help2man) --name='$(PACKAGE_NAME)' \
--section=`echo $$i | sed -e 's/.*\.\([^.]*\)$$/\1/'` \
$(top_srcdir)/src/flex$(EXEEXT) > $$i || rm -f $$i ; \
done

2622
doc/flex.texi Executable file → Normal file

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@ This directory contains some examples of what you can do with
flex. These files are not tested regularly so you might have to tinker
a bit before they work for you. Updates, new files and patches are welcome.
- debflex.awk, an awk script for annotating flex debug output.
- debflex.awk, an awk script for anotating flex debug output.
It presently only works with gawk and mawk, not with "old"
or "new" awk.

View File

@ -30,9 +30,6 @@ EXTRA_DIST = \
eof_test01.txt \
eof_test02.txt \
eof_test03.txt \
example_er.lex \
example_r.lex \
example_nr.lex \
expr.lex \
expr.y \
front.lex \

View File

@ -18,23 +18,10 @@ ALLOCA =
# DO NOT CHANGE ANYTHING FROM HERE ON !!!!!!!!!
#
############################################################
PATH := /usr/local/bin:${PATH}
all: expr front myname eof wc replace user_act string1\
string2 yymore numbers dates cat
example_r: example_r.lex
$(LEX) example_r.lex
$(CC) lex.yy.c -o example_r
example_nr: example_nr.lex
$(LEX) example_nr.lex
$(CC) lex.yy.c -o example_nr
example_er: example_er.lex
$(LEX) example_er.lex
$(CC) lex.yy.c -o example_er
expr: expr.y expr.lex
$(YACC) expr.y
$(LEX) expr.lex

View File

@ -10,9 +10,3 @@ To build the programs individually, type
For example:
make -f Makefile.examples expr
If you add an example to this directory, don't forget these steps:
* Add it to the EXTRA_DIST list in Makefile.am
* Add a build recipe to Makefile/examples.

View File

@ -54,13 +54,13 @@ day_ext (st|nd|rd|th)?
/* the default is month-day-year */
<LONG>{day_of_the_week} strcpy(dow,yytext);
<LONG>{month} strcpy(month,yytext); yybegin(DAY);
<LONG>{month} strcpy(month,yytext); BEGIN(DAY);
/* handle the form: day-month-year */
<LONG>{nday}{day_ext} strcpy(day,yytext); yybegin(DAY_FIRST);
<DAY_FIRST>{month} strcpy(month,yytext); yybegin(LONG);
<DAY>{nday}{day_ext} strcpy(day,yytext); yybegin(LONG);
<LONG>{nday}{day_ext} strcpy(day,yytext); BEGIN(DAY_FIRST);
<DAY_FIRST>{month} strcpy(month,yytext); BEGIN(LONG);
<DAY>{nday}{day_ext} strcpy(day,yytext); BEGIN(LONG);
<LONG>{nyear}{year_ext} {
printf("Long:\n");
@ -75,15 +75,15 @@ day_ext (st|nd|rd|th)?
/* handle dates of the form: day-month-year */
<SHORT>{nday} strcpy(day,yytext); yybegin(YEAR_LAST);
<YEAR_LAST>{nmonth} strcpy(month,yytext);yybegin(YLMONTH);
<YLMONTH>{nyear} strcpy(year,yytext); yybegin(SHORT);
<SHORT>{nday} strcpy(day,yytext); BEGIN(YEAR_LAST);
<YEAR_LAST>{nmonth} strcpy(month,yytext);BEGIN(YLMONTH);
<YLMONTH>{nyear} strcpy(year,yytext); BEGIN(SHORT);
/* handle dates of the form: year-month-day */
<SHORT>{nyear} strcpy(year,yytext); yybegin(YEAR_FIRST);
<YEAR_FIRST>{nmonth} strcpy(month,yytext);yybegin(YFMONTH);
<YFMONTH>{nday} strcpy(day,yytext); yybegin(SHORT);
<SHORT>{nyear} strcpy(year,yytext); BEGIN(YEAR_FIRST);
<YEAR_FIRST>{nmonth} strcpy(month,yytext);BEGIN(YFMONTH);
<YFMONTH>{nday} strcpy(day,yytext); BEGIN(SHORT);
<SHORT>\n {
@ -96,8 +96,8 @@ day_ext (st|nd|rd|th)?
strcpy(month,"");
}
long\n yybegin(LONG);
short\n yybegin(SHORT);
long\n BEGIN(LONG);
short\n BEGIN(SHORT);
{skip}*
\n

View File

@ -17,15 +17,15 @@ int include_count = -1;
%%
^"#include"[ \t]*\" yybegin(INCLUDE);
<INCLUDE>\" yybegin(INITIAL);
^"#include"[ \t]*\" BEGIN(INCLUDE);
<INCLUDE>\" BEGIN(INITIAL);
<INCLUDE>[^\"]+ { /* get the include file name */
if ( include_count >= MAX_NEST){
fprintf( stderr, "Too many include files" );
exit( 1 );
}
include_stack[++include_count] = yy_current_buffer();
include_stack[++include_count] = YY_CURRENT_BUFFER;
yyin = fopen( yytext, "r" );
if ( ! yyin ){
@ -35,7 +35,7 @@ int include_count = -1;
yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE));
yybegin(INITIAL);
BEGIN(INITIAL);
}
<INCLUDE><<EOF>>
{
@ -48,7 +48,7 @@ int include_count = -1;
} else {
yy_delete_buffer(include_stack[include_count--] );
yy_switch_to_buffer(include_stack[include_count] );
yybegin(INCLUDE);
BEGIN(INCLUDE);
}
}
[a-z]+ ECHO;

View File

@ -1,35 +0,0 @@
/* basic example, fully reentrant thread-safe version */
%{
struct stats {
int num_lines;
int num_chars;
};
%}
%option reentrant noyywrap
%option extra-type="struct stats"
%%
\n {
struct stats ns = yyget_extra(yyscanner);
++ns.num_lines; ++ns.num_chars;
yyset_extra(ns, yyscanner);
}
. {
struct stats ns = yyget_extra(yyscanner);
++ns.num_chars;
yyset_extra(ns, yyscanner);
}
%%
int main() {
yyscan_t scanner;
struct stats ns;
yylex_init ( &scanner );
yylex ( scanner );
ns = yyget_extra(scanner);
printf( "# of lines = %d, # of chars = %d\n",
ns.num_lines, ns.num_chars);
yylex_destroy ( scanner );
}

View File

@ -1,16 +0,0 @@
/* basic example - non-reentrant version */
%{
int num_lines = 0, num_chars = 0;
%}
%option noyywrap
%%
\n ++num_lines; ++num_chars;
. ++num_chars;
%%
int main() {
yylex();
printf( "# of lines = %d, # of chars = %d\n",
num_lines, num_chars );
}

View File

@ -1,21 +0,0 @@
/* basic example - flawed reentrant version with global */
%{
int num_lines = 0, num_chars = 0;
%}
%option reentrant noyywrap
%%
\n ++num_lines; ++num_chars;
. ++num_chars;
%%
int main() {
yyscan_t scanner;
yylex_init ( &scanner );
yylex ( scanner );
yylex_destroy ( scanner );
printf( "# of lines = %d, # of chars = %d\n",
num_lines, num_chars );
}

View File

@ -3,6 +3,9 @@
#include <string.h>
#include "y.tab.h" /* this comes from bison */
#define TRUE 1
#define FALSE 0
#define copy_and_return(token_type) { strcpy(yylval.name,yytext); \
return(token_type); }

View File

@ -149,7 +149,7 @@ void write_block_header(char *type)
*/
^[^\n:]+\n[*]+\n write_block_header(CHAPTER);
^"= "[A-Z]" ="\n"="* { /* we create a section for each category */
^"= "[A-Z]" ="\n"="* { /* we create a seciton for each category */
if(need_closing == TRUE){
printf("@end table\n\n\n");
}
@ -158,7 +158,7 @@ void write_block_header(char *type)
printf("\n\n@table @b\n");
}
"Examples:"[^\.]+ yyecho();
"Examples:"[^\.]+ ECHO;
"*"[^*\n]+"*" { /* @emph{}(emphasized) text */
yytext[yyleng-1] = '\0';
@ -205,16 +205,16 @@ void write_block_header(char *type)
yyless(loop+1);
statep++;
states[statep] = EXAMPLE2;
yybegin(EXAMPLE2);
BEGIN(EXAMPLE2);
}
<EXAMPLE,EXAMPLE2>^\n {
printf("@end example\n\n");
statep--;
yybegin(states[statep]);
BEGIN(states[statep]);
}
/*
* reproduce @enumerate lists
* repoduce @enumerate lists
*/
":"\n+[ \t]*[0-9]+"." {
@ -231,7 +231,7 @@ void write_block_header(char *type)
yyless(loop);
statep++;
states[statep] = ENUM;
yybegin(ENUM);
BEGIN(ENUM);
}
<ENUM>"@" printf("@@");
@ -239,7 +239,7 @@ void write_block_header(char *type)
printf(":\n\n@example\n");
statep++;
states[statep] = EXAMPLE;
yybegin(EXAMPLE);
BEGIN(EXAMPLE);
}
@ -250,7 +250,7 @@ void write_block_header(char *type)
<ENUM>\n\n\n[ \t]+[^0-9] {
printf("\n\n@end enumerate\n\n");
statep--;
yybegin(states[statep]);
BEGIN(states[statep]);
}
/*
@ -265,7 +265,7 @@ void write_block_header(char *type)
yyless(2);
statep++;
states[statep] = LITEM2;
yybegin(LITEM2);
BEGIN(LITEM2);
}
<LITEM2>^":".+":" {
(void)check_and_convert(&yytext[1]);
@ -275,9 +275,9 @@ void write_block_header(char *type)
<LITEM2>\n\n\n+[^:\n] {
printf("\n\n@end itemize\n\n");
yyecho();
ECHO;
statep--;
yybegin(states[statep]);
BEGIN(states[statep]);
}
/*
@ -300,7 +300,7 @@ void write_block_header(char *type)
yyless(loop);
statep++;
states[statep] = LITEM;
yybegin(LITEM);
BEGIN(LITEM);
}
<LITEM>^.+":" {
(void)check_and_convert(yytext);
@ -318,7 +318,7 @@ void write_block_header(char *type)
printf("@end itemize\n\n");
printf("%s",&buffer[loop+1]);
statep--;
yybegin(states[statep]);
BEGIN(states[statep]);
}
/*
@ -338,27 +338,27 @@ void write_block_header(char *type)
yyless((len-loop)+2);
statep++;
states[statep] = BITEM;
yybegin(BITEM);
BEGIN(BITEM);
}
<BITEM>^" "*"*" {
printf("@item");
statep++;
states[statep] = BITEM_ITEM;
yybegin(BITEM_ITEM);
BEGIN(BITEM_ITEM);
}
<BITEM>"@" printf("@@");
<BITEM>^\n {
printf("@end itemize\n\n");
statep--;
yybegin(states[statep]);
BEGIN(states[statep]);
}
<BITEM_ITEM>[^\:]* {
printf(" @b{%s}\n\n",check_and_convert(yytext));
}
<BITEM_ITEM>":" {
statep--;
yybegin(states[statep]);
BEGIN(states[statep]);
}
/*
@ -369,13 +369,13 @@ void write_block_header(char *type)
(void)check_and_convert(&yytext[1]);
statep++;
states[statep] = HEADING;
yybegin(HEADING);
BEGIN(HEADING);
}
<HEADING>:[^\n] {
printf("@item @b{%s}\n",buffer);
write_underline(strlen(buffer),6,'~');
statep--;
yybegin(states[statep]);
BEGIN(states[statep]);
}
<HEADING>:\n"*"* {
if(need_closing == TRUE){
@ -385,7 +385,7 @@ void write_block_header(char *type)
printf("@chapter %s\n",buffer);
write_underline(strlen(buffer),9,'*');
statep--;
yybegin(states[statep]);
BEGIN(states[statep]);
}
<HEADING>:\n"="* {
if(need_closing == TRUE){
@ -395,7 +395,7 @@ void write_block_header(char *type)
printf("@section %s\n",buffer);
write_underline(strlen(buffer),9,'=');
statep--;
yybegin(states[statep]);
BEGIN(states[statep]);
}
<HEADING>"@" printf("@@");
<HEADING>:\n"-"* {
@ -406,7 +406,7 @@ void write_block_header(char *type)
printf("@subsection %s\n",buffer);
write_underline(strlen(buffer),12,'-');
statep--;
yybegin(states[statep]);
BEGIN(states[statep]);
}
/*
@ -417,10 +417,10 @@ void write_block_header(char *type)
printf("@example\n");
statep++;
states[statep] = EXAMPLE;
yybegin(EXAMPLE);
BEGIN(EXAMPLE);
}
<EXAMPLE>^" "
. yyecho();
. ECHO;
%%

View File

@ -19,13 +19,13 @@ int include_count = -1;
%%
"{" yybegin(COMMENT);
"{" BEGIN(COMMENT);
<COMMENT>"}" yybegin(INITIAL);
<COMMENT>"$include"[ \t]*"(" yybegin(INCLUDE);
<COMMENT>"}" BEGIN(INITIAL);
<COMMENT>"$include"[ \t]*"(" BEGIN(INCLUDE);
<COMMENT>[ \t]* /* skip whitespace */
<INCLUDE>")" yybegin(COMMENT);
<INCLUDE>")" BEGIN(COMMENT);
<INCLUDE>[ \t]* /* skip whitespace */
<INCLUDE>[^ \t\n() ]+ { /* get the include file name */
if ( include_count >= MAX_NEST){
@ -33,7 +33,7 @@ int include_count = -1;
exit( 1 );
}
include_stack[++include_count] = yy_current_buffer();
include_stack[++include_count] = YY_CURRENT_BUFFER;
yyin = fopen( yytext, "r" );
if ( ! yyin ){
@ -43,7 +43,7 @@ int include_count = -1;
yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE));
yybegin(INITIAL);
BEGIN(INITIAL);
}
<INCLUDE><<EOF>>
{
@ -61,11 +61,11 @@ int include_count = -1;
} else {
yy_delete_buffer(include_stack[include_count--] );
yy_switch_to_buffer(include_stack[include_count] );
yybegin(INCLUDE);
BEGIN(INCLUDE);
}
}
[a-z]+ yyecho();
.|\n yyecho();
[a-z]+ ECHO;
.|\n ECHO;

View File

@ -31,17 +31,17 @@ bad_string \'([^'\n]|\'\')+
%%
"{" yybegin(COMMENT1);
"{" BEGIN(COMMENT1);
<COMMENT1>[^}\n]+
<COMMENT1>\n ++line_number;
<COMMENT1><<EOF>> yyerror("EOF in comment");
<COMMENT1>"}" yybegin(INITIAL);
<COMMENT1>"}" BEGIN(INITIAL);
"(*" yybegin(COMMENT2);
"(*" BEGIN(COMMENT2);
<COMMENT2>[^)*\n]+
<COMMENT2>\n ++line_number;
<COMMENT2><<EOF>> yyerror("EOF in comment");
<COMMENT2>"*)" yybegin(INITIAL);
<COMMENT2>"*)" BEGIN(INITIAL);
<COMMENT2>[*)]
/* note that FILE and BEGIN are already

View File

@ -1,12 +1,12 @@
/*
* reject.lex: An example of yyreject() and yyunput()
* reject.lex: An example of REJECT and unput()
* misuse.
*/
%%
UNIX {
yyunput('U'); yyunput('N'); yyunput('G'); yyunput('\0');
yyreject();
unput('U'); unput('N'); unput('G'); unput('\0');
REJECT;
}
GNU printf("GNU is Not Unix!\n");
%%

View File

@ -16,7 +16,7 @@ char upper_replace[1024];
"yy" printf("%s",lower_replace);
"YY" printf("%s",upper_replace);
, yyecho();
, ECHO;
%%

View File

@ -1,5 +1,5 @@
/*
* string1.lex: Handling strings by using yyinput()
* string1.lex: Handling strings by using input()
*/
%{
@ -27,13 +27,13 @@ void yyerror(char *message)
buffer = malloc(ALLOC_SIZE);
max_size = ALLOC_SIZE;
inch = yyinput();
inch = input();
count = 0;
while(inch != EOF && inch != '"' && inch != '\n'){
if(inch == '\\'){
inch = yyinput();
inch = input();
switch(inch){
case '\n': inch = yyinput(); break;
case '\n': inch = input(); break;
case 'b' : inch = '\b'; break;
case 't' : inch = '\t'; break;
case 'n' : inch = '\n'; break;
@ -41,10 +41,10 @@ void yyerror(char *message)
case 'f' : inch = '\f'; break;
case 'r' : inch = '\r'; break;
case 'X' :
case 'x' : inch = yyinput();
case 'x' : inch = input();
if(isxdigit(inch)){
temp = hextoint(toupper(inch));
inch = yyinput();
inch = input();
if(isxdigit(inch)){
temp = (temp << 4) + hextoint(toupper(inch));
} else {
@ -59,14 +59,14 @@ void yyerror(char *message)
default:
if(isodigit(inch)){
temp = inch - '0';
inch = yyinput();
inch = input();
if(isodigit(inch)){
temp = (temp << 3) + (inch - '0');
} else {
unput(inch);
goto done;
}
inch = yyinput();
inch = input();
if(isodigit(inch)){
temp = (temp << 3) + (inch - '0');
} else {
@ -82,7 +82,7 @@ void yyerror(char *message)
buffer = realloc(buffer,max_size + ALLOC_SIZE);
max_size += ALLOC_SIZE;
}
inch = yyinput();
inch = input();
}
if(inch == EOF || inch == '\n'){
yyerror("Unterminated string.");

View File

@ -30,17 +30,17 @@ oct [0-7]{1,3}
\" {
buffer = malloc(1);
buffer_size = 1; strcpy(buffer,"");
yybegin(STRING);
BEGIN(STRING);
}
<STRING>\n {
yyerror("Unterminated string");
free(buffer);
yybegin(INITIAL);
BEGIN(INITIAL);
}
<STRING><<EOF>> {
yyerror("EOF in string");
free(buffer);
yybegin(INITIAL);
BEGIN(INITIAL);
}
<STRING>[^\\\n"] {
buffer = realloc(buffer,buffer_size+yyleng+1);
@ -87,7 +87,7 @@ oct [0-7]{1,3}
<STRING>\" {
printf("string = \"%s\"",buffer);
free(buffer);
yybegin(INITIAL);
BEGIN(INITIAL);
}
%%

View File

@ -1,6 +1,6 @@
/*
* unput.l : An example of what *not*
* to do with yyunput().
* to do with unput().
*/
@ -24,7 +24,7 @@ void putback_yytext(void)
strcpy(buffer,yytext);
printf("Got: %s\n",yytext);
for(i=0; i<l; i++){
yyunput(buffer[i]);
unput(buffer[i]);
}
}

View File

@ -4,13 +4,14 @@
void user_action(void);
#define YY_USER_ACTION user_action();
%}
%option pre-action = "user_action();"
%%
.* yyecho();
\n yyecho();
.* ECHO;
\n ECHO;
%%

View File

@ -1,4 +1,6 @@
%{
#define YY_USER_INIT open_input_file()
extern FILE *yyin;
void open_input_file(void)
@ -25,5 +27,4 @@ void open_input_file(void)
}
%}
%option user-init = "open_input_file();"
%%

View File

@ -16,14 +16,14 @@ void yyerror(char *message)
%x STRING
%%
\" yybegin(STRING);
\" BEGIN(STRING);
<STRING>[^\\\n"]* yymore();
<STRING><<EOF>> yyerror("EOF in string."); yybegin(INITIAL);
<STRING>\n yyerror("Unterminated string."); yybegin(INITIAL);
<STRING><<EOF>> yyerror("EOF in string."); BEGIN(INITIAL);
<STRING>\n yyerror("Unterminated string."); BEGIN(INITIAL);
<STRING>\\\n yymore();
<STRING>\" {
yytext[yyleng-1] = '\0';
printf("string = \"%s\"",yytext); yybegin(INITIAL);
printf("string = \"%s\"",yytext); BEGIN(INITIAL);
}
%%

View File

@ -16,11 +16,11 @@ void yyerror(char *message)
%x STRING
%%
\" yybegin(STRING);
\" BEGIN(STRING);
<STRING>[^\\\n"]* yymore();
<STRING><<EOF>> yyerror("EOF in string."); yybegin(INITIAL);
<STRING>\n yyerror("Unterminated string."); yybegin(INITIAL);
<STRING><<EOF>> yyerror("EOF in string."); BEGIN(INITIAL);
<STRING>\n yyerror("Unterminated string."); BEGIN(INITIAL);
<STRING>\\\n {
bcopy(yytext,yytext+2,yyleng-2);
yytext += 2; yyleng -= 2;
@ -28,6 +28,6 @@ void yyerror(char *message)
}
<STRING>\" {
yyleng -= 1; yytext[yyleng] = '\0';
printf("string = \"%s\"",yytext); yybegin(INITIAL);
printf("string = \"%s\"",yytext); BEGIN(INITIAL);
}
%%

1
lib/.gitignore vendored
View File

@ -1,4 +1,3 @@
*.la
*.lo
*.o
*.obj

4
lib/Makefile.am Normal file
View File

@ -0,0 +1,4 @@
noinst_LTLIBRARIES = libcompat.la
libcompat_la_SOURCES = lib.c
libcompat_la_LIBADD = $(LTLIBOBJS)

9
lib/lib.c Normal file
View File

@ -0,0 +1,9 @@
/* Since building an empty library could cause problems, we provide a
* function to go into the library. We could make this non-trivial by
* moving something that flex treats as a library function into this
* directory. */
extern void do_nothing(void);
void do_nothing(void){ return;}

View File

@ -3,7 +3,7 @@
#include <sys/types.h>
void *malloc (size_t n);
void *malloc ();
/* Allocate an N-byte block of memory from the heap.
If N is zero, allocate a 1-byte block. */

49
lib/reallocarray.c Normal file
View File

@ -0,0 +1,49 @@
/* $OpenBSD: reallocarray.c,v 1.2 2014/12/08 03:45:00 bcook Exp $ */
/*
* Copyright (c) 2008 Otto Moerbeek <otto@drijf.net>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* OPENBSD ORIGINAL: lib/libc/stdlib/reallocarray.c */
#include <config.h>
#ifndef HAVE_REALLOCARRAY
#undef reallocarray
#include <sys/types.h>
#include <errno.h>
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
#include <stdlib.h>
void *reallocarray(void *, size_t, size_t);
/*
* This is sqrt(SIZE_MAX+1), as s1*s2 <= SIZE_MAX
* if both s1 < MUL_NO_OVERFLOW and s2 < MUL_NO_OVERFLOW
*/
#define MUL_NO_OVERFLOW ((size_t)1 << (sizeof(size_t) * 4))
void *
reallocarray(void *optr, size_t nmemb, size_t size)
{
if ((nmemb >= MUL_NO_OVERFLOW || size >= MUL_NO_OVERFLOW) &&
nmemb > 0 && SIZE_MAX / nmemb < size) {
errno = ENOMEM;
return NULL;
}
return realloc(optr, size * nmemb);
}
#endif /* HAVE_REALLOCARRAY */

View File

@ -1,175 +0,0 @@
# ===========================================================================
# https://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_PROG_CC_FOR_BUILD
#
# DESCRIPTION
#
# This macro searches for a C compiler that generates native executables,
# that is a C compiler that surely is not a cross-compiler. This can be
# useful if you have to generate source code at compile-time like for
# example GCC does.
#
# The macro sets the CC_FOR_BUILD and CPP_FOR_BUILD macros to anything
# needed to compile or link (CC_FOR_BUILD) and preprocess (CPP_FOR_BUILD).
# The value of these variables can be overridden by the user by specifying
# a compiler with an environment variable (like you do for standard CC).
#
# It also sets BUILD_EXEEXT and BUILD_OBJEXT to the executable and object
# file extensions for the build platform, and GCC_FOR_BUILD to `yes' if
# the compiler we found is GCC. All these variables but GCC_FOR_BUILD are
# substituted in the Makefile.
#
# LICENSE
#
# Copyright (c) 2008 Paolo Bonzini <bonzini@gnu.org>
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved. This file is offered as-is, without any
# warranty.
#serial 26
AU_ALIAS([AC_PROG_CC_FOR_BUILD], [AX_PROG_CC_FOR_BUILD])
AC_DEFUN([AX_PROG_CC_FOR_BUILD], [dnl
AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([AC_PROG_CPP])dnl
AC_REQUIRE([AC_CANONICAL_BUILD])dnl
dnl Use the standard macros, but make them use other variable names
dnl
pushdef([ac_cv_prog_CPP], ac_cv_build_prog_CPP)dnl
pushdef([ac_cv_prog_gcc], ac_cv_build_prog_gcc)dnl
pushdef([ac_cv_prog_cc_c89], ac_cv_build_prog_cc_c89)dnl
pushdef([ac_cv_prog_cc_c99], ac_cv_build_prog_cc_c99)dnl
pushdef([ac_cv_prog_cc_c11], ac_cv_build_prog_cc_c11)dnl
pushdef([ac_cv_prog_cc_c23], ac_cv_build_prog_cc_c23)dnl
pushdef([ac_cv_prog_cc_stdc], ac_cv_build_prog_cc_stdc)dnl
pushdef([ac_cv_prog_cc_works], ac_cv_build_prog_cc_works)dnl
pushdef([ac_cv_prog_cc_cross], ac_cv_build_prog_cc_cross)dnl
pushdef([ac_cv_prog_cc_g], ac_cv_build_prog_cc_g)dnl
pushdef([ac_prog_cc_stdc], ac_build_prog_cc_stdc)dnl
pushdef([ac_exeext], ac_build_exeext)dnl
pushdef([ac_objext], ac_build_objext)dnl
pushdef([CC], CC_FOR_BUILD)dnl
pushdef([CPP], CPP_FOR_BUILD)dnl
pushdef([GCC], GCC_FOR_BUILD)dnl
pushdef([CFLAGS], CFLAGS_FOR_BUILD)dnl
pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD)dnl
pushdef([LDFLAGS], LDFLAGS_FOR_BUILD)dnl
pushdef([host], build)dnl
pushdef([host_alias], build_alias)dnl
pushdef([host_cpu], build_cpu)dnl
pushdef([host_vendor], build_vendor)dnl
pushdef([host_os], build_os)dnl
pushdef([ac_cv_host], ac_cv_build)dnl
pushdef([ac_cv_host_alias], ac_cv_build_alias)dnl
pushdef([ac_cv_host_cpu], ac_cv_build_cpu)dnl
pushdef([ac_cv_host_vendor], ac_cv_build_vendor)dnl
pushdef([ac_cv_host_os], ac_cv_build_os)dnl
pushdef([ac_tool_prefix], ac_build_tool_prefix)dnl
pushdef([am_cv_CC_dependencies_compiler_type], am_cv_build_CC_dependencies_compiler_type)dnl
pushdef([am_cv_prog_cc_c_o], am_cv_build_prog_cc_c_o)dnl
pushdef([cross_compiling], cross_compiling_build)dnl
dnl
dnl These variables are problematic to rename by M4 macros, so we save
dnl their values in alternative names, and restore the values later.
dnl
dnl _AC_COMPILER_EXEEXT and _AC_COMPILER_OBJEXT internally call
dnl AC_SUBST which prevents the renaming of EXEEXT and OBJEXT
dnl variables. It's not a good idea to rename ac_cv_exeext and
dnl ac_cv_objext either as they're related.
dnl Renaming ac_exeext and ac_objext is safe though.
dnl
ac_cv_host_exeext=$ac_cv_exeext
AS_VAR_SET_IF([ac_cv_build_exeext],
[ac_cv_exeext=$ac_cv_build_exeext],
[AS_UNSET([ac_cv_exeext])])
ac_cv_host_objext=$ac_cv_objext
AS_VAR_SET_IF([ac_cv_build_objext],
[ac_cv_objext=$ac_cv_build_objext],
[AS_UNSET([ac_cv_objext])])
dnl
dnl ac_cv_c_compiler_gnu is used in _AC_LANG_COMPILER_GNU (called by
dnl AC_PROG_CC) indirectly.
dnl
ac_cv_host_c_compiler_gnu=$ac_cv_c_compiler_gnu
AS_VAR_SET_IF([ac_cv_build_c_compiler_gnu],
[ac_cv_c_compiler_gnu=$ac_cv_build_c_compiler_gnu],
[AS_UNSET([ac_cv_c_compiler_gnu])])
cross_compiling_build=no
ac_build_tool_prefix=
AS_IF([test -n "$build"], [ac_build_tool_prefix="$build-"],
[test -n "$build_alias"],[ac_build_tool_prefix="$build_alias-"])
AC_LANG_PUSH([C])
AC_PROG_CC
_AC_COMPILER_EXEEXT
_AC_COMPILER_OBJEXT
AC_PROG_CPP
BUILD_EXEEXT=$ac_cv_exeext
BUILD_OBJEXT=$ac_cv_objext
dnl Restore the old definitions
dnl
popdef([cross_compiling])dnl
popdef([am_cv_prog_cc_c_o])dnl
popdef([am_cv_CC_dependencies_compiler_type])dnl
popdef([ac_tool_prefix])dnl
popdef([ac_cv_host_os])dnl
popdef([ac_cv_host_vendor])dnl
popdef([ac_cv_host_cpu])dnl
popdef([ac_cv_host_alias])dnl
popdef([ac_cv_host])dnl
popdef([host_os])dnl
popdef([host_vendor])dnl
popdef([host_cpu])dnl
popdef([host_alias])dnl
popdef([host])dnl
popdef([LDFLAGS])dnl
popdef([CPPFLAGS])dnl
popdef([CFLAGS])dnl
popdef([GCC])dnl
popdef([CPP])dnl
popdef([CC])dnl
popdef([ac_objext])dnl
popdef([ac_exeext])dnl
popdef([ac_prog_cc_stdc])dnl
popdef([ac_cv_prog_cc_g])dnl
popdef([ac_cv_prog_cc_cross])dnl
popdef([ac_cv_prog_cc_works])dnl
popdef([ac_cv_prog_cc_stdc])dnl
popdef([ac_cv_prog_cc_c23])dnl
popdef([ac_cv_prog_cc_c11])dnl
popdef([ac_cv_prog_cc_c99])dnl
popdef([ac_cv_prog_cc_c89])dnl
popdef([ac_cv_prog_gcc])dnl
popdef([ac_cv_prog_CPP])dnl
dnl
ac_cv_exeext=$ac_cv_host_exeext
EXEEXT=$ac_cv_host_exeext
ac_cv_objext=$ac_cv_host_objext
OBJEXT=$ac_cv_host_objext
ac_cv_c_compiler_gnu=$ac_cv_host_c_compiler_gnu
ac_compiler_gnu=$ac_cv_host_c_compiler_gnu
dnl restore global variables ac_ext, ac_cpp, ac_compile,
dnl ac_link, ac_compiler_gnu (dependent on the current
dnl language after popping):
AC_LANG_POP([C])
dnl Finally, set Makefile variables
dnl
AC_SUBST([BUILD_EXEEXT])dnl
AC_SUBST([BUILD_OBJEXT])dnl
AC_SUBST([CFLAGS_FOR_BUILD])dnl
AC_SUBST([CPPFLAGS_FOR_BUILD])dnl
AC_SUBST([LDFLAGS_FOR_BUILD])dnl
])

View File

@ -1,2 +1,23 @@
# List of available languages.
bg ca da de en@boldquot en@quot eo es fi fr ga hr ko nl pl pt pt_BR ro ru sr sv tr uk vi zh_CN zh_TW
ca
da
de
en@quot
en@boldquot
eo
es
fi
fr
ga
hr
ko
nl
pl
pt_BR
ro
ru
sr
sv
tr
vi
zh_CN
zh_TW

View File

@ -8,7 +8,7 @@ subdir = po
top_builddir = ..
# These options get passed to xgettext.
XGETTEXT_OPTIONS = --language=C --keyword=_ --keyword=N_
XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
# This is the copyright holder that gets inserted into the header of the
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
@ -20,13 +20,6 @@ XGETTEXT_OPTIONS = --language=C --keyword=_ --keyword=N_
# their copyright.
COPYRIGHT_HOLDER =
# This tells whether or not to prepend "GNU " prefix to the package
# name that gets inserted into the header of the $(DOMAIN).pot file.
# Possible values are "yes", "no", or empty. If it is empty, try to
# detect it automatically by scanning the files in $(top_srcdir) for
# "GNU packagename" string.
PACKAGE_GNU = "no"
# This is the email address or URL to which the translators shall report
# bugs in the untranslated strings:
# - Strings which are not entire sentences, see the maintainer guidelines
@ -46,33 +39,3 @@ MSGID_BUGS_ADDRESS = flex-devel@lists.sourceforge.net
# This is the list of locale categories, beyond LC_MESSAGES, for which the
# message catalogs shall be used. It is usually empty.
EXTRA_LOCALE_CATEGORIES =
# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
# context. Possible values are "yes" and "no". Set this to yes if the
# package uses functions taking also a message context, like pgettext(), or
# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
USE_MSGCTXT = no
# These options get passed to msgmerge.
# Useful options are in particular:
# --previous to keep previous msgids of translated messages,
# --quiet to reduce the verbosity.
MSGMERGE_OPTIONS =
# These options get passed to msginit.
# If you want to disable line wrapping when writing PO files, add
# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and
# MSGINIT_OPTIONS.
MSGINIT_OPTIONS =
# This tells whether or not to regenerate a PO file when $(DOMAIN).pot
# has changed. Possible values are "yes" and "no". Set this to no if
# the POT file is checked in the repository and the version control
# program ignores timestamps.
PO_DEPENDS_ON_POT = yes
# This tells whether or not to forcibly update $(DOMAIN).pot and
# regenerate PO files on "make dist". Possible values are "yes" and
# "no". Set this to no if the POT file and PO files are maintained
# externally.
DIST_DEPENDS_ON_UPDATE_PO = no

View File

@ -12,6 +12,7 @@ src/options.c
src/parse.y
src/scan.l
src/scanopt.c
src/skel.c
src/sym.c
src/tblcmp.c
src/yylex.c

9
po/Rules-getpo Normal file
View File

@ -0,0 +1,9 @@
# Rules to fetch the translation project's po files for a domain
# Just rsync the *.po files for a particular textual domain into the
# po/ subdirectory of the project's source tree
getpo:
rsync -Ltvz translationproject.org::tp/latest/flex/*.po $(top_srcdir)/po
.PHONY: getpo

972
po/bg.po
View File

@ -1,972 +0,0 @@
# Bulgarian translation of flex po-file.
# Copyright (C) 2019, 2021 The Flex Project (msgids)
# This file is distributed under the same license as the flex package.
# Alexander Shopov <ash@kambanaria.org>, 2019, 2021.
msgid ""
msgstr ""
"Project-Id-Version: flex 2.6.4\n"
"Report-Msgid-Bugs-To: flex-devel@lists.sourceforge.net\n"
"POT-Creation-Date: 2022-09-27 14:18-0400\n"
"PO-Revision-Date: 2022-01-03 10:52+0100\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@ludost.net>\n"
"Language: bg\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/buf.c:61
msgid "Allocation of buffer to print string failed"
msgstr "Неуспешно заделяне на буфер за отпечатване на низ"
#: src/ccl.c:80
msgid "internal error: trying to add a char to a non-last ccl.\n"
msgstr ""
#: src/dfa.c:59
#, c-format
msgid "State #%d is non-accepting -\n"
msgstr "Състояние №%d е неприемащо —\n"
#: src/dfa.c:119
msgid "dangerous trailing context"
msgstr "опасен последващ контекст"
#: src/dfa.c:159
#, c-format
msgid " associated rule line numbers:"
msgstr " номера на редове на съответното правило:"
#: src/dfa.c:193
#, c-format
msgid " out-transitions: "
msgstr " изходящи преходи: "
#: src/dfa.c:201
#, c-format
msgid ""
"\n"
" jam-transitions: EOF "
msgstr ""
"\n"
" обобщени преходи: край на файл"
#: src/dfa.c:331
msgid "consistency check failed in epsclosure()"
msgstr "неуспешна проверка за консистентност в „epsclosure()“"
#: src/dfa.c:422
msgid ""
"\n"
"\n"
"DFA Dump:\n"
"\n"
msgstr ""
"\n"
"\n"
"Извеждане на ДКА:\n"
"\n"
#: src/dfa.c:558
msgid "could not create unique end-of-buffer state"
msgstr "уникалното състояние за край на буфер не може да се създаде"
#: src/dfa.c:579
#, c-format
msgid "state # %d:\n"
msgstr "състояние №%d:\n"
#: src/dfa.c:738
msgid "Could not write yynxt_tbl[][]"
msgstr "„yynxt_tbl[][]“ не може да се запише"
#: src/dfa.c:1001
msgid "bad transition character detected in sympartition()"
msgstr "в „sympartition()“ има неправилен знак за преход"
#: src/gen.c:379
msgid ""
"\n"
"\n"
"Equivalence Classes:\n"
"\n"
msgstr ""
"\n"
"\n"
"Класове на еквивалентност:\n"
"\n"
#: src/gen.c:425 src/gen.c:454 src/gen.c:638
#, c-format
msgid "state # %d accepts: [%d]\n"
msgstr "състояние №%d приема: [%d]\n"
#: src/gen.c:533
#, c-format
msgid "state # %d accepts: "
msgstr "състояние №%d приема: "
#: src/gen.c:582
msgid "Could not write yyacclist_tbl"
msgstr "„yyacclist_tbl“ не може да се запише"
#: src/gen.c:659
msgid "Could not write yyacc_tbl"
msgstr "„yyacc_tbl“ не може да се запише"
#: src/gen.c:674 src/gen.c:947 src/gen.c:974
msgid "Could not write ecstbl"
msgstr "„ecstbl“ не може да се запише"
#: src/gen.c:694
msgid ""
"\n"
"\n"
"Meta-Equivalence Classes:\n"
msgstr ""
"\n"
"\n"
"Класове за мета-еквивалентност:\n"
#: src/gen.c:714
msgid "Could not write yymeta_tbl"
msgstr "„yymeta_tbl“ не може да се запише"
#: src/gen.c:774
msgid "Could not write yybase_tbl"
msgstr "„yybase_tbl“ не може да се запише"
#: src/gen.c:805
msgid "Could not write yydef_tbl"
msgstr "„yydef_tbl“ не може да се запише"
#: src/gen.c:844
msgid "Could not write yynxt_tbl"
msgstr "„yynxt_tbl“ не може да се запише"
#: src/gen.c:877
msgid "Could not write yychk_tbl"
msgstr "„yychk_tbl“ не може да се запише"
#: src/gen.c:932 src/gen.c:965
msgid "Could not write ftbl"
msgstr "„ftbl“ не може да се запише"
#: src/gen.c:938
msgid "Could not write ssltbl"
msgstr "„ssltbl“ не може да се запише"
#: src/gen.c:1014
msgid "Could not write eoltbl"
msgstr "„eoltbl“ не може да се запише"
#: src/gen.c:1061
msgid "Could not write yynultrans_tbl"
msgstr "„yynultrans_tbl“ не може да се запише"
#: src/main.c:169
msgid "rule cannot be matched"
msgstr "правилото не напасва"
#: src/main.c:174
msgid "-s option given but default rule can be matched"
msgstr "зададена е опцията „-s“, но стандартното правило напасва"
#: src/main.c:317
msgid "Can't use -+ with -l option"
msgstr "опциите „-+“ и „-l“ са несъвместими"
#: src/main.c:320
msgid "Can't use -f or -F with -l option"
msgstr "опциите „-f“/„-F“ и „-l“ са несъвместими"
#: src/main.c:324
#, fuzzy
msgid "Can't use --ctrl.reentrant or --bison-bridge with -l option"
msgstr "опциите „--reentrant“/„--bison-bridge“ и „-l“ са несъвместими"
#: src/main.c:356
msgid "-Cf/-CF and -Cm don't make sense together"
msgstr "опциите „-Cf“/„-CF“ и „-Cm“ са несъвместими"
#: src/main.c:359
msgid "-Cf/-CF and -I are incompatible"
msgstr "опциите „-Cf“/„-CF“ и „-I“ са несъвместими"
#: src/main.c:363
msgid "-Cf/-CF are incompatible with lex-compatibility mode"
msgstr "опциите „-Cf“/„-CF“ са несъвместими с режима за съвместимост с „lex“"
#: src/main.c:368
msgid "-Cf and -CF are mutually exclusive"
msgstr "опциите „-Cf“ и „-CF“ са несъвместими"
#: src/main.c:372
msgid "Can't use -+ with -CF option"
msgstr "опциите „-+“ и „-CF“ са несъвместими"
#: src/main.c:375
#, c-format
msgid "%array incompatible with -+ option"
msgstr "опцията „-+“ e несъвместима с декларация „%array“"
#: src/main.c:380
msgid "Options -+ and --reentrant are mutually exclusive."
msgstr "Опциите „-+“ и „--reentrant“ са несъвместими."
#: src/main.c:383
msgid "bison bridge not supported for the C++ scanner."
msgstr ""
"анализатори, които са на C++, не поддържат допълнителната поддръжка за "
"„bison“."
#: src/main.c:422 src/main.c:1235
#, c-format
msgid "could not create %s"
msgstr "„%s“ не може да се създаде"
#: src/main.c:443
#, c-format
msgid "%option yyclass only meaningful for C++ scanners"
msgstr ""
"директивата за „%option“ — „yyclass“ важи само за анализаторите, които са на "
"C++"
#: src/main.c:447
#, c-format
msgid "input error reading skeleton file %s"
msgstr "входна грешка при изчитане на скелетния файл „%s“"
#: src/main.c:451
#, c-format
msgid "error closing skeleton file %s"
msgstr "грешка при затваряне на скелетния файл „%s“"
#: src/main.c:457
#, c-format
msgid "error writing output file %s"
msgstr "грешка при записването на изходния файл „%s“"
#: src/main.c:461
#, c-format
msgid "error closing output file %s"
msgstr "грешка при затварянето на изходния файл „%s“"
#: src/main.c:465
#, c-format
msgid "error deleting output file %s"
msgstr "грешка при изтриването на изходния файл „%s“"
#: src/main.c:472
#, c-format
msgid "No backing up.\n"
msgstr "Без връщане назад.\n"
#: src/main.c:476
#, c-format
msgid "%d backing up (non-accepting) states.\n"
msgstr "%d състояния за връщане (неприемащи)\n"
#: src/main.c:480
#, c-format
msgid "Compressed tables always back up.\n"
msgstr "Компресираните таблици винаги водят до връщане назад.\n"
#: src/main.c:483
#, c-format
msgid "error writing backup file %s"
msgstr "грешка при записа на файла с връщанията назад „%s“"
#: src/main.c:487
#, c-format
msgid "error closing backup file %s"
msgstr "грешка при затварянето на файла с връщанията назад „%s“"
#: src/main.c:492
#, c-format
msgid "%s version %s usage statistics:\n"
msgstr "Статистика за употреба на %s, версия %s:\n"
#: src/main.c:495
#, c-format
msgid " scanner options: -"
msgstr " опции на лексическия анализатор: -"
#: src/main.c:574
#, c-format
msgid " %d/%d NFA states\n"
msgstr " %d/%d състояния на НКА\n"
#: src/main.c:576
#, c-format
msgid " %d/%d DFA states (%d words)\n"
msgstr " %d/%d състояния на ДКА (%d думи)\n"
#: src/main.c:578
#, c-format
msgid " %d rules\n"
msgstr " %d правила\n"
#: src/main.c:583
#, c-format
msgid " No backing up\n"
msgstr " Без връщане назад\n"
#: src/main.c:587
#, c-format
msgid " %d backing-up (non-accepting) states\n"
msgstr " %d състояния за връщане (неприемащи)\n"
#: src/main.c:592
#, c-format
msgid " Compressed tables always back-up\n"
msgstr " Компресираните таблици винаги водят до връщане\n"
#: src/main.c:596
#, c-format
msgid " Beginning-of-line patterns used\n"
msgstr " Използвани са правила за начало на ред\n"
#: src/main.c:598
#, c-format
msgid " %d/%d start conditions\n"
msgstr " %d/%d начални състояния\n"
#: src/main.c:602
#, c-format
msgid " %d epsilon states, %d double epsilon states\n"
msgstr " %d ε-състояния, %d двойни ε-състояния\n"
#: src/main.c:606
#, c-format
msgid " no character classes\n"
msgstr " няма класове знаци\n"
#: src/main.c:610
#, c-format
msgid " %d/%d character classes needed %d/%d words of storage, %d reused\n"
msgstr ""
" %d/%d класове за знаци изискваха %d/%d думи за съхранение, преизползвани "
"са %d\n"
#: src/main.c:615
#, c-format
msgid " %d state/nextstate pairs created\n"
msgstr " %d двойки състояние/преход\n"
#: src/main.c:618
#, c-format
msgid " %d/%d unique/duplicate transitions\n"
msgstr " %d/%d уникални/повтарящи се преходи\n"
#: src/main.c:623
#, c-format
msgid " %d table entries\n"
msgstr " %d таблични записи\n"
#: src/main.c:631
#, c-format
msgid " %d/%d base-def entries created\n"
msgstr " %d/%d записи за основни дефиниции\n"
#: src/main.c:635
#, c-format
msgid " %d/%d (peak %d) nxt-chk entries created\n"
msgstr " %d/%d (максимум %d) записи\n"
#: src/main.c:639
#, c-format
msgid " %d/%d (peak %d) template nxt-chk entries created\n"
msgstr " %d/%d (максимум %d) шаблонни записи\n"
#: src/main.c:643
#, c-format
msgid " %d empty table entries\n"
msgstr " %d празни таблични записи\n"
#: src/main.c:645
#, c-format
msgid " %d protos created\n"
msgstr " %d създадени прототипи\n"
#: src/main.c:648
#, c-format
msgid " %d templates created, %d uses\n"
msgstr " %d създадени шаблони, %d употреби\n"
#: src/main.c:656
#, c-format
msgid " %d/%d equivalence classes created\n"
msgstr " създадени са %d/%d класове за еквивалентност\n"
#: src/main.c:664
#, c-format
msgid " %d/%d meta-equivalence classes created\n"
msgstr " създадени са %d/%d класове за мета-еквивалентност\n"
#: src/main.c:670
#, c-format
msgid " %d (%d saved) hash collisions, %d DFAs equal\n"
msgstr " %d (%d запазени) конфликти по суми, %d ДКА са еднакви\n"
#: src/main.c:672
#, c-format
msgid " %d sets of reallocations needed\n"
msgstr " необходими са %d пъти заделяния на памет наново\n"
#: src/main.c:674
#, c-format
msgid " %d total table entries needed\n"
msgstr " необходими са общо %d записи в таблица\n"
#: src/main.c:735
#, c-format
msgid "Internal error. flexopts are malformed.\n"
msgstr "Вътрешна грешка. Неправилни опции за flex.\n"
#: src/main.c:745
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "За повече информация изпълнете „%s --help“.\n"
#: src/main.c:807
#, c-format
msgid "unknown -C option '%c'"
msgstr "непозната опция към „-C“: „%c“"
#: src/main.c:1195
msgid "fatal parse error"
msgstr "фатална грешка на анализатора"
#: src/main.c:1247
msgid "could not write tables header"
msgstr "заглавният файл за таблиците не може за се запише"
#: src/main.c:1251
#, c-format
msgid "can't open skeleton file %s"
msgstr "скелетният файл „%s“ не може да се отвори"
#: src/main.c:1254
msgid "Prefix cannot include '[' or ']'"
msgstr "Префиксът не трябва да съдържа „[“ или „]“"
#: src/main.c:1322
#, c-format
msgid "could not create backing-up info file %s"
msgstr "файлът с информация за връщане назад не може да се създаде: „%s“"
#: src/main.c:1343
#, c-format
msgid "-l AT&T lex compatibility option entails a large performance penalty\n"
msgstr ""
"опцията за съвместимост с „lex“ на AT&T: „-l“, води до голяма загуба на "
"производителност\n"
#: src/main.c:1346
#, c-format
msgid " and may be the actual source of other reported performance penalties\n"
msgstr " и може да доведе до допълнителни проблеми с производителността\n"
#: src/main.c:1352
#, c-format
msgid ""
"%%option yylineno entails a performance penalty ONLY on rules that can match "
"newline characters\n"
msgstr ""
"директивата за „%%option“ — „yylineno“ води до загуба на производителност, "
"само за правилата, които напасват знак за нов ред\n"
#: src/main.c:1359
#, c-format
msgid "-I (interactive) entails a minor performance penalty\n"
msgstr "„-I“ (интерактивният режим) води до малка загуба на производителност\n"
#: src/main.c:1364
#, c-format
msgid "yymore() entails a minor performance penalty\n"
msgstr "„yymore()“ води до малка загуба на производителност\n"
#: src/main.c:1370
#, c-format
msgid "REJECT entails a large performance penalty\n"
msgstr "Отхвърлянето (REJECT) води до голяма загуба на производителност\n"
#: src/main.c:1375
#, c-format
msgid "Variable trailing context rules entail a large performance penalty\n"
msgstr ""
"Правила с последващ контекст, който не е константен, водят до голяма загуба "
"на производителност\n"
#: src/main.c:1387
msgid "REJECT cannot be used with -f or -F"
msgstr "Отхвърлянето (REJECT) е несъвместимо с „-f“ или „-F“"
#: src/main.c:1390
#, c-format
msgid "%option yylineno cannot be used with REJECT"
msgstr ""
"директивата за „%option“ — „yylineno“ е несъвместима с отхвърляне (REJECT)"
#: src/main.c:1393
msgid "variable trailing context rules cannot be used with -f or -F"
msgstr ""
"правила с последващ контекст, който не е константен, не може да се ползват "
"заедно с „-f“ или „-F“"
#: src/main.c:1428
msgid "allocation of macro definition failed"
msgstr "неуспешно заделяне на памет за дефиниция на макрос"
#: src/main.c:1745
#, c-format
msgid "Usage: %s [OPTIONS] [FILE]...\n"
msgstr "Употреба: %s [ОПЦИЯ] [ФАЙЛ]…\n"
#: src/main.c:1748
#, fuzzy, c-format
msgid ""
"Generates programs that perform pattern-matching on text.\n"
"\n"
"Table Compression:\n"
" -Ca, --align trade off larger tables for better memory alignment\n"
" -Ce, --ecs construct equivalence classes\n"
" -Cf do not compress tables; use -f representation\n"
" -CF do not compress tables; use -F representation\n"
" -Cm, --meta-ecs construct meta-equivalence classes\n"
" -Cr, --read use read() instead of stdio for scanner input\n"
" -f, --full generate fast, large scanner. Same as -Cfr\n"
" -F, --fast use alternate table representation. Same as -CFr\n"
" -Cem default compression (same as --ecs --meta-ecs)\n"
"\n"
"Debugging:\n"
" -d, --debug enable debug mode in scanner\n"
" -b, --backup write backing-up information to %s\n"
" -p, --perf-report write performance report to stderr\n"
" -s, --nodefault suppress default rule to ECHO unmatched text\n"
" -T, --env.trace %s should run in env.trace mode\n"
" -w, --nowarn do not generate warnings\n"
" -v, --verbose write summary of scanner statistics to stdout\n"
" --hex use hexadecimal numbers instead of octal in debug "
"outputs\n"
"\n"
"Files:\n"
" -o, --outfile=FILE specify output filename\n"
" -S, --skel=FILE specify skeleton file\n"
" -t, --stdout write scanner on stdout instead of %s\n"
" --yyclass=NAME name of C++ class\n"
" --header-file=FILE create a C header file in addition to the "
"scanner\n"
" --tables-file[=FILE] write tables to FILE\n"
" --backup-file=FILE write backing-up information to FILE\n"
"\n"
"Scanner behavior:\n"
" -7, --7bit generate 7-bit scanner\n"
" -8, --8bit generate 8-bit scanner\n"
" -B, --batch generate batch scanner (opposite of -I)\n"
" -i, --case-insensitive ignore case in patterns\n"
" -l, --lex-compat maximal compatibility with original lex\n"
" -X, --posix-compat maximal compatibility with POSIX lex\n"
" -I, --interactive generate interactive scanner (opposite of -B)\n"
" --yylineno track line count in yylineno\n"
"\n"
"Generated code:\n"
" -+, --c++ generate C++ scanner class\n"
" -Dmacro[=defn] #define macro defn (default defn is '1')\n"
" -e, --emit=LANG Specify target language\n"
" -L, --noline suppress #line directives in scanner\n"
" -P, --prefix=STRING use STRING as prefix instead of \"yy\"\n"
" -R, --reentrant generate a reentrant scanner\n"
" --bison-bridge scanner for Bison pure parser.\n"
" --bison-locations include yylloc support.\n"
" --stdinit initialize yyin/yyout to stdin/stdout\n"
" --nounistd do not include <unistd.h>\n"
" --noFUNCTION do not generate a particular FUNCTION\n"
"\n"
"Miscellaneous:\n"
" -c do-nothing POSIX option\n"
" -n do-nothing POSIX option\n"
" -?\n"
" -h, --help produce this help message\n"
" -V, --version report %s version\n"
msgstr ""
"Генериране на програма за лексически анализ на текст.\n"
"\n"
"Компресиране на таблиците\n"
" -Ca, --align по-точно подравняване в паметта, но по-големи "
"таблици\n"
" -Ce, --ecs създаване на класовете за еквивалентност\n"
" -Cf без компресия на таблиците, представяне както с „-"
"f“\n"
" -CF без компресия на таблиците, представяне както с „-"
"F“\n"
" -Cm, --meta-ecs създаване на класовете за мета-еквивалентност\n"
" -Cr, --read четене чрез „read()“, а не от стандартния вход\n"
" -f, --full генериране на голям, но бърз анализатор, (≡„-"
"Cfr“)\n"
" -F, --fast алтернативно представяне на таблиците (≡„-CFr“)\n"
" -Cem стандартна компресия (≡„--ecs --meta-ecs“)\n"
"\n"
"Изчистване на грешки:\n"
" -d, --debug режим на изчистване на грешки в анализатора\n"
" -b, --backup запазване на информацията за връщане назад в "
"„%s“\n"
" -p, --perf-report доклад за производителността към стандартната "
"грешка\n"
" -s, --nodefault потискане на стандартното правило за извеждане "
"на\n"
" текста, който не напасва\n"
" -T, --trace „%s“ да се изпълнява в режим на трасиране\n"
" -w, --nowarn без предупреждения\n"
" -v, --verbose доклад-статистика за анализатора към стандартния "
"изход\n"
"\n"
"Файлове:\n"
" -o, --outfile=ФАЙЛ задаване на изходния ФАЙЛ\n"
" -S, --skel=ФАЙЛ задаване на скелетния ФАЙЛ\n"
" -t, --stdout извеждане на анализатора на стандартния изход, а\n"
" не в „%s“\n"
" --yyclass=ИМЕ ИМЕ на клас за C++\n"
" --header-file=ФАЙЛ създаване и на заглавен файл на C\n"
" --tables-file[=ФАЙЛ] извеждане на таблиците във ФАЙЛа\n"
"\n"
"Поведение на анализатора:\n"
" -7, --7bit анализатор за 7-битов вход\n"
" -8, --8bit анализатор за 8-битов вход\n"
" -B, --batch пакетен анализатор (обратното на „-I“)\n"
" -i, --case-insensitive без разлика между главни и малки знаци\n"
" -l, --lex-compat максимална съвместимост с оригиналния „lex“\n"
" -X, --posix-compat максимална съвместимост с „lex“ по POSIX\n"
" -I, --interactive интерактивен анализатор (обратното на „-B“)\n"
" --yylineno следене на броя на редовете чрез „yylineno“\n"
"\n"
"Генериран код:\n"
" -+, --c++ генериране на анализатор като клас на C++\n"
" -DМАКРОС[=ДЕФИНИЦИЯ] „#define МАКРОС ДЕФИНИЦИЯ“ (стандартно\n"
" ДЕФИНИЦИЯта е „1“)\n"
" -L, --noline без директиви „#line“ в анализатора\n"
" -P, --prefix=НИЗ използване на този НИЗ за префикс вместо "
"обичайния „yy“\n"
" -R, --reentrant анализатор на C с възможност за повторно "
"извикване\n"
" --bison-bridge допълнителна поддръжка за „bison“\n"
" --bison-locations поддръжка на „yylloc“\n"
" --stdinit първоначалните стойности на „yyin“ и „yyout“ да "
"са\n"
" съответно стандартният вход и изход\n"
" --nounistd без ползване на „<unistd.h>“\n"
" --noФУНКЦИЯ без създаването на определена ФУНКЦИЯ\n"
"\n"
"Други:\n"
" -c опция по POSIX, която не прави нищо\n"
" -n опция по POSIX, която не прави нищо\n"
" -?\n"
" -h, --help извеждане на това помощно съобщение\n"
" -V, --version извеждане на версията на „%s“\n"
#: src/misc.c:70 src/misc.c:81
msgid "memory allocation failed in allocate_array()"
msgstr "неуспешно заделяне на памет в „allocate_array()“"
#: src/misc.c:131
#, c-format
msgid "bad character '%s' detected in check_char()"
msgstr "„check_char()“ се натъкна на неправилен знак: „%s“"
#: src/misc.c:136
#, c-format
msgid "scanner requires -8 flag to use the character %s"
msgstr "опцията „-8“ е задължителна, за да ползвате знака „%s“ в анализатора"
#: src/misc.c:155
msgid "memory allocation failure in xstrdup()"
msgstr "неуспешно заделяне на памет в „xstrdup()“"
#: src/misc.c:231
#, c-format
msgid "%s: fatal internal error, %s\n"
msgstr "%s: фатална вътрешна грешка — %s\n"
#: src/misc.c:587 src/misc.c:598
msgid "attempt to increase array size failed"
msgstr "неуспешен опит за увеличаване на размер на масив"
#: src/misc.c:645
msgid "memory allocation failed in yy_flex_xmalloc()"
msgstr "неуспешно заделяне на памет в „yy_flex_xmalloc()“"
#: src/nfa.c:100
#, c-format
msgid ""
"\n"
"\n"
"********** beginning dump of nfa with start state %d\n"
msgstr ""
"\n"
"\n"
"•••••••••• начало на извеждането на НКА с начално състояние %d\n"
#: src/nfa.c:111
#, c-format
msgid "state # %4d\t"
msgstr "състояние №%4d"
#: src/nfa.c:126
#, c-format
msgid "********** end of dump\n"
msgstr "•••••••••• край на извеждането\n"
#: src/nfa.c:169
msgid "empty machine in dupmachine()"
msgstr "празна машина в „dupmachine()“"
#: src/nfa.c:234
#, c-format
msgid "Variable trailing context rule at line %d\n"
msgstr "Правило с последващ контекст, който не е константен, на ред %d\n"
#: src/nfa.c:353
msgid "bad state type in mark_beginning_as_normal()"
msgstr "неправилен вид състояние в „mark_beginning_as_normal()“"
#: src/nfa.c:593
#, c-format
msgid "input rules are too complicated (>= %d NFA states)"
msgstr "входните правила са прекалено сложни (≥ %d състояния на НКА)"
#: src/nfa.c:671
msgid "found too many transitions in mkxtion()"
msgstr "прекалено много преходи в „mkxtion()“"
#: src/nfa.c:697
#, c-format
msgid "too many rules (> %d)!"
msgstr "прекалено много правила (> %d)!"
#: src/parse.y:163
msgid "unknown error processing section 1"
msgstr "непозната грешка при обработка на 1ви раздел"
#: src/parse.y:188 src/parse.y:373
msgid "bad start condition list"
msgstr "неправилен списък на началните състояния"
#: src/parse.y:208
msgid "Prefix must not contain [ or ]"
msgstr "Префиксът не трябва да съдържа „[“ или „]“"
#: src/parse.y:337
msgid "unrecognized rule"
msgstr "непознато правило"
#: src/parse.y:456 src/parse.y:469 src/parse.y:538
msgid "trailing context used twice"
msgstr "двукратно ползване на последващ контекст"
#: src/parse.y:574 src/parse.y:584 src/parse.y:657 src/parse.y:667
msgid "bad iteration values"
msgstr "неправилни стойности на итерация"
#: src/parse.y:602 src/parse.y:620 src/parse.y:685 src/parse.y:703
msgid "iteration value must be positive"
msgstr "стойността на итерацията трябва да е положителна"
#: src/parse.y:826 src/parse.y:836
#, c-format
msgid "the character range [%c-%c] is ambiguous in a case-insensitive scanner"
msgstr ""
"диапазонът знаци [%c-%c] не е еднозначен при лексичен анализатор, който не "
"прави разлика между главни и малки знаци"
#: src/parse.y:841
msgid "negative range in character class"
msgstr "изключващ диапазон в клас знаци"
#: src/parse.y:938
msgid "[:^lower:] is ambiguous in case insensitive scanner"
msgstr ""
"диапазонът знаци [:^lower:] не е еднозначен при лексичен анализатор, който "
"не прави разлика между главни и малки знаци"
#: src/parse.y:944
msgid "[:^upper:] ambiguous in case insensitive scanner"
msgstr ""
"диапазонът знаци [:^upper:] не е еднозначен при лексичен анализатор, който "
"не прави разлика между главни и малки знаци"
#: src/scan.l:73 src/scan.l:662 src/scan.l:720
msgid "Input line too long\n"
msgstr "Входният ред е твърде дълъг\n"
#: src/scan.l:185
#, c-format
msgid "malformed '%top' directive"
msgstr "неправилна директива „%top“"
#: src/scan.l:207
#, no-c-format
msgid "unrecognized '%' directive"
msgstr "непозната директива, започваща с „%“"
#: src/scan.l:216
msgid "Definition name too long\n"
msgstr "Името на дефиницията е твърде дълго\n"
#: src/scan.l:311
msgid "Unmatched '{'"
msgstr "„{“ без еш"
#: src/scan.l:327
#, c-format
msgid "Definition value for {%s} too long\n"
msgstr "Стойността на дефиницията „{%s}“ е твърде дълга\n"
#: src/scan.l:344
msgid "incomplete name definition"
msgstr "дефиниция с непълно име"
#: src/scan.l:486
msgid "Option line too long\n"
msgstr "Редът за опция е твърде дълъг\n"
#: src/scan.l:494
#, c-format
msgid "unrecognized %%option: %s"
msgstr "непозната опция „%%option“: „%s“"
#: src/scan.l:677 src/scan.l:850
msgid "bad character class"
msgstr "неправилен клас знаци"
#: src/scan.l:727
#, c-format
msgid "undefined definition {%s}"
msgstr "липсваща дефиниция „{%s}“"
#: src/scan.l:790
msgid "unbalanced parenthesis"
msgstr "скоба без еш"
#: src/scan.l:805
#, c-format
msgid "bad <start condition>: %s"
msgstr "лошо начално условие: „%s“"
#: src/scan.l:818
msgid "missing quote"
msgstr "липсваща кавичка"
#: src/scan.l:884
#, c-format
msgid "bad character class expression: %s"
msgstr "неправилен израз за клас от знаци: „%s“"
#: src/scan.l:906
msgid "bad character inside {}'s"
msgstr "неправилен знак между „{“ и „}“"
#: src/scan.l:912
msgid "missing }"
msgstr "липсва „}“"
#: src/scan.l:1020
msgid "EOF encountered inside an action"
msgstr "край на файл в действие"
#: src/scan.l:1025
msgid "EOF encountered inside pattern"
msgstr "край на файл в шаблон"
#: src/scan.l:1058
#, c-format
msgid "bad character: %s"
msgstr "неправилен знак: %s"
#: src/scan.l:1086
#, c-format
msgid "can't open %s"
msgstr "„%s“ не може да се отвори"
#: src/scanopt.c:248
#, c-format
msgid "Usage: %s [OPTIONS]...\n"
msgstr "Употреба: %s [ОПЦИЯ]…\n"
#: src/scanopt.c:484
#, c-format
msgid "option `%s' doesn't allow an argument\n"
msgstr "опцията „%s“ се използва без аргументи\n"
#: src/scanopt.c:489
#, c-format
msgid "option `%s' requires an argument\n"
msgstr "опцията „%s“ изисква аргумент\n"
#: src/scanopt.c:493
#, c-format
msgid "option `%s' is ambiguous\n"
msgstr "опцията „%s“ не е еднозначна\n"
#: src/scanopt.c:497
#, c-format
msgid "Unrecognized option `%s'\n"
msgstr "непозната опция „%s“\n"
#: src/scanopt.c:501
#, c-format
msgid "Unknown error=(%d)\n"
msgstr "Неизвестна грешка=(%d)\n"
#: src/sym.c:92
msgid "symbol table memory allocation failed"
msgstr "неуспешно заделяне на памет за таблицата със символите"
#: src/sym.c:183
msgid "name defined twice"
msgstr "името е дефинирано двукратно"
#: src/sym.c:231
#, c-format
msgid "start condition %s declared twice"
msgstr "началното условие „%s“ е дефинирано двукратно"
#: src/yylex.c:57
msgid "premature EOF"
msgstr "преждевременен край (EOF)"
#: src/yylex.c:200
#, c-format
msgid "End Marker\n"
msgstr "Маркер за край\n"
#: src/yylex.c:206
#, c-format
msgid "*Something Weird* - tok: %d val: %d\n"
msgstr "•Нещо странно• — лекс.: %d ст-ст: %d\n"
#~ msgid "Allocation of buffer for line directive failed"
#~ msgstr "Неуспешно заделяне на буфер за директива „#line“"
#~ msgid "Allocation of buffer for m4 def failed"
#~ msgstr "Неуспешно заделяне на буфер за добавяне на дефиниция за „m4“"
#~ msgid "Allocation of buffer for m4 undef failed"
#~ msgstr "Неуспешно заделяне на буфер за премахване на дефиниция за „m4“"
#~ msgid "error creating header file %s"
#~ msgstr "грешка при създаването на заглавен файл „%s“"
#~ msgid "%s %s\n"
#~ msgstr "%s %s\n"
#~ msgid "allocation of sko_stack failed"
#~ msgstr "неуспешно заделяне на памет за „sko_stack“"
#~ msgid "name \"%s\" ridiculously long"
#~ msgstr "прекалено дълго име: „%s“"
#~ msgid "bad line in skeleton file"
#~ msgstr "неправилен ред в скелетен файл"

542
po/ca.po

File diff suppressed because it is too large Load Diff

780
po/da.po

File diff suppressed because it is too large Load Diff

822
po/de.po

File diff suppressed because it is too large Load Diff

371
po/eo.po

File diff suppressed because it is too large Load Diff

1053
po/es.po

File diff suppressed because it is too large Load Diff

512
po/fi.po

File diff suppressed because it is too large Load Diff

844
po/fr.po

File diff suppressed because it is too large Load Diff

548
po/ga.po

File diff suppressed because it is too large Load Diff

736
po/hr.po

File diff suppressed because it is too large Load Diff

876
po/ka.po
View File

@ -1,876 +0,0 @@
# Georgian translation for flex.
# Copyright (C) 2022 The Flex Project (msgids)
# This file is distributed under the same license as the flex package.
# Temuri Doghonadze <temuri.doghonadze@gmail.com>, 2022.
#
msgid ""
msgstr ""
"Project-Id-Version: flex 2.6.4\n"
"Report-Msgid-Bugs-To: flex-devel@lists.sourceforge.net\n"
"POT-Creation-Date: 2017-05-06 10:49-0400\n"
"PO-Revision-Date: 2022-12-24 07:51+0100\n"
"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
"Language-Team: Georgian <(nothing)>\n"
"Language: ka\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.2.2\n"
#: src/buf.c:79
msgid "Allocation of buffer to print string failed"
msgstr ""
#: src/buf.c:107
msgid "Allocation of buffer for line directive failed"
msgstr ""
#: src/buf.c:177
msgid "Allocation of buffer for m4 def failed"
msgstr ""
#: src/buf.c:198
msgid "Allocation of buffer for m4 undef failed"
msgstr ""
#: src/dfa.c:59
#, c-format
msgid "State #%d is non-accepting -\n"
msgstr ""
#: src/dfa.c:119
msgid "dangerous trailing context"
msgstr ""
#: src/dfa.c:159
#, c-format
msgid " associated rule line numbers:"
msgstr ""
#: src/dfa.c:193
#, c-format
msgid " out-transitions: "
msgstr " out-გადასვლები: "
#: src/dfa.c:201
#, c-format
msgid ""
"\n"
" jam-transitions: EOF "
msgstr ""
"\n"
" jam-გადასვლები: EOF "
#: src/dfa.c:331
msgid "consistency check failed in epsclosure()"
msgstr ""
#: src/dfa.c:419
msgid ""
"\n"
"\n"
"DFA Dump:\n"
"\n"
msgstr ""
"\n"
"\n"
"DFA-ის დამპი:\n"
"\n"
#: src/dfa.c:587
msgid "could not create unique end-of-buffer state"
msgstr ""
#: src/dfa.c:608
#, c-format
msgid "state # %d:\n"
msgstr "მდგომარეობა # %d:\n"
#: src/dfa.c:768
msgid "Could not write yynxt_tbl[][]"
msgstr ""
#: src/dfa.c:1028
msgid "bad transition character detected in sympartition()"
msgstr ""
#: src/gen.c:480
msgid ""
"\n"
"\n"
"Equivalence Classes:\n"
"\n"
msgstr ""
"\n"
"ეკვივალენტობის კლასები:\n"
"\n"
#: src/gen.c:669 src/gen.c:698 src/gen.c:1218
#, c-format
msgid "state # %d accepts: [%d]\n"
msgstr ""
#: src/gen.c:1115
#, c-format
msgid "state # %d accepts: "
msgstr ""
#: src/gen.c:1162
msgid "Could not write yyacclist_tbl"
msgstr "ჩაწერის შეცდომა: yyacclist_tbl"
#: src/gen.c:1236
msgid "Could not write yyacc_tbl"
msgstr "ჩაწერის შეცდომა: yyacc_tbl"
#: src/gen.c:1251 src/gen.c:1623 src/gen.c:1646
msgid "Could not write ecstbl"
msgstr "ჩაწერის შეცდომა: ecstbl"
#: src/gen.c:1271
msgid ""
"\n"
"\n"
"Meta-Equivalence Classes:\n"
msgstr ""
"\n"
"\n"
"მეტა-ექვივალენტობის კლასები:\n"
#: src/gen.c:1293
msgid "Could not write yymeta_tbl"
msgstr "ჩაწერის შეცდომა: yymeta_tbl"
#: src/gen.c:1352
msgid "Could not write yybase_tbl"
msgstr "ჩაწერის შეცდომა: yybase_tbl"
#: src/gen.c:1384
msgid "Could not write yydef_tbl"
msgstr "ჩაწერის შეცდომა: yydef_tbl"
#: src/gen.c:1422
msgid "Could not write yynxt_tbl"
msgstr "ჩაწერის შეცდომა: yynxt_tbl"
#: src/gen.c:1456
msgid "Could not write yychk_tbl"
msgstr "ჩაწერის შეცდომა: yychk_tbl"
#: src/gen.c:1608 src/gen.c:1637
msgid "Could not write ftbl"
msgstr "ჩაწერის შეცდომა: ftbl"
#: src/gen.c:1614
msgid "Could not write ssltbl"
msgstr "ჩაწერის შეცდომა: ssltbl"
#: src/gen.c:1665
msgid "Could not write eoltbl"
msgstr "ჩაწერის შეცდომა: eoltbl"
#: src/gen.c:1722
msgid "Could not write yynultrans_tbl"
msgstr "ჩაწერის შეცდომა: yynultrans_tbl"
#: src/main.c:178
msgid "rule cannot be matched"
msgstr ""
#: src/main.c:183
msgid "-s option given but default rule can be matched"
msgstr ""
#: src/main.c:221
msgid "Can't use -+ with -l option"
msgstr ""
#: src/main.c:224
msgid "Can't use -f or -F with -l option"
msgstr ""
#: src/main.c:228
msgid "Can't use --reentrant or --bison-bridge with -l option"
msgstr ""
#: src/main.c:260
msgid "-Cf/-CF and -Cm don't make sense together"
msgstr ""
#: src/main.c:263
msgid "-Cf/-CF and -I are incompatible"
msgstr "-Cf /-CF და - მე შეუთავსებელია"
#: src/main.c:267
msgid "-Cf/-CF are incompatible with lex-compatibility mode"
msgstr ""
#: src/main.c:272
msgid "-Cf and -CF are mutually exclusive"
msgstr "-Cf და -CF ურთიერთგამომრიცხავია"
#: src/main.c:276
msgid "Can't use -+ with -CF option"
msgstr ""
#: src/main.c:279
#, c-format
msgid "%array incompatible with -+ option"
msgstr ""
#: src/main.c:284
msgid "Options -+ and --reentrant are mutually exclusive."
msgstr ""
#: src/main.c:287
msgid "bison bridge not supported for the C++ scanner."
msgstr ""
#: src/main.c:336 src/main.c:419
#, c-format
msgid "could not create %s"
msgstr "%s-ის შექმნის შეცდომა"
#: src/main.c:431
msgid "could not write tables header"
msgstr "ცხრილების თავსართის ჩაწერის შეცდომა"
#: src/main.c:435
#, c-format
msgid "can't open skeleton file %s"
msgstr "ჩონჩხის ფაილის %s გახსნის შეცდომა"
#: src/main.c:450
msgid "Prefix cannot include '[' or ']'"
msgstr ""
#: src/main.c:474
msgid "allocation of macro definition failed"
msgstr ""
#: src/main.c:521
#, c-format
msgid "input error reading skeleton file %s"
msgstr ""
#: src/main.c:525
#, c-format
msgid "error closing skeleton file %s"
msgstr ""
#: src/main.c:709
#, c-format
msgid "error creating header file %s"
msgstr ""
#: src/main.c:717
#, c-format
msgid "error writing output file %s"
msgstr ""
#: src/main.c:721
#, c-format
msgid "error closing output file %s"
msgstr ""
#: src/main.c:725
#, c-format
msgid "error deleting output file %s"
msgstr ""
#: src/main.c:732
#, c-format
msgid "No backing up.\n"
msgstr "მარქაფი გამორთულია.\n"
#: src/main.c:736
#, c-format
msgid "%d backing up (non-accepting) states.\n"
msgstr ""
#: src/main.c:740
#, c-format
msgid "Compressed tables always back up.\n"
msgstr ""
#: src/main.c:743
#, c-format
msgid "error writing backup file %s"
msgstr ""
#: src/main.c:747
#, c-format
msgid "error closing backup file %s"
msgstr ""
#: src/main.c:752
#, c-format
msgid "%s version %s usage statistics:\n"
msgstr ""
#: src/main.c:755
#, c-format
msgid " scanner options: -"
msgstr " სკანერის პარამეტრების ჩვენება: -"
#: src/main.c:834
#, c-format
msgid " %d/%d NFA states\n"
msgstr " %d/%d NFA მდგომარეობები\n"
#: src/main.c:836
#, c-format
msgid " %d/%d DFA states (%d words)\n"
msgstr " %d/%d DFA მდგომარეობები (%d სიტყვა)\n"
#: src/main.c:838
#, c-format
msgid " %d rules\n"
msgstr " %d წესი\n"
#: src/main.c:843
#, c-format
msgid " No backing up\n"
msgstr " მარქაფის გარეშე\n"
#: src/main.c:847
#, c-format
msgid " %d backing-up (non-accepting) states\n"
msgstr ""
#: src/main.c:852
#, c-format
msgid " Compressed tables always back-up\n"
msgstr ""
#: src/main.c:856
#, c-format
msgid " Beginning-of-line patterns used\n"
msgstr ""
#: src/main.c:858
#, c-format
msgid " %d/%d start conditions\n"
msgstr " %d/%d გაშვების პირობები\n"
#: src/main.c:862
#, c-format
msgid " %d epsilon states, %d double epsilon states\n"
msgstr ""
#: src/main.c:866
#, c-format
msgid " no character classes\n"
msgstr " სიმბოლოს კლასების გარეშე\n"
#: src/main.c:870
#, c-format
msgid " %d/%d character classes needed %d/%d words of storage, %d reused\n"
msgstr ""
#: src/main.c:875
#, c-format
msgid " %d state/nextstate pairs created\n"
msgstr ""
#: src/main.c:878
#, c-format
msgid " %d/%d unique/duplicate transitions\n"
msgstr ""
#: src/main.c:883
#, c-format
msgid " %d table entries\n"
msgstr " %d ცხრილის ჩანაწერი\n"
#: src/main.c:891
#, c-format
msgid " %d/%d base-def entries created\n"
msgstr ""
#: src/main.c:895
#, c-format
msgid " %d/%d (peak %d) nxt-chk entries created\n"
msgstr ""
#: src/main.c:899
#, c-format
msgid " %d/%d (peak %d) template nxt-chk entries created\n"
msgstr ""
#: src/main.c:903
#, c-format
msgid " %d empty table entries\n"
msgstr " %d ცხრილის ცარიელი ჩანაწერი\n"
#: src/main.c:905
#, c-format
msgid " %d protos created\n"
msgstr " %d პროტოტიპი შექმნილია\n"
#: src/main.c:908
#, c-format
msgid " %d templates created, %d uses\n"
msgstr ""
#: src/main.c:916
#, c-format
msgid " %d/%d equivalence classes created\n"
msgstr ""
#: src/main.c:924
#, c-format
msgid " %d/%d meta-equivalence classes created\n"
msgstr ""
#: src/main.c:930
#, c-format
msgid " %d (%d saved) hash collisions, %d DFAs equal\n"
msgstr ""
#: src/main.c:932
#, c-format
msgid " %d sets of reallocations needed\n"
msgstr ""
#: src/main.c:934
#, c-format
msgid " %d total table entries needed\n"
msgstr ""
#: src/main.c:1008
#, c-format
msgid "Internal error. flexopts are malformed.\n"
msgstr "შიდა შეცდომა. flexopts არასწორია.\n"
#: src/main.c:1018
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "მეტი ინფორმაციისთვის სცადეთ '%s --help'\n"
#: src/main.c:1075
#, c-format
msgid "unknown -C option '%c'"
msgstr "უცნობი -C -ის პარამეტრი '%c'"
#: src/main.c:1204
#, c-format
msgid "%s %s\n"
msgstr "%s %s\n"
#: src/main.c:1476
msgid "fatal parse error"
msgstr "ფატალური შეცდომა დამუშავებისას"
#: src/main.c:1508
#, c-format
msgid "could not create backing-up info file %s"
msgstr ""
#: src/main.c:1529
#, c-format
msgid "-l AT&T lex compatibility option entails a large performance penalty\n"
msgstr ""
#: src/main.c:1532
#, c-format
msgid " and may be the actual source of other reported performance penalties\n"
msgstr ""
#: src/main.c:1538
#, c-format
msgid "%%option yylineno entails a performance penalty ONLY on rules that can match newline characters\n"
msgstr ""
#: src/main.c:1545
#, c-format
msgid "-I (interactive) entails a minor performance penalty\n"
msgstr ""
#: src/main.c:1550
#, c-format
msgid "yymore() entails a minor performance penalty\n"
msgstr "yymore() მცირე წარმადობის ხინჯს შეიცავს\n"
#: src/main.c:1556
#, c-format
msgid "REJECT entails a large performance penalty\n"
msgstr "REJECT წარმადობის დიდ ხინჯს შეიცავს\n"
#: src/main.c:1561
#, c-format
msgid "Variable trailing context rules entail a large performance penalty\n"
msgstr ""
#: src/main.c:1573
msgid "REJECT cannot be used with -f or -F"
msgstr ""
#: src/main.c:1576
#, c-format
msgid "%option yylineno cannot be used with REJECT"
msgstr ""
#: src/main.c:1579
msgid "variable trailing context rules cannot be used with -f or -F"
msgstr ""
#: src/main.c:1704
#, c-format
msgid "%option yyclass only meaningful for C++ scanners"
msgstr ""
#: src/main.c:1791
#, c-format
msgid "Usage: %s [OPTIONS] [FILE]...\n"
msgstr ""
#: src/main.c:1794
#, c-format
msgid ""
"Generates programs that perform pattern-matching on text.\n"
"\n"
"Table Compression:\n"
" -Ca, --align trade off larger tables for better memory alignment\n"
" -Ce, --ecs construct equivalence classes\n"
" -Cf do not compress tables; use -f representation\n"
" -CF do not compress tables; use -F representation\n"
" -Cm, --meta-ecs construct meta-equivalence classes\n"
" -Cr, --read use read() instead of stdio for scanner input\n"
" -f, --full generate fast, large scanner. Same as -Cfr\n"
" -F, --fast use alternate table representation. Same as -CFr\n"
" -Cem default compression (same as --ecs --meta-ecs)\n"
"\n"
"Debugging:\n"
" -d, --debug enable debug mode in scanner\n"
" -b, --backup write backing-up information to %s\n"
" -p, --perf-report write performance report to stderr\n"
" -s, --nodefault suppress default rule to ECHO unmatched text\n"
" -T, --trace %s should run in trace mode\n"
" -w, --nowarn do not generate warnings\n"
" -v, --verbose write summary of scanner statistics to stdout\n"
" --hex use hexadecimal numbers instead of octal in debug outputs\n"
"\n"
"Files:\n"
" -o, --outfile=FILE specify output filename\n"
" -S, --skel=FILE specify skeleton file\n"
" -t, --stdout write scanner on stdout instead of %s\n"
" --yyclass=NAME name of C++ class\n"
" --header-file=FILE create a C header file in addition to the scanner\n"
" --tables-file[=FILE] write tables to FILE\n"
"\n"
"Scanner behavior:\n"
" -7, --7bit generate 7-bit scanner\n"
" -8, --8bit generate 8-bit scanner\n"
" -B, --batch generate batch scanner (opposite of -I)\n"
" -i, --case-insensitive ignore case in patterns\n"
" -l, --lex-compat maximal compatibility with original lex\n"
" -X, --posix-compat maximal compatibility with POSIX lex\n"
" -I, --interactive generate interactive scanner (opposite of -B)\n"
" --yylineno track line count in yylineno\n"
"\n"
"Generated code:\n"
" -+, --c++ generate C++ scanner class\n"
" -Dmacro[=defn] #define macro defn (default defn is '1')\n"
" -L, --noline suppress #line directives in scanner\n"
" -P, --prefix=STRING use STRING as prefix instead of \"yy\"\n"
" -R, --reentrant generate a reentrant C scanner\n"
" --bison-bridge scanner for bison pure parser.\n"
" --bison-locations include yylloc support.\n"
" --stdinit initialize yyin/yyout to stdin/stdout\n"
" --nounistd do not include <unistd.h>\n"
" --noFUNCTION do not generate a particular FUNCTION\n"
"\n"
"Miscellaneous:\n"
" -c do-nothing POSIX option\n"
" -n do-nothing POSIX option\n"
" -?\n"
" -h, --help produce this help message\n"
" -V, --version report %s version\n"
msgstr ""
#: src/misc.c:64
msgid "allocation of sko_stack failed"
msgstr ""
#: src/misc.c:100
#, c-format
msgid "name \"%s\" ridiculously long"
msgstr ""
#: src/misc.c:155
msgid "memory allocation failed in allocate_array()"
msgstr ""
#: src/misc.c:205
#, c-format
msgid "bad character '%s' detected in check_char()"
msgstr ""
#: src/misc.c:210
#, c-format
msgid "scanner requires -8 flag to use the character %s"
msgstr ""
#: src/misc.c:229
msgid "memory allocation failure in xstrdup()"
msgstr ""
#: src/misc.c:303
#, c-format
msgid "%s: fatal internal error, %s\n"
msgstr ""
#: src/misc.c:671
msgid "attempt to increase array size failed"
msgstr ""
#: src/misc.c:795
msgid "bad line in skeleton file"
msgstr ""
#: src/misc.c:845
msgid "memory allocation failed in yy_flex_xmalloc()"
msgstr ""
#: src/nfa.c:100
#, c-format
msgid ""
"\n"
"\n"
"********** beginning dump of nfa with start state %d\n"
msgstr ""
#: src/nfa.c:111
#, c-format
msgid "state # %4d\t"
msgstr ""
#: src/nfa.c:126
#, c-format
msgid "********** end of dump\n"
msgstr ""
#: src/nfa.c:169
msgid "empty machine in dupmachine()"
msgstr ""
#: src/nfa.c:234
#, c-format
msgid "Variable trailing context rule at line %d\n"
msgstr ""
#: src/nfa.c:357
msgid "bad state type in mark_beginning_as_normal()"
msgstr ""
#: src/nfa.c:595
#, c-format
msgid "input rules are too complicated (>= %d NFA states)"
msgstr ""
#: src/nfa.c:673
msgid "found too many transitions in mkxtion()"
msgstr ""
#: src/nfa.c:699
#, c-format
msgid "too many rules (> %d)!"
msgstr ""
#: src/parse.y:159
msgid "unknown error processing section 1"
msgstr ""
#: src/parse.y:184 src/parse.y:353
msgid "bad start condition list"
msgstr ""
#: src/parse.y:204
msgid "Prefix must not contain [ or ]"
msgstr ""
#: src/parse.y:317
msgid "unrecognized rule"
msgstr ""
#: src/parse.y:436 src/parse.y:449 src/parse.y:518
msgid "trailing context used twice"
msgstr ""
#: src/parse.y:554 src/parse.y:564 src/parse.y:637 src/parse.y:647
msgid "bad iteration values"
msgstr ""
#: src/parse.y:582 src/parse.y:600 src/parse.y:665 src/parse.y:683
msgid "iteration value must be positive"
msgstr ""
#: src/parse.y:806 src/parse.y:816
#, c-format
msgid "the character range [%c-%c] is ambiguous in a case-insensitive scanner"
msgstr ""
#: src/parse.y:821
msgid "negative range in character class"
msgstr ""
#: src/parse.y:918
msgid "[:^lower:] is ambiguous in case insensitive scanner"
msgstr ""
#: src/parse.y:924
msgid "[:^upper:] ambiguous in case insensitive scanner"
msgstr ""
#: src/scan.l:82 src/scan.l:644 src/scan.l:702
msgid "Input line too long\n"
msgstr ""
#: src/scan.l:183
#, c-format
msgid "malformed '%top' directive"
msgstr ""
#: src/scan.l:205
#, no-c-format
msgid "unrecognized '%' directive"
msgstr ""
#: src/scan.l:214
msgid "Definition name too long\n"
msgstr ""
#: src/scan.l:309
msgid "Unmatched '{'"
msgstr ""
#: src/scan.l:325
#, c-format
msgid "Definition value for {%s} too long\n"
msgstr ""
#: src/scan.l:342
msgid "incomplete name definition"
msgstr ""
#: src/scan.l:467
msgid "Option line too long\n"
msgstr ""
#: src/scan.l:475
#, c-format
msgid "unrecognized %%option: %s"
msgstr ""
#: src/scan.l:659 src/scan.l:832
msgid "bad character class"
msgstr ""
#: src/scan.l:709
#, c-format
msgid "undefined definition {%s}"
msgstr ""
#: src/scan.l:772
msgid "unbalanced parenthesis"
msgstr ""
#: src/scan.l:787
#, c-format
msgid "bad <start condition>: %s"
msgstr ""
#: src/scan.l:800
msgid "missing quote"
msgstr ""
#: src/scan.l:866
#, c-format
msgid "bad character class expression: %s"
msgstr ""
#: src/scan.l:888
msgid "bad character inside {}'s"
msgstr ""
#: src/scan.l:894
msgid "missing }"
msgstr ""
#: src/scan.l:972
msgid "EOF encountered inside an action"
msgstr ""
#: src/scan.l:977
msgid "EOF encountered inside pattern"
msgstr ""
#: src/scan.l:1010
#, c-format
msgid "bad character: %s"
msgstr ""
#: src/scan.l:1038
#, c-format
msgid "can't open %s"
msgstr "'%s'-ის გახსნის შეცდომა"
#: src/scanopt.c:259
#, c-format
msgid "Usage: %s [OPTIONS]...\n"
msgstr ""
#: src/scanopt.c:524
#, c-format
msgid "option `%s' doesn't allow an argument\n"
msgstr ""
#: src/scanopt.c:529
#, c-format
msgid "option `%s' requires an argument\n"
msgstr ""
#: src/scanopt.c:533
#, c-format
msgid "option `%s' is ambiguous\n"
msgstr ""
#: src/scanopt.c:537
#, c-format
msgid "Unrecognized option `%s'\n"
msgstr ""
#: src/scanopt.c:541
#, c-format
msgid "Unknown error=(%d)\n"
msgstr ""
#: src/sym.c:92
msgid "symbol table memory allocation failed"
msgstr ""
#: src/sym.c:183
msgid "name defined twice"
msgstr ""
#: src/sym.c:231
#, c-format
msgid "start condition %s declared twice"
msgstr ""
#: src/yylex.c:57
msgid "premature EOF"
msgstr ""
#: src/yylex.c:200
#, c-format
msgid "End Marker\n"
msgstr ""
#: src/yylex.c:206
#, c-format
msgid "*Something Weird* - tok: %d val: %d\n"
msgstr ""

1540
po/ko.po

File diff suppressed because it is too large Load Diff

815
po/nl.po

File diff suppressed because it is too large Load Diff

807
po/pl.po

File diff suppressed because it is too large Load Diff

958
po/pt.po
View File

@ -1,958 +0,0 @@
# Portuguese (Portugal) translation for the flex package.
# Copyright (C) 2019 The Flex Project (msgids)
# This file is put in the public domain.
# Pedro Albuquerque <palbuquerque73@gmail.com>, 2019.
#
msgid ""
msgstr ""
"Project-Id-Version: flex 2.5.38\n"
"Report-Msgid-Bugs-To: flex-devel@lists.sourceforge.net\n"
"POT-Creation-Date: 2022-09-27 14:18-0400\n"
"PO-Revision-Date: 2019-05-23 10:15+0100\n"
"Last-Translator: Pedro Albuquerque <palbuquerque73@gmail.com>\n"
"Language-Team: Portuguese <translation-team-pt@lists.sourceforge.net>\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=n != 1;\\n\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
#: src/buf.c:61
msgid "Allocation of buffer to print string failed"
msgstr "Falha ao alocar buffer para imprimir a cadeia"
#: src/ccl.c:80
msgid "internal error: trying to add a char to a non-last ccl.\n"
msgstr ""
#: src/dfa.c:59
#, c-format
msgid "State #%d is non-accepting -\n"
msgstr "Estado nº %d não está a aceitar -\n"
#: src/dfa.c:119
msgid "dangerous trailing context"
msgstr "conteúdo final perigoso"
#: src/dfa.c:159
#, c-format
msgid " associated rule line numbers:"
msgstr " números de linha de regra associada:"
#: src/dfa.c:193
#, c-format
msgid " out-transitions: "
msgstr " out-transitions: "
#: src/dfa.c:201
#, c-format
msgid ""
"\n"
" jam-transitions: EOF "
msgstr ""
"\n"
" jam-transitions: EOF "
#: src/dfa.c:331
msgid "consistency check failed in epsclosure()"
msgstr "falha no teste de consistência em epsclosure()"
#: src/dfa.c:422
msgid ""
"\n"
"\n"
"DFA Dump:\n"
"\n"
msgstr ""
"\n"
"\n"
"DFA Dump:\n"
"\n"
#: src/dfa.c:558
msgid "could not create unique end-of-buffer state"
msgstr "impossível criar estado end-of-buffer exclusivo"
#: src/dfa.c:579
#, c-format
msgid "state # %d:\n"
msgstr "estado nº %d\n"
#: src/dfa.c:738
msgid "Could not write yynxt_tbl[][]"
msgstr "Impossível escrever yynxt_tbl[][]"
#: src/dfa.c:1001
msgid "bad transition character detected in sympartition()"
msgstr "detectado um mau carácter de transição em sympartition()"
#: src/gen.c:379
msgid ""
"\n"
"\n"
"Equivalence Classes:\n"
"\n"
msgstr ""
"\n"
"\n"
"Classes de equivalência:\n"
"\n"
#: src/gen.c:425 src/gen.c:454 src/gen.c:638
#, c-format
msgid "state # %d accepts: [%d]\n"
msgstr "estado nº %d aceita: [%d]\n"
#: src/gen.c:533
#, c-format
msgid "state # %d accepts: "
msgstr "estado nº %d aceita: "
#: src/gen.c:582
msgid "Could not write yyacclist_tbl"
msgstr "Impossível escrever yyacclist_tbl"
#: src/gen.c:659
msgid "Could not write yyacc_tbl"
msgstr "Impossível escrever yyacc_tbl"
#: src/gen.c:674 src/gen.c:947 src/gen.c:974
msgid "Could not write ecstbl"
msgstr "Impossível escrever ecstbl"
#: src/gen.c:694
msgid ""
"\n"
"\n"
"Meta-Equivalence Classes:\n"
msgstr ""
"\n"
"\n"
"Classes de meta-equivalência:\n"
#: src/gen.c:714
msgid "Could not write yymeta_tbl"
msgstr "Impossível escrever yymeta_tbl"
#: src/gen.c:774
msgid "Could not write yybase_tbl"
msgstr "Impossível escrever yybase_tbl"
#: src/gen.c:805
msgid "Could not write yydef_tbl"
msgstr "Impossível escrever yydef_tbl"
#: src/gen.c:844
msgid "Could not write yynxt_tbl"
msgstr "Impossível escrever yynxt_tbl"
#: src/gen.c:877
msgid "Could not write yychk_tbl"
msgstr "Impossível escrever yychk_tbl"
#: src/gen.c:932 src/gen.c:965
msgid "Could not write ftbl"
msgstr "Impossível escrever ftbl"
#: src/gen.c:938
msgid "Could not write ssltbl"
msgstr "Impossível escrever ssltbl"
#: src/gen.c:1014
msgid "Could not write eoltbl"
msgstr "Impossível escrever eoltbl"
#: src/gen.c:1061
msgid "Could not write yynultrans_tbl"
msgstr "Impossível escrever yynultrans_tbl"
#: src/main.c:169
msgid "rule cannot be matched"
msgstr "impossível comparar a regra"
#: src/main.c:174
msgid "-s option given but default rule can be matched"
msgstr "indicada a opção -s, mas a regra predefinida pode ser comparada"
#: src/main.c:317
msgid "Can't use -+ with -l option"
msgstr "Impossível usar -+ com a opção -l"
#: src/main.c:320
msgid "Can't use -f or -F with -l option"
msgstr "Impossível usar -f ou -F com a opção -l"
#: src/main.c:324
#, fuzzy
msgid "Can't use --ctrl.reentrant or --bison-bridge with -l option"
msgstr "Impossível usar --reentrant ou --bison-bridge com a opção -l"
#: src/main.c:356
msgid "-Cf/-CF and -Cm don't make sense together"
msgstr "-Cf/-CF e -Cm não fazem sentido em conjunto"
#: src/main.c:359
msgid "-Cf/-CF and -I are incompatible"
msgstr "-Cf/-CF e -I são incompatíveis"
#: src/main.c:363
msgid "-Cf/-CF are incompatible with lex-compatibility mode"
msgstr "-Cf/-CF são incompatíveis com o modo lex-compatibility"
#: src/main.c:368
msgid "-Cf and -CF are mutually exclusive"
msgstr "-Cf e -CF são mutuamente exclusivas"
#: src/main.c:372
msgid "Can't use -+ with -CF option"
msgstr "Impossível usar -+ com a opção -CF"
#: src/main.c:375
#, c-format
msgid "%array incompatible with -+ option"
msgstr "%array incompatível com a opção -+"
#: src/main.c:380
msgid "Options -+ and --reentrant are mutually exclusive."
msgstr "As opções -+ e --reentrant são mutuamente exclusivas."
#: src/main.c:383
msgid "bison bridge not supported for the C++ scanner."
msgstr "bison bridge não suportada no analisador C++."
#: src/main.c:422 src/main.c:1235
#, c-format
msgid "could not create %s"
msgstr "impossível criar %s"
#: src/main.c:443
#, c-format
msgid "%option yyclass only meaningful for C++ scanners"
msgstr "a %opção yyclass só tem significado para analisadores C++"
#: src/main.c:447
#, c-format
msgid "input error reading skeleton file %s"
msgstr "erro de entrada ao ler ficheiro esqueleto %s"
#: src/main.c:451
#, c-format
msgid "error closing skeleton file %s"
msgstr "erro ao fechar ficheiro esqueleto %s"
#: src/main.c:457
#, c-format
msgid "error writing output file %s"
msgstr "erro ao escrever ficheiro de saída %s"
#: src/main.c:461
#, c-format
msgid "error closing output file %s"
msgstr "erro ao fechar ficheiro de saída %s"
#: src/main.c:465
#, c-format
msgid "error deleting output file %s"
msgstr "erro ao eliminar ficheiro de saída %s"
#: src/main.c:472
#, c-format
msgid "No backing up.\n"
msgstr "Sem seguranças.\n"
#: src/main.c:476
#, c-format
msgid "%d backing up (non-accepting) states.\n"
msgstr "%d estados de segurança (não aceitando).\n"
#: src/main.c:480
#, c-format
msgid "Compressed tables always back up.\n"
msgstr "Tabelas comprimidas têm sempre segurança.\n"
#: src/main.c:483
#, c-format
msgid "error writing backup file %s"
msgstr "erro ao escrever segurança %s"
#: src/main.c:487
#, c-format
msgid "error closing backup file %s"
msgstr "erro ao fechar segurança %s"
#: src/main.c:492
#, c-format
msgid "%s version %s usage statistics:\n"
msgstr "%s versão %s estatisticas de uso:\n"
#: src/main.c:495
#, c-format
msgid " scanner options: -"
msgstr " opções do analisador: -"
#: src/main.c:574
#, c-format
msgid " %d/%d NFA states\n"
msgstr " estados NFA %d/%d\n"
#: src/main.c:576
#, c-format
msgid " %d/%d DFA states (%d words)\n"
msgstr " estados DFA %d/%d (%d palavras)\n"
#: src/main.c:578
#, c-format
msgid " %d rules\n"
msgstr " %d regras\n"
#: src/main.c:583
#, c-format
msgid " No backing up\n"
msgstr " Sem seguranças\n"
#: src/main.c:587
#, c-format
msgid " %d backing-up (non-accepting) states\n"
msgstr " %d estados de segurança (não aceitando).\n"
#: src/main.c:592
#, c-format
msgid " Compressed tables always back-up\n"
msgstr "Tabelas comprimidas têm sempre segurança.\n"
#: src/main.c:596
#, c-format
msgid " Beginning-of-line patterns used\n"
msgstr " Padrões de início de linha usados\n"
#: src/main.c:598
#, c-format
msgid " %d/%d start conditions\n"
msgstr " condições iniciais %d/%d\n"
#: src/main.c:602
#, c-format
msgid " %d epsilon states, %d double epsilon states\n"
msgstr " estados epsilon %d, estados duplo epsilon %d\n"
#: src/main.c:606
#, c-format
msgid " no character classes\n"
msgstr " sem classes de carácter\n"
#: src/main.c:610
#, c-format
msgid " %d/%d character classes needed %d/%d words of storage, %d reused\n"
msgstr ""
" classes de carácter %d/%d necessárias %d/%d palavras de armazenamento, %d "
"reutilizadas\n"
#: src/main.c:615
#, c-format
msgid " %d state/nextstate pairs created\n"
msgstr " %d pares estado/estado seguinte criados\n"
#: src/main.c:618
#, c-format
msgid " %d/%d unique/duplicate transitions\n"
msgstr " %d/%d transições únicas/duplicadas\n"
#: src/main.c:623
#, c-format
msgid " %d table entries\n"
msgstr " %d entradas de tabela\n"
#: src/main.c:631
#, c-format
msgid " %d/%d base-def entries created\n"
msgstr " %d/%d entradas base-def criadas\n"
#: src/main.c:635
#, c-format
msgid " %d/%d (peak %d) nxt-chk entries created\n"
msgstr " %d/%d (pico %d) entradas nxt-chk criadas\n"
#: src/main.c:639
#, c-format
msgid " %d/%d (peak %d) template nxt-chk entries created\n"
msgstr " %d/%d (pico %d) entradas modelo nxt-chk criadas\n"
#: src/main.c:643
#, c-format
msgid " %d empty table entries\n"
msgstr " %d entradas de tabela vazias\n"
#: src/main.c:645
#, c-format
msgid " %d protos created\n"
msgstr " %d protos criados\n"
#: src/main.c:648
#, c-format
msgid " %d templates created, %d uses\n"
msgstr " %d modelos criados, %d usos\n"
#: src/main.c:656
#, c-format
msgid " %d/%d equivalence classes created\n"
msgstr " %d/%d classes de equivalência criadas\n"
#: src/main.c:664
#, c-format
msgid " %d/%d meta-equivalence classes created\n"
msgstr " %d/%d classes de meta-equivalência criadas\n"
#: src/main.c:670
#, c-format
msgid " %d (%d saved) hash collisions, %d DFAs equal\n"
msgstr " %d (%d gravadas) colisões de hash, %d DFAs iguais\n"
#: src/main.c:672
#, c-format
msgid " %d sets of reallocations needed\n"
msgstr " %d conjuntos de re-alocação necessários\n"
#: src/main.c:674
#, c-format
msgid " %d total table entries needed\n"
msgstr " %d entradas de tabela totais necessárias\n"
#: src/main.c:735
#, c-format
msgid "Internal error. flexopts are malformed.\n"
msgstr "Erro interno. flexopts mal formados.\n"
#: src/main.c:745
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Tente \"%s --help\" para mais informação.\n"
#: src/main.c:807
#, c-format
msgid "unknown -C option '%c'"
msgstr "Opção -C \"%c\" desconhecida"
#: src/main.c:1195
msgid "fatal parse error"
msgstr "erro de processamento fatal"
#: src/main.c:1247
msgid "could not write tables header"
msgstr "impossível criar cabeçalho de tabelas"
#: src/main.c:1251
#, c-format
msgid "can't open skeleton file %s"
msgstr "impossível abrir ficheiro esqueleto %s"
#: src/main.c:1254
msgid "Prefix cannot include '[' or ']'"
msgstr ""
#: src/main.c:1322
#, c-format
msgid "could not create backing-up info file %s"
msgstr "impossível criar ficheiro de informação de segurança %s"
#: src/main.c:1343
#, c-format
msgid "-l AT&T lex compatibility option entails a large performance penalty\n"
msgstr ""
"a opção de compatibilidade -l AT&T lex implica uma grande perda de "
"desempenho\n"
#: src/main.c:1346
#, c-format
msgid " and may be the actual source of other reported performance penalties\n"
msgstr ""
" e pode ser a fonte actual de outras penalizações de desempenho reportadas\n"
#: src/main.c:1352
#, c-format
msgid ""
"%%option yylineno entails a performance penalty ONLY on rules that can match "
"newline characters\n"
msgstr ""
"a %%opção yylineno implica uma perda de desempenho SÓ em regras que possam "
"comparar caracteres de nova linha\n"
#: src/main.c:1359
#, c-format
msgid "-I (interactive) entails a minor performance penalty\n"
msgstr "-I (interactiva) implica uma perda menor de desempenho\n"
#: src/main.c:1364
#, c-format
msgid "yymore() entails a minor performance penalty\n"
msgstr "yymore() implica uma perda menor de desempenho\n"
#: src/main.c:1370
#, c-format
msgid "REJECT entails a large performance penalty\n"
msgstr "REJECT implica uma grave perda de desempenho\n"
#: src/main.c:1375
#, c-format
msgid "Variable trailing context rules entail a large performance penalty\n"
msgstr ""
"Regras variáveis de contexto final implicam uma grave perda de desempenho\n"
#: src/main.c:1387
msgid "REJECT cannot be used with -f or -F"
msgstr "REJECT não ode ser usado com -f ou -F"
#: src/main.c:1390
#, c-format
msgid "%option yylineno cannot be used with REJECT"
msgstr "a %opção yylineno não pode ser usada com REJECT"
#: src/main.c:1393
msgid "variable trailing context rules cannot be used with -f or -F"
msgstr "regras variáveis de contexto final não podem ser usadas com -f ou -F"
#: src/main.c:1428
msgid "allocation of macro definition failed"
msgstr "falha ao alocar definição de macro"
#: src/main.c:1745
#, c-format
msgid "Usage: %s [OPTIONS] [FILE]...\n"
msgstr "Uso: %s [OPÇÕES] [FICHEIRO]...\n"
#: src/main.c:1748
#, fuzzy, c-format
msgid ""
"Generates programs that perform pattern-matching on text.\n"
"\n"
"Table Compression:\n"
" -Ca, --align trade off larger tables for better memory alignment\n"
" -Ce, --ecs construct equivalence classes\n"
" -Cf do not compress tables; use -f representation\n"
" -CF do not compress tables; use -F representation\n"
" -Cm, --meta-ecs construct meta-equivalence classes\n"
" -Cr, --read use read() instead of stdio for scanner input\n"
" -f, --full generate fast, large scanner. Same as -Cfr\n"
" -F, --fast use alternate table representation. Same as -CFr\n"
" -Cem default compression (same as --ecs --meta-ecs)\n"
"\n"
"Debugging:\n"
" -d, --debug enable debug mode in scanner\n"
" -b, --backup write backing-up information to %s\n"
" -p, --perf-report write performance report to stderr\n"
" -s, --nodefault suppress default rule to ECHO unmatched text\n"
" -T, --env.trace %s should run in env.trace mode\n"
" -w, --nowarn do not generate warnings\n"
" -v, --verbose write summary of scanner statistics to stdout\n"
" --hex use hexadecimal numbers instead of octal in debug "
"outputs\n"
"\n"
"Files:\n"
" -o, --outfile=FILE specify output filename\n"
" -S, --skel=FILE specify skeleton file\n"
" -t, --stdout write scanner on stdout instead of %s\n"
" --yyclass=NAME name of C++ class\n"
" --header-file=FILE create a C header file in addition to the "
"scanner\n"
" --tables-file[=FILE] write tables to FILE\n"
" --backup-file=FILE write backing-up information to FILE\n"
"\n"
"Scanner behavior:\n"
" -7, --7bit generate 7-bit scanner\n"
" -8, --8bit generate 8-bit scanner\n"
" -B, --batch generate batch scanner (opposite of -I)\n"
" -i, --case-insensitive ignore case in patterns\n"
" -l, --lex-compat maximal compatibility with original lex\n"
" -X, --posix-compat maximal compatibility with POSIX lex\n"
" -I, --interactive generate interactive scanner (opposite of -B)\n"
" --yylineno track line count in yylineno\n"
"\n"
"Generated code:\n"
" -+, --c++ generate C++ scanner class\n"
" -Dmacro[=defn] #define macro defn (default defn is '1')\n"
" -e, --emit=LANG Specify target language\n"
" -L, --noline suppress #line directives in scanner\n"
" -P, --prefix=STRING use STRING as prefix instead of \"yy\"\n"
" -R, --reentrant generate a reentrant scanner\n"
" --bison-bridge scanner for Bison pure parser.\n"
" --bison-locations include yylloc support.\n"
" --stdinit initialize yyin/yyout to stdin/stdout\n"
" --nounistd do not include <unistd.h>\n"
" --noFUNCTION do not generate a particular FUNCTION\n"
"\n"
"Miscellaneous:\n"
" -c do-nothing POSIX option\n"
" -n do-nothing POSIX option\n"
" -?\n"
" -h, --help produce this help message\n"
" -V, --version report %s version\n"
msgstr ""
"Gera programas que realizam comparação de padrões em texto.\n"
"\n"
"Compressão de tabela:\n"
" -Ca, --align troca tabelas maiores para melhor alinhamento da "
"memória\n"
" -Ce, --ecs constrói classes de equivalência\n"
" -Cf não comprime tabelas; usa representação -f\n"
" -CF não comprime tabelas; usa representação -F\n"
" -Cm, --meta-ecs constrói classes de meta-equivalência\n"
" -Cr, --read usa read() em vez de stdio para entrada do analisador\n"
" -f, --full gera analisador rápido e grande. Igual a -Cfr\n"
" -F, --fast usa representação de tabela alternativa. Igual a -CFr\n"
" -Cem compressão predefinida (igual a --ecs --meta-ecs)\n"
"\n"
"Depuração:\n"
" -d, --debug activa modo de depuração no analisador\n"
" -b, --backup escreve informação de segurança em %s\n"
" -p, --perf-report escreve relatório de desempenho em stderr\n"
" -s, --nodefault suprime regra predefinida para texto não comparado "
"em ECHO\n"
" -T, --trace %s deve correr em modo de rasto\n"
" -w, --nowarn não gera avisos\n"
" -v, --verbose escreve resumo das estatísticas do analisador em "
"stdout\n"
"\n"
"Ficheiros:\n"
" -o, --outfile=FICH especifica o ficheiro de saída\n"
" -S, --skel=FICH especifica o ficheiro esqueleto\n"
" -t, --stdout escreve o analisador em stdout em vez de %s\n"
" --yyclass=NOME nome da classe C++\n"
" --header-file=FICH cria um ficheiro de cabeçalho C além do "
"analisador\n"
" --tables-file[=FICH] escreve tabelas em FICH\n"
"\n"
"Comportamento do analisador:\n"
" -7, --7bit gera analisador de 7-bit\n"
" -8, --8bit gera analisador de 8-bit\n"
" -B, --batch gera analisador em lote (oposto de -I)\n"
" -i, --case-insensitive ignora maiúsculas em padrões\n"
" -l, --lex-compat compatibilidade máxima com o léxico original\n"
" -X, --posix-compat compatibilidade máxima com o léxico POSIX\n"
" -I, --interactive gera analisador interactivo (oposto de -B)\n"
" --yylineno segue o total de linhas em yylineno\n"
"\n"
"Código gerado:\n"
" -+, --c++ gera classe de analisador C++\n"
" -Dmacro[=defn] #define macro defn (defn predefinido é \"1\")\n"
" -L, --noline suprime directivas #line no analisador\n"
" -P, --prefix=CADEIA usa CADEIA como prefixo em vez de \"yy\"\n"
" -R, --reentrant gera um analisador reentrant C\n"
" --bison-bridge analisador para processador de bison puro.\n"
" --bison-locations inclui suporte yylloc.\n"
" --stdinit inicializa yyin/yyout para stdin/stdout\n"
" --noansi-definitions definições de funções de estilo antigo\n"
" --noansi-prototypes lista de parâmetros em protótipos\n"
" --nounistd não inclui <unistd.h>\n"
" --noFUNÇÃO não gera uma FUNÇÃO em particular\n"
"\n"
"Mistas:\n"
" -c opção POSIX não-fazer-nada\n"
" -n opção POSIX não-fazer-nada\n"
" -?\n"
" -h, --help mostra esta mensagem de ajuda\n"
" -V, --version mostra a versão %s\n"
#: src/misc.c:70 src/misc.c:81
msgid "memory allocation failed in allocate_array()"
msgstr "falha ao alocar memória em allocate_array()"
#: src/misc.c:131
#, c-format
msgid "bad character '%s' detected in check_char()"
msgstr "mau carácter \"%s\" detectado em check_char()"
#: src/misc.c:136
#, c-format
msgid "scanner requires -8 flag to use the character %s"
msgstr "o analisador requer bandeira -8 para usar o carácter %s"
#: src/misc.c:155
#, fuzzy
msgid "memory allocation failure in xstrdup()"
msgstr "falha ao alocar memória em allocate_array()"
#: src/misc.c:231
#, c-format
msgid "%s: fatal internal error, %s\n"
msgstr "%s: erro interno fatal, %s\n"
#: src/misc.c:587 src/misc.c:598
msgid "attempt to increase array size failed"
msgstr "falha ao tentar aumentar o tamanho da matriz"
#: src/misc.c:645
msgid "memory allocation failed in yy_flex_xmalloc()"
msgstr "falha ao alocar memória em yy_flex_xmalloc()"
#: src/nfa.c:100
#, c-format
msgid ""
"\n"
"\n"
"********** beginning dump of nfa with start state %d\n"
msgstr ""
"\n"
"\n"
"********** a começar o despejo de nfa com estado inicial %d\n"
#: src/nfa.c:111
#, c-format
msgid "state # %4d\t"
msgstr "estado nº %4d\t"
#: src/nfa.c:126
#, c-format
msgid "********** end of dump\n"
msgstr "********** fim de despejo\n"
#: src/nfa.c:169
msgid "empty machine in dupmachine()"
msgstr "máquina vazia em dupmachine()"
#: src/nfa.c:234
#, c-format
msgid "Variable trailing context rule at line %d\n"
msgstr "Regra variável de contexto final na linha %d\n"
#: src/nfa.c:353
msgid "bad state type in mark_beginning_as_normal()"
msgstr "mau tipo de estado em mark_beginning_as_normal()"
#: src/nfa.c:593
#, c-format
msgid "input rules are too complicated (>= %d NFA states)"
msgstr "regras de entrada muito complicadas (>= %d estados NFA)"
#: src/nfa.c:671
msgid "found too many transitions in mkxtion()"
msgstr "encontradas demasiadas transições em mkxtion()"
#: src/nfa.c:697
#, c-format
msgid "too many rules (> %d)!"
msgstr "demasiadas regras (> %d)!"
#: src/parse.y:163
msgid "unknown error processing section 1"
msgstr "erro desconhecido ao processar a secção 1"
#: src/parse.y:188 src/parse.y:373
msgid "bad start condition list"
msgstr "má lista de condição inicial"
#: src/parse.y:208
msgid "Prefix must not contain [ or ]"
msgstr ""
#: src/parse.y:337
msgid "unrecognized rule"
msgstr "regra não reconhecida"
#: src/parse.y:456 src/parse.y:469 src/parse.y:538
msgid "trailing context used twice"
msgstr "contexto final usado duas vezes"
#: src/parse.y:574 src/parse.y:584 src/parse.y:657 src/parse.y:667
msgid "bad iteration values"
msgstr "maus valores de iteração"
#: src/parse.y:602 src/parse.y:620 src/parse.y:685 src/parse.y:703
msgid "iteration value must be positive"
msgstr "o valor de iteração tem de ser positivo"
#: src/parse.y:826 src/parse.y:836
#, c-format
msgid "the character range [%c-%c] is ambiguous in a case-insensitive scanner"
msgstr ""
"o intervalo de caracteres [%c-%c] é ambíguo num analisador que ignora "
"maiúsculas"
#: src/parse.y:841
msgid "negative range in character class"
msgstr "intervalo negativo em classe de carácter"
#: src/parse.y:938
msgid "[:^lower:] is ambiguous in case insensitive scanner"
msgstr "[:^lower:] é ambíguo num analisador que ignora maiúsculas"
#: src/parse.y:944
msgid "[:^upper:] ambiguous in case insensitive scanner"
msgstr "[:^upper:] é ambíguo num analisador que ignora maiúsculas"
#: src/scan.l:73 src/scan.l:662 src/scan.l:720
msgid "Input line too long\n"
msgstr "Linha de entrada muito grande\n"
#: src/scan.l:185
#, c-format
msgid "malformed '%top' directive"
msgstr "directiva \"%top\" mal formada"
#: src/scan.l:207
#, no-c-format
msgid "unrecognized '%' directive"
msgstr "directiva \"%\" não reconhecida"
#: src/scan.l:216
msgid "Definition name too long\n"
msgstr "Nome de definição muito longo\n"
#: src/scan.l:311
msgid "Unmatched '{'"
msgstr "{ sem par"
#: src/scan.l:327
#, c-format
msgid "Definition value for {%s} too long\n"
msgstr "Valor de definição para {%s} muito longo\n"
#: src/scan.l:344
msgid "incomplete name definition"
msgstr "Definição de nome incompleta"
#: src/scan.l:486
msgid "Option line too long\n"
msgstr "Linha de opção muito longa\n"
#: src/scan.l:494
#, c-format
msgid "unrecognized %%option: %s"
msgstr "%%opção não reconhecida: %s"
#: src/scan.l:677 src/scan.l:850
msgid "bad character class"
msgstr "má classe de carácter"
#: src/scan.l:727
#, c-format
msgid "undefined definition {%s}"
msgstr "definição {%s} indefinida"
#: src/scan.l:790
msgid "unbalanced parenthesis"
msgstr ""
#: src/scan.l:805
#, c-format
msgid "bad <start condition>: %s"
msgstr "má <condição inicial>: %s"
#: src/scan.l:818
msgid "missing quote"
msgstr "aspa em falta"
#: src/scan.l:884
#, c-format
msgid "bad character class expression: %s"
msgstr "má expressão de classe de carácter: %s"
#: src/scan.l:906
msgid "bad character inside {}'s"
msgstr "mau carácter dentro de {}"
#: src/scan.l:912
msgid "missing }"
msgstr "} em falta"
#: src/scan.l:1020
msgid "EOF encountered inside an action"
msgstr "EOF encontrado dentro de uma acção"
#: src/scan.l:1025
msgid "EOF encountered inside pattern"
msgstr "EOF encontrado dentro de um padrão"
#: src/scan.l:1058
#, c-format
msgid "bad character: %s"
msgstr "mau carácter: %s"
#: src/scan.l:1086
#, c-format
msgid "can't open %s"
msgstr "impossível abrir %s"
#: src/scanopt.c:248
#, c-format
msgid "Usage: %s [OPTIONS]...\n"
msgstr "Uso: %s [OPÇÕES]...\n"
#: src/scanopt.c:484
#, c-format
msgid "option `%s' doesn't allow an argument\n"
msgstr "a opção \"%s\" não permite um argumento\n"
#: src/scanopt.c:489
#, c-format
msgid "option `%s' requires an argument\n"
msgstr "a opção \"%s\" requer um argumento\n"
#: src/scanopt.c:493
#, c-format
msgid "option `%s' is ambiguous\n"
msgstr "a opção \"%s\" é ambígua\n"
#: src/scanopt.c:497
#, c-format
msgid "Unrecognized option `%s'\n"
msgstr "Opção \"%s\" não reconhecida\n"
#: src/scanopt.c:501
#, c-format
msgid "Unknown error=(%d)\n"
msgstr "Erro desconhecido=(%d)\n"
#: src/sym.c:92
msgid "symbol table memory allocation failed"
msgstr "falha ao alocar memória de tabela de símbolos"
#: src/sym.c:183
msgid "name defined twice"
msgstr "nome definido duas vezes"
#: src/sym.c:231
#, c-format
msgid "start condition %s declared twice"
msgstr "condição inicial %s declarada duas vezes"
#: src/yylex.c:57
msgid "premature EOF"
msgstr "EOF prematuro"
#: src/yylex.c:200
#, c-format
msgid "End Marker\n"
msgstr "Marcador final\n"
#: src/yylex.c:206
#, c-format
msgid "*Something Weird* - tok: %d val: %d\n"
msgstr "*Algo esquisito* - tok: %d val: %d\n"
#~ msgid "Allocation of buffer for line directive failed"
#~ msgstr "Falha ao alocar buffer para directiva de linha"
#~ msgid "Allocation of buffer for m4 def failed"
#~ msgstr "Falha ao alocar buffer para m4 def"
#~ msgid "Allocation of buffer for m4 undef failed"
#~ msgstr "Falha ao alocar buffer para m4 undef"
#~ msgid "error creating header file %s"
#~ msgstr "erro ao criar ficheiro de cabeçalho %s"
#~ msgid "%s %s\n"
#~ msgstr "%s %s\n"
#~ msgid "allocation of sko_stack failed"
#~ msgstr "falha ao alocar sko_stack"
#~ msgid "name \"%s\" ridiculously long"
#~ msgstr "nome \"%s\" ridiculamente longo"
#~ msgid "dynamic memory failure in copy_string()"
#~ msgstr "falha de memória dinâmica copy_string()"
#~ msgid "bad line in skeleton file"
#~ msgstr "má linha em ficheiro esqueleto"

File diff suppressed because it is too large Load Diff

968
po/ro.po

File diff suppressed because it is too large Load Diff

504
po/ru.po

File diff suppressed because it is too large Load Diff

814
po/sr.po

File diff suppressed because it is too large Load Diff

894
po/sv.po

File diff suppressed because it is too large Load Diff

778
po/tr.po

File diff suppressed because it is too large Load Diff

971
po/uk.po
View File

@ -1,971 +0,0 @@
# Ukrainian translations for flex.
# Copyright (C) 2017 The Flex Project (msgids)
# This file is distributed under the same license as the flex package.
#
# Viktor Shepel <shepelvictor@bigmir.net>, 2017.
# Yuri Chornoivan <yurchor@ukr.net>, 2017, 2022.
msgid ""
msgstr ""
"Project-Id-Version: flex 2.6.4\n"
"Report-Msgid-Bugs-To: flex-devel@lists.sourceforge.net\n"
"POT-Creation-Date: 2022-09-27 14:18-0400\n"
"PO-Revision-Date: 2022-01-03 11:33+0200\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Lokalize 20.12.0\n"
#: src/buf.c:61
msgid "Allocation of buffer to print string failed"
msgstr "Не вдалось виділити буфер для рядка, що виводиться"
#: src/ccl.c:80
msgid "internal error: trying to add a char to a non-last ccl.\n"
msgstr ""
#: src/dfa.c:59
#, c-format
msgid "State #%d is non-accepting -\n"
msgstr "Стан #%d не є допустимим -\n"
#: src/dfa.c:119
msgid "dangerous trailing context"
msgstr "небезпечний замикаючий контекст"
#: src/dfa.c:159
#, c-format
msgid " associated rule line numbers:"
msgstr " номера рядків асоційованого правила:"
#: src/dfa.c:193
#, c-format
msgid " out-transitions: "
msgstr " out-переходи: "
#: src/dfa.c:201
#, c-format
msgid ""
"\n"
" jam-transitions: EOF "
msgstr ""
"\n"
" jam-переходи: EOF "
#: src/dfa.c:331
msgid "consistency check failed in epsclosure()"
msgstr "помилка при перевірці на цілісність у epsclosure()"
#: src/dfa.c:422
msgid ""
"\n"
"\n"
"DFA Dump:\n"
"\n"
msgstr ""
"\n"
"\n"
"Дамп ДСА:\n"
"\n"
#: src/dfa.c:558
msgid "could not create unique end-of-buffer state"
msgstr "неможливо створити унікальний стан end_of_buffer"
#: src/dfa.c:579
#, c-format
msgid "state # %d:\n"
msgstr "стан # %d:\n"
#: src/dfa.c:738
msgid "Could not write yynxt_tbl[][]"
msgstr "Неможливо записати yynxt_tbl[][]"
#: src/dfa.c:1001
msgid "bad transition character detected in sympartition()"
msgstr "виявлено невірний символ переходу в sympartition()"
#: src/gen.c:379
msgid ""
"\n"
"\n"
"Equivalence Classes:\n"
"\n"
msgstr ""
"\n"
"\n"
"Класи еквівалентності:\n"
"\n"
#: src/gen.c:425 src/gen.c:454 src/gen.c:638
#, c-format
msgid "state # %d accepts: [%d]\n"
msgstr "стан # %d приймає: [%d]\n"
#: src/gen.c:533
#, c-format
msgid "state # %d accepts: "
msgstr "стан # %d приймає: "
#: src/gen.c:582
msgid "Could not write yyacclist_tbl"
msgstr "Неможливо записати yyacclist_tbl"
#: src/gen.c:659
msgid "Could not write yyacc_tbl"
msgstr "Неможливо записати yyacc_tbl"
#: src/gen.c:674 src/gen.c:947 src/gen.c:974
msgid "Could not write ecstbl"
msgstr "Неможливо записати ecstbl"
#: src/gen.c:694
msgid ""
"\n"
"\n"
"Meta-Equivalence Classes:\n"
msgstr ""
"\n"
"\n"
"Мета-Еквівалентні Класи:\n"
#: src/gen.c:714
msgid "Could not write yymeta_tbl"
msgstr "Неможливо записати yymeta_tbl"
#: src/gen.c:774
msgid "Could not write yybase_tbl"
msgstr "Неможливо записати yybase_tbl"
#: src/gen.c:805
msgid "Could not write yydef_tbl"
msgstr "Неможливо записати yydef_tbl"
#: src/gen.c:844
msgid "Could not write yynxt_tbl"
msgstr "Неможливо записати yynxt_tbl"
#: src/gen.c:877
msgid "Could not write yychk_tbl"
msgstr "Неможливо записати yychk_tbl"
#: src/gen.c:932 src/gen.c:965
msgid "Could not write ftbl"
msgstr "Неможливо записати ftbl"
#: src/gen.c:938
msgid "Could not write ssltbl"
msgstr "Неможливо записати ssltbl"
#: src/gen.c:1014
msgid "Could not write eoltbl"
msgstr "Неможливо записати eoltbl"
#: src/gen.c:1061
msgid "Could not write yynultrans_tbl"
msgstr "Неможливо записати yynultrans_tbl"
#: src/main.c:169
msgid "rule cannot be matched"
msgstr "неможливо застосувати правило"
#: src/main.c:174
msgid "-s option given but default rule can be matched"
msgstr ""
"вказано параметр -s, але правило за замовчуванням може бути застосоване"
#: src/main.c:317
msgid "Can't use -+ with -l option"
msgstr "Неможливо використовувати -+ з параметром -l"
#: src/main.c:320
msgid "Can't use -f or -F with -l option"
msgstr "Неможливо використовувати -f або -F з параметром -l"
#: src/main.c:324
#, fuzzy
msgid "Can't use --ctrl.reentrant or --bison-bridge with -l option"
msgstr ""
"Неможливо використовувати --reentrant або --bison-bridge з параметром -l"
#: src/main.c:356
msgid "-Cf/-CF and -Cm don't make sense together"
msgstr "Параметри -Cf/-CF і -Cm разом не мають сенсу"
#: src/main.c:359
msgid "-Cf/-CF and -I are incompatible"
msgstr "Параметри -Cf/-CF і -I несумісні"
#: src/main.c:363
msgid "-Cf/-CF are incompatible with lex-compatibility mode"
msgstr "Параметри -Cf/-CF несумісні з режимом lex-compatibility"
#: src/main.c:368
msgid "-Cf and -CF are mutually exclusive"
msgstr "Параметри -Cf і -CF є взаємовиключними"
#: src/main.c:372
msgid "Can't use -+ with -CF option"
msgstr "Неможливо використовувати -+ з параметром -CF"
#: src/main.c:375
#, c-format
msgid "%array incompatible with -+ option"
msgstr "%array несумісний з параметром -+"
#: src/main.c:380
msgid "Options -+ and --reentrant are mutually exclusive."
msgstr "Параметри -+ і --reentrant є взаємовиключними."
#: src/main.c:383
msgid "bison bridge not supported for the C++ scanner."
msgstr "bison bridge не підтримується для сканера C++."
#: src/main.c:422 src/main.c:1235
#, c-format
msgid "could not create %s"
msgstr "неможливо створити %s"
#: src/main.c:443
#, c-format
msgid "%option yyclass only meaningful for C++ scanners"
msgstr "%option yyclass має сенс тільки для сканерів C++"
#: src/main.c:447
#, c-format
msgid "input error reading skeleton file %s"
msgstr "помилка читання файла-каркаса %s"
#: src/main.c:451
#, c-format
msgid "error closing skeleton file %s"
msgstr "помилка при закритті файла-каркаса %s"
#: src/main.c:457
#, c-format
msgid "error writing output file %s"
msgstr "помилка запису у вихідний файл %s"
#: src/main.c:461
#, c-format
msgid "error closing output file %s"
msgstr "помилка закриття вихідного файла %s"
#: src/main.c:465
#, c-format
msgid "error deleting output file %s"
msgstr "помилка видалення вихідного файла %s"
#: src/main.c:472
#, c-format
msgid "No backing up.\n"
msgstr "Резервне копіювання вимкнено.\n"
#: src/main.c:476
#, c-format
msgid "%d backing up (non-accepting) states.\n"
msgstr "резервне копіювання %d (недопустимих) станів.\n"
#: src/main.c:480
#, c-format
msgid "Compressed tables always back up.\n"
msgstr "Створення резервних копій стислих таблиць виконується завжди.\n"
#: src/main.c:483
#, c-format
msgid "error writing backup file %s"
msgstr "помилка запису резервної копії файла %s"
#: src/main.c:487
#, c-format
msgid "error closing backup file %s"
msgstr "помилка закриття резервної копії файла %s"
#: src/main.c:492
#, c-format
msgid "%s version %s usage statistics:\n"
msgstr "статистика використання %s версії %s:\n"
#: src/main.c:495
#, c-format
msgid " scanner options: -"
msgstr " параметри сканера: -"
#: src/main.c:574
#, c-format
msgid " %d/%d NFA states\n"
msgstr " %d/%d станів НСА\n"
#: src/main.c:576
#, c-format
msgid " %d/%d DFA states (%d words)\n"
msgstr " %d/%d станів ДСА (%d слів)\n"
#: src/main.c:578
#, c-format
msgid " %d rules\n"
msgstr " %d правил\n"
#: src/main.c:583
#, c-format
msgid " No backing up\n"
msgstr " Резервне копіювання вимкнено\n"
#: src/main.c:587
#, c-format
msgid " %d backing-up (non-accepting) states\n"
msgstr " резервне копіювання %d (недопустимих) станів\n"
#: src/main.c:592
#, c-format
msgid " Compressed tables always back-up\n"
msgstr " Створення резервних копій стислих таблиць виконується завжди\n"
#: src/main.c:596
#, c-format
msgid " Beginning-of-line patterns used\n"
msgstr " Використовуються шаблони початку рядка\n"
#: src/main.c:598
#, c-format
msgid " %d/%d start conditions\n"
msgstr " %d/%d початкових умов\n"
#: src/main.c:602
#, c-format
msgid " %d epsilon states, %d double epsilon states\n"
msgstr " %d епсилон-станів, %d подвійних епсилон-станів\n"
#: src/main.c:606
#, c-format
msgid " no character classes\n"
msgstr " відсутні класи символів\n"
#: src/main.c:610
#, c-format
msgid " %d/%d character classes needed %d/%d words of storage, %d reused\n"
msgstr ""
" %d/%d символьних класів потребують %d/%d слів для зберігання, %d "
"використано вдруге\n"
#: src/main.c:615
#, c-format
msgid " %d state/nextstate pairs created\n"
msgstr " створено %d пар стан/наступний-стан\n"
#: src/main.c:618
#, c-format
msgid " %d/%d unique/duplicate transitions\n"
msgstr " %d/%d унікальних/повторюваних переходів\n"
#: src/main.c:623
#, c-format
msgid " %d table entries\n"
msgstr " %d елементів таблиці\n"
#: src/main.c:631
#, c-format
msgid " %d/%d base-def entries created\n"
msgstr " створено %d/%d base-def елементів\n"
#: src/main.c:635
#, c-format
msgid " %d/%d (peak %d) nxt-chk entries created\n"
msgstr " створено %d/%d (пік %d) записів nxt-chk\n"
#: src/main.c:639
#, c-format
msgid " %d/%d (peak %d) template nxt-chk entries created\n"
msgstr " створено %d/%d (пік %d) шаблонних записів nxt-chk\n"
#: src/main.c:643
#, c-format
msgid " %d empty table entries\n"
msgstr " %d порожніх елементів таблиці\n"
#: src/main.c:645
#, c-format
msgid " %d protos created\n"
msgstr " створено %d прототипів\n"
#: src/main.c:648
#, c-format
msgid " %d templates created, %d uses\n"
msgstr " створено %d шаблонів, %d використовується\n"
#: src/main.c:656
#, c-format
msgid " %d/%d equivalence classes created\n"
msgstr " створено класів еквівалентності %d/%d\n"
#: src/main.c:664
#, c-format
msgid " %d/%d meta-equivalence classes created\n"
msgstr " створено класів мета-еквівалентності %d/%d\n"
#: src/main.c:670
#, c-format
msgid " %d (%d saved) hash collisions, %d DFAs equal\n"
msgstr " %d (%d записано) колізій хеш-таблиці, %d еквівалентних ДСА\n"
#: src/main.c:672
#, c-format
msgid " %d sets of reallocations needed\n"
msgstr " потрібно %d наборів повторних розміщень\n"
#: src/main.c:674
#, c-format
msgid " %d total table entries needed\n"
msgstr " всього потрібно %d елементів таблиці\n"
#: src/main.c:735
#, c-format
msgid "Internal error. flexopts are malformed.\n"
msgstr "Внутрішня помилка. Неправильне значення flexopts.\n"
#: src/main.c:745
#, c-format
msgid "Try `%s --help' for more information.\n"
msgstr "Спробуйте «%s --help» для отримання більш докладного опису.\n"
#: src/main.c:807
#, c-format
msgid "unknown -C option '%c'"
msgstr "невідоме значення «%c» для параметру -C"
#: src/main.c:1195
msgid "fatal parse error"
msgstr "фатальна помилка розбору"
#: src/main.c:1247
msgid "could not write tables header"
msgstr "Неможливо записати заголовок таблиць"
#: src/main.c:1251
#, c-format
msgid "can't open skeleton file %s"
msgstr "Неможливо відкрити файл-каркас %s"
#: src/main.c:1254
msgid "Prefix cannot include '[' or ']'"
msgstr "Префікс не може містити «[» або «]»"
#: src/main.c:1322
#, c-format
msgid "could not create backing-up info file %s"
msgstr "неможливо створити резервну копію інформаційного файла %s"
#: src/main.c:1343
#, c-format
msgid "-l AT&T lex compatibility option entails a large performance penalty\n"
msgstr ""
"Параметр -l сумісності з AT&T lex спричиняє значне зниження продуктивності\n"
#: src/main.c:1346
#, c-format
msgid " and may be the actual source of other reported performance penalties\n"
msgstr "і також може бути істинним джерелом проблем з продуктивністю\n"
#: src/main.c:1352
#, c-format
msgid ""
"%%option yylineno entails a performance penalty ONLY on rules that can match "
"newline characters\n"
msgstr ""
"%%option yylineno спричиняе значне зниження продуктивності ТІЛЬКИ для "
"правил, котрі описують символи нового рядка\n"
#: src/main.c:1359
#, c-format
msgid "-I (interactive) entails a minor performance penalty\n"
msgstr "-I (інтерактивний) спричиняе незначне зниження продуктивності\n"
#: src/main.c:1364
#, c-format
msgid "yymore() entails a minor performance penalty\n"
msgstr "yymore() спричиняе незначне зниження продуктивності\n"
#: src/main.c:1370
#, c-format
msgid "REJECT entails a large performance penalty\n"
msgstr "REJECT спричиняе значне зниження продуктивності\n"
#: src/main.c:1375
#, c-format
msgid "Variable trailing context rules entail a large performance penalty\n"
msgstr ""
"Правила котрі мають замикаючий контекст змінної довжини значно знижують "
"продуктивність\n"
#: src/main.c:1387
msgid "REJECT cannot be used with -f or -F"
msgstr "REJECT не може бути використано разом з -f або -F"
#: src/main.c:1390
#, c-format
msgid "%option yylineno cannot be used with REJECT"
msgstr "%option yylineno не може бути використано з REJECT"
#: src/main.c:1393
msgid "variable trailing context rules cannot be used with -f or -F"
msgstr ""
"Правила котрі мають замикаючий контекст змінної довжини не можуть бути "
"використані з -f or -F"
#: src/main.c:1428
msgid "allocation of macro definition failed"
msgstr "Не вдалось розмістити визначення макросу"
#: src/main.c:1745
#, c-format
msgid "Usage: %s [OPTIONS] [FILE]...\n"
msgstr "Використання: %s [ПАРАМЕТРИ] [ФАЙЛ]…\n"
#: src/main.c:1748
#, fuzzy, c-format
msgid ""
"Generates programs that perform pattern-matching on text.\n"
"\n"
"Table Compression:\n"
" -Ca, --align trade off larger tables for better memory alignment\n"
" -Ce, --ecs construct equivalence classes\n"
" -Cf do not compress tables; use -f representation\n"
" -CF do not compress tables; use -F representation\n"
" -Cm, --meta-ecs construct meta-equivalence classes\n"
" -Cr, --read use read() instead of stdio for scanner input\n"
" -f, --full generate fast, large scanner. Same as -Cfr\n"
" -F, --fast use alternate table representation. Same as -CFr\n"
" -Cem default compression (same as --ecs --meta-ecs)\n"
"\n"
"Debugging:\n"
" -d, --debug enable debug mode in scanner\n"
" -b, --backup write backing-up information to %s\n"
" -p, --perf-report write performance report to stderr\n"
" -s, --nodefault suppress default rule to ECHO unmatched text\n"
" -T, --env.trace %s should run in env.trace mode\n"
" -w, --nowarn do not generate warnings\n"
" -v, --verbose write summary of scanner statistics to stdout\n"
" --hex use hexadecimal numbers instead of octal in debug "
"outputs\n"
"\n"
"Files:\n"
" -o, --outfile=FILE specify output filename\n"
" -S, --skel=FILE specify skeleton file\n"
" -t, --stdout write scanner on stdout instead of %s\n"
" --yyclass=NAME name of C++ class\n"
" --header-file=FILE create a C header file in addition to the "
"scanner\n"
" --tables-file[=FILE] write tables to FILE\n"
" --backup-file=FILE write backing-up information to FILE\n"
"\n"
"Scanner behavior:\n"
" -7, --7bit generate 7-bit scanner\n"
" -8, --8bit generate 8-bit scanner\n"
" -B, --batch generate batch scanner (opposite of -I)\n"
" -i, --case-insensitive ignore case in patterns\n"
" -l, --lex-compat maximal compatibility with original lex\n"
" -X, --posix-compat maximal compatibility with POSIX lex\n"
" -I, --interactive generate interactive scanner (opposite of -B)\n"
" --yylineno track line count in yylineno\n"
"\n"
"Generated code:\n"
" -+, --c++ generate C++ scanner class\n"
" -Dmacro[=defn] #define macro defn (default defn is '1')\n"
" -e, --emit=LANG Specify target language\n"
" -L, --noline suppress #line directives in scanner\n"
" -P, --prefix=STRING use STRING as prefix instead of \"yy\"\n"
" -R, --reentrant generate a reentrant scanner\n"
" --bison-bridge scanner for Bison pure parser.\n"
" --bison-locations include yylloc support.\n"
" --stdinit initialize yyin/yyout to stdin/stdout\n"
" --nounistd do not include <unistd.h>\n"
" --noFUNCTION do not generate a particular FUNCTION\n"
"\n"
"Miscellaneous:\n"
" -c do-nothing POSIX option\n"
" -n do-nothing POSIX option\n"
" -?\n"
" -h, --help produce this help message\n"
" -V, --version report %s version\n"
msgstr ""
"Генерує програми, що знаходять шаблони у тексті.\n"
"\n"
"Стиснення таблиць:\n"
" -Ca, --align вирівняти таблиці у пам'яті збільшивши розмір\n"
" їх елементів\n"
" -Ce, --ecs створювати класи еквівалентності\n"
" -Cf не стискати таблиці; використовувати -f представлення\n"
" -CF не стискати таблиці; використовувати -F представлення\n"
" -Cm, --meta-ecs створювати класи мета-еквівалентності\n"
" -Cr, --read використати read() замість stdio як\n"
" вхідні дані сканера\n"
" -f, --full створити швидкий, великий сканер. Теж саме, що -Cfr\n"
" -F, --fast застосувати альтернативний опис таблиць.\n"
" Теж саме, що -CFr\n"
" -Cem степінь стиснення за замовчуванням\n"
" (теж саме, що --ecs --meta-ecs)\n"
"\n"
"Налагодження:\n"
" -d, --debug увімкнути режим налагодження сканера\n"
" -b, --backup записати резервну копію до %s\n"
" -p, --perf-report записати звіт про продуктивність до stderr\n"
" -s, --nodefault припинити вивід тексту (ECHO до stdout)\n"
" що не збігається з жодним правилом\n"
" -T, --trace %s повинен запускатися у режимі трасування\n"
" -w, --nowarn не видавати попереджень\n"
" -v, --verbose записати підсумкову статистику сканера до stdout\n"
" --hex шістнадцяткові числа замість вісімкових у "
"діагностиці\n"
"\n"
"Файли:\n"
" -o, --outfile=ФАЙЛ вказати ім'я вихідного файла\n"
" -S, --skel=ФАЙЛ вказати файл каркасу\n"
" -t, --stdout записати сканер до stdout замість %s\n"
" --yyclass=ІМ'Я ім'я класу C++\n"
" --header-file=ФАЙЛ створити C файл заголовок сканера\n"
" --tables-file[=ФАЙЛ] записати таблиці у ФАЙЛ\n"
"\n"
"Поведінка сканера:\n"
" -7, --7bit створити 7-бітний сканер\n"
" -8, --8bit створити 8-бітний сканер\n"
" -B, --batch створити пакетний сканер\n"
" (протилежна за властивостями до опції -I)\n"
" -i, --case-insensitive ігнорувати регістр символів у шаблонах\n"
" -l, --lex-compat максимальна сумісність з оригінальним lex\n"
" -X, --posix-compat максимальна сумісність з POSIX lex\n"
" -I, --interactive створити інтерактивний сканер\n"
" (протилежна за властивостями до опції -B)\n"
" --yylineno відслідковувати число рядків у yylineno\n"
"\n"
"Генерація коду:\n"
" -+, --c++ створити C++ клас сканера\n"
" -Dmacro[=defn] #define macro defn (за замовчуванням defn='1')\n"
" -L, --noline не створювати #line директиви для сканера\n"
" -P, --prefix=РЯДОК використати РЯДОК як префікс замість «yy»\n"
" -R, --reentrant генерувати реентерабельний C-сканер\n"
" --bison-bridge сканер тільки для bison аналізатору\n"
" --bison-locations додати підтримку yylloc\n"
" --stdinit ініціалізувати yyin/yyout до stdin/stdout\n"
" --nounistd не додавати <unistd.h>\n"
" --noФУНКЦІЯ не генерувати задану функцію ФУНКЦІЯ\n"
"\n"
"Інше:\n"
" -с недіючий POSIX параметр\n"
" -n недіючий POSIX параметр\n"
" -?\n"
" -h, --help показати цю довідку\n"
" -V, --version показати версію %s\n"
#: src/misc.c:70 src/misc.c:81
msgid "memory allocation failed in allocate_array()"
msgstr "помилка виділення пам'яті у allocate_array()"
#: src/misc.c:131
#, c-format
msgid "bad character '%s' detected in check_char()"
msgstr "check_char() виявив недопустимий символ «%s»"
#: src/misc.c:136
#, c-format
msgid "scanner requires -8 flag to use the character %s"
msgstr "для використання символу %s сканер потребує опцію -8"
#: src/misc.c:155
msgid "memory allocation failure in xstrdup()"
msgstr "помилка виділення пам'яті у xstrdup()"
#: src/misc.c:231
#, c-format
msgid "%s: fatal internal error, %s\n"
msgstr "%s: фатальна внутрішня помилка, %s\n"
#: src/misc.c:587 src/misc.c:598
msgid "attempt to increase array size failed"
msgstr "помилка при спробі збільшити розмір масиву"
#: src/misc.c:645
msgid "memory allocation failed in yy_flex_xmalloc()"
msgstr "помилка виділення пам'яті у yy_flex_xmalloc()"
#: src/nfa.c:100
#, c-format
msgid ""
"\n"
"\n"
"********** beginning dump of nfa with start state %d\n"
msgstr ""
"\n"
"\n"
"********** початок дампу НСА з початковим станом %d\n"
#: src/nfa.c:111
#, c-format
msgid "state # %4d\t"
msgstr "стан # %4d\t"
#: src/nfa.c:126
#, c-format
msgid "********** end of dump\n"
msgstr "********** кінець дампу\n"
#: src/nfa.c:169
msgid "empty machine in dupmachine()"
msgstr "порожній автомат у dupmachine()"
#: src/nfa.c:234
#, c-format
msgid "Variable trailing context rule at line %d\n"
msgstr "Правило із замикаючим контекстом змінної довжини у стрічці %d\n"
#: src/nfa.c:353
msgid "bad state type in mark_beginning_as_normal()"
msgstr "невідомий тип стану у mark_beginning_as_normal()"
#: src/nfa.c:593
#, c-format
msgid "input rules are too complicated (>= %d NFA states)"
msgstr "вхідні правила занадто складні (>= %d станів НСА)"
#: src/nfa.c:671
msgid "found too many transitions in mkxtion()"
msgstr "знайдено занадто багато переходів у mkxtion()"
#: src/nfa.c:697
#, c-format
msgid "too many rules (> %d)!"
msgstr "занадто багато правил (> %d)!"
#: src/parse.y:163
msgid "unknown error processing section 1"
msgstr "невідома помилка при обробці розділу 1"
#: src/parse.y:188 src/parse.y:373
msgid "bad start condition list"
msgstr "невірний список початкових умов"
#: src/parse.y:208
msgid "Prefix must not contain [ or ]"
msgstr "Префікс не може містити символи «[» або «]»"
#: src/parse.y:337
msgid "unrecognized rule"
msgstr "нерозпізнане правило"
#: src/parse.y:456 src/parse.y:469 src/parse.y:538
msgid "trailing context used twice"
msgstr "замикаючий контекст використано двічі"
#: src/parse.y:574 src/parse.y:584 src/parse.y:657 src/parse.y:667
msgid "bad iteration values"
msgstr "невірно сформований діапазон ітерацій"
#: src/parse.y:602 src/parse.y:620 src/parse.y:685 src/parse.y:703
msgid "iteration value must be positive"
msgstr "кількість ітерацій повинна бути додатнім числом"
#: src/parse.y:826 src/parse.y:836
#, c-format
msgid "the character range [%c-%c] is ambiguous in a case-insensitive scanner"
msgstr ""
"використання діапазону символів [%c-%c] є двозначним для сканера, що не "
"чутливий до регістру символів"
#: src/parse.y:841
msgid "negative range in character class"
msgstr ""
"символьний клас описано діапазоном, перший елемент котрого більший за "
"останній"
#: src/parse.y:938
msgid "[:^lower:] is ambiguous in case insensitive scanner"
msgstr ""
"використання [:^lower:] є невизначеним для сканера, що не чутливий до "
"регістру символів"
#: src/parse.y:944
msgid "[:^upper:] ambiguous in case insensitive scanner"
msgstr ""
"використання [:^upper:] є невизначеним для сканера, що не чутливий до "
"регістру символів"
#: src/scan.l:73 src/scan.l:662 src/scan.l:720
msgid "Input line too long\n"
msgstr "Занадто довгий вхідний рядок\n"
#: src/scan.l:185
#, c-format
msgid "malformed '%top' directive"
msgstr "нерозпізнана директива «%top»"
#: src/scan.l:207
#, no-c-format
msgid "unrecognized '%' directive"
msgstr "нерозпізнана директива «%»"
#: src/scan.l:216
msgid "Definition name too long\n"
msgstr "Визначення має занадто довге ім'я\n"
#: src/scan.l:311
msgid "Unmatched '{'"
msgstr "Непарна «{»"
#: src/scan.l:327
#, c-format
msgid "Definition value for {%s} too long\n"
msgstr "Визначення {%s} має занадто довге значення\n"
#: src/scan.l:344
msgid "incomplete name definition"
msgstr "неповне визначення імені"
#: src/scan.l:486
msgid "Option line too long\n"
msgstr "Занадто довгий параметр\n"
#: src/scan.l:494
#, c-format
msgid "unrecognized %%option: %s"
msgstr "нерозпізнаний %%option: %s"
#: src/scan.l:677 src/scan.l:850
msgid "bad character class"
msgstr "помилковий символьний клас"
#: src/scan.l:727
#, c-format
msgid "undefined definition {%s}"
msgstr "нерозпізнане визначення {%s}"
#: src/scan.l:790
msgid "unbalanced parenthesis"
msgstr "незбалансовані круглі дужки"
#: src/scan.l:805
#, c-format
msgid "bad <start condition>: %s"
msgstr "невірно сформованана <умова, що активує правило>: %s"
#: src/scan.l:818
msgid "missing quote"
msgstr "відсутні лапки"
#: src/scan.l:884
#, c-format
msgid "bad character class expression: %s"
msgstr "символьний клас заданий некоректним виразом: %s"
#: src/scan.l:906
msgid "bad character inside {}'s"
msgstr "неприйнятний символ всередині {}"
#: src/scan.l:912
msgid "missing }"
msgstr "відсутній }"
#: src/scan.l:1020
msgid "EOF encountered inside an action"
msgstr "знайдено EOF всередині коду котрий асоційований з правилом"
#: src/scan.l:1025
msgid "EOF encountered inside pattern"
msgstr "знайдено EOF всередині шаблону, що задає правило"
#: src/scan.l:1058
#, c-format
msgid "bad character: %s"
msgstr "неочікуваний символ: %s"
#: src/scan.l:1086
#, c-format
msgid "can't open %s"
msgstr "неможливо відкрити %s"
#: src/scanopt.c:248
#, c-format
msgid "Usage: %s [OPTIONS]...\n"
msgstr "Використання: %s [ПАРАМЕТРИ]…\n"
#: src/scanopt.c:484
#, c-format
msgid "option `%s' doesn't allow an argument\n"
msgstr "параметр «%s» повинен використовуватись без аргументу\n"
#: src/scanopt.c:489
#, c-format
msgid "option `%s' requires an argument\n"
msgstr "параметр «% s» повинен використовуватись з аргументом\n"
#: src/scanopt.c:493
#, c-format
msgid "option `%s' is ambiguous\n"
msgstr "параметр «%s» є двозначним\n"
#: src/scanopt.c:497
#, c-format
msgid "Unrecognized option `%s'\n"
msgstr "Нерозпізнаний параметр «%s»\n"
#: src/scanopt.c:501
#, c-format
msgid "Unknown error=(%d)\n"
msgstr "Невідома помилка=(%d)\n"
#: src/sym.c:92
msgid "symbol table memory allocation failed"
msgstr "помилка виділення пам'яті для таблиці символів"
#: src/sym.c:183
msgid "name defined twice"
msgstr "ім'я визначено двічі"
#: src/sym.c:231
#, c-format
msgid "start condition %s declared twice"
msgstr "початкова умова %s описана двічі"
#: src/yylex.c:57
msgid "premature EOF"
msgstr "неочікуваний EOF"
#: src/yylex.c:200
#, c-format
msgid "End Marker\n"
msgstr "Мітка кінця\n"
#: src/yylex.c:206
#, c-format
msgid "*Something Weird* - tok: %d val: %d\n"
msgstr "*Щось не так* — tok: %d val: %d\n"
#~ msgid "Allocation of buffer for line directive failed"
#~ msgstr "Не вдалось виділити буфер для рядкової директиви"
#~ msgid "Allocation of buffer for m4 def failed"
#~ msgstr "Не вдалось виділити буфер для m4 def"
#~ msgid "Allocation of buffer for m4 undef failed"
#~ msgstr "Не вдалось виділити буфер для m4 undef"
#~ msgid "error creating header file %s"
#~ msgstr "помилка створення файла-заголовку %s"
#~ msgid "%s %s\n"
#~ msgstr "%s %s\n"
#~ msgid "allocation of sko_stack failed"
#~ msgstr "не вдалось отримати пам’ять під sko_stack"
#~ msgid "name \"%s\" ridiculously long"
#~ msgstr "ім'я «%s» занадто довге"
#~ msgid "bad line in skeleton file"
#~ msgstr "невідомий рядок у файлі-каркасі"
#~ msgid "dynamic memory failure in copy_string()"
#~ msgstr "помилка під час роботи з динамічною пам’яттю у copy_string()"

View File

@ -1,26 +0,0 @@
#!/bin/sh
# shell for updating the translations before a release
# Let this be executed in the po/ subdir.
cd "$(dirname "$0")" || exit
echo "Updating translations via TP"
rsync -Lrtvz translationproject.org::tp/latest/flex/ . # || exit
# Are there now PO files that are not in svn yet?
NEWSTUFF=$(git status --porcelain *.po | grep "^??")
if [ -n "${NEWSTUFF}" ]; then
echo "New languages found; updating LINGUAS"
echo "# List of available languages." >LINGUAS
echo $(printf '%s\n' *.po | LC_ALL=C sort | sed 's/\.po//g') >>LINGUAS
fi
echo "Regenerating POT file and remerging and recompiling PO files..."
make update-po
# Ensure that the PO files are newer than the POT.
touch *.po
# Compile PO files
make

823
po/vi.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

13
src/.gitignore vendored
View File

@ -1,21 +1,12 @@
*.la
*.lo
*.o
*-flex.h
config.h
config.h.in
config_for_build.h
flex
libfl.pc
parse.c
parse.h
scan.c
stage1scan.c
skel.c
stage1scan.[cl]
stage1flex
stage2compare
stage2scan.c
# for MSWindows
*.obj
*.exe

View File

@ -95,14 +95,14 @@ public:
int lineno() const { return yylineno; }
int debug() const { return yyflexdebug; }
void set_debug( int flag ) { yyflexdebug = flag; }
int debug() const { return yy_flex_debug; }
void set_debug( int flag ) { yy_flex_debug = flag; }
protected:
char* yytext;
int yyleng;
int yylineno; // only maintained if you use %option yylineno
int yyflexdebug; // only has effect with -d or "%option debug"
int yy_flex_debug; // only has effect with -d or "%option debug"
};
}
@ -139,7 +139,6 @@ public:
void yypush_buffer_state( yy_buffer_state* new_buffer );
void yypop_buffer_state();
virtual int yyread(char *buf, size_t);
virtual int yylex();
virtual void switch_streams( std::istream& new_in, std::ostream& new_out );
virtual void switch_streams( std::istream* new_in = 0, std::ostream* new_out = 0 );
@ -149,8 +148,8 @@ protected:
virtual int LexerInput( char* buf, int max_size );
virtual void LexerOutput( const char* buf, int size );
virtual void LexerError( const char* msg );
void yyunput_r( int c, char* buf_ptr );
void yyunput( int c, char* buf_ptr );
int yyinput();
void yy_load_buffer_state();
@ -202,7 +201,6 @@ protected:
yy_state_type* yy_state_buf;
yy_state_type* yy_state_ptr;
size_t yy_state_buf_max;
char* yy_full_match;
int* yy_full_state;

View File

@ -1,187 +1,123 @@
AM_YFLAGS = -d
AM_CPPFLAGS = -DLOCALEDIR=\"$(localedir)\"
AM_CFLAGS = $(WARNINGFLAGS)
localedir = $(datadir)/locale
AM_CPPFLAGS = -DLOCALEDIR=\"$(localedir)\" -I$(top_srcdir)/intl
LIBS = @LIBS@
pkgconfigdir = @pkgconfigdir@
m4 = @M4@
bin_PROGRAMS = flex
if ENABLE_BOOTSTRAP
noinst_PROGRAMS = stage1flex
if !CROSS
noinst_DATA = stage2compare
endif
endif
if ENABLE_LIBFL
lib_LTLIBRARIES = libfl.la
pkgconfig_DATA = libfl.pc
endif
libfl_la_SOURCES = \
libmain.c \
libyywrap.c
libfl_la_LDFLAGS = -version-info @SHARED_VERSION_INFO@
lib_LTLIBRARIES = \
libfl.la \
libfl_pic.la
stage1flex_SOURCES = \
scan.l \
$(COMMON_SOURCES)
nodist_stage1flex_SOURCES = \
$(SKELINCLUDES)
if CROSS
stage1flex_LDADD =
stage1flex_SOURCES += \
../lib/malloc.c \
../lib/realloc.c
stage1flex_LINK = $(LIBTOOL) --tag=CC --mode=link $(CC_FOR_BUILD) \
$(CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@
$(stage1flex_OBJECTS): CC=$(CC_FOR_BUILD)
$(stage1flex_OBJECTS): CFLAGS=$(CFLAGS_FOR_BUILD) -DUSE_CONFIG_FOR_BUILD
$(stage1flex_OBJECTS): CPP=$(CPP_FOR_BUILD)
$(stage1flex_OBJECTS): CPPFLAGS=$(CPPFLAGS_FOR_BUILD)
$(stage1flex_OBJECTS): LDFLAGS=$(LDFLAGS_FOR_BUILD)
else
stage1flex_LDADD = $(LDADD)
stage1flex_LINK = $(LINK)
stage1flex_CFLAGS = $(AM_CFLAGS)
endif
flex_SOURCES = \
stage1scan.l \
$(COMMON_SOURCES)
nodist_flex_SOURCES = \
$(SKELINCLUDES)
if ENABLE_BOOTSTRAP
nodist_flex_SOURCES += stage1scan.c
else
flex_SOURCES += scan.l
endif
COMMON_SOURCES = \
buf.c \
ccl.c \
dfa.c \
ecs.c \
filter.c \
flexdef.h \
flexint.h \
flexint_shared.h \
gen.c \
main.c \
misc.c \
nfa.c \
options.c \
options.h \
parse.y \
regex.c \
scanflags.c \
scanopt.c \
scanopt.h \
skeletons.c \
skel.c \
sym.c \
tables.c \
tables.h \
tables_shared.c \
tables_shared.h \
tblcmp.c \
version.h \
yylex.c
LDADD = $(LIBOBJS) @LIBINTL@
LDADD = ../lib/libcompat.la @LIBINTL@
$(LIBOBJS): $(LIBOBJDIR)$(am__dirstamp)
libfl_la_SOURCES = \
libmain.c \
libyywrap.c
libfl_la_LDFLAGS = -version-info @SHARED_VERSION_INFO@
libfl_pic_la_SOURCES = \
libmain.c \
libyywrap.c
libfl_pic_la_LDFLAGS = -version-info @SHARED_VERSION_INFO@
noinst_HEADERS = \
flexdef.h \
flexint.h \
version.h \
options.h \
scanopt.h \
tables.h \
tables_shared.h
include_HEADERS = \
FlexLexer.h
EXTRA_DIST = \
c99-flex.skl \
cpp-flex.skl \
go-flex.skl \
flex.skl \
mkskel.sh \
gettext.h \
chkskel.sh
gettext.h
MOSTLYCLEANFILES = \
$(SKELINCLUDES) \
stage1scan.c \
stage2scan.c \
stage2compare
DISTCLEANFILES = stage1scan.c
CLEANFILES = stage1flex$(EXEEXT)
MAINTAINERCLEANFILES = skel.c
SKELINCLUDES = \
cpp-flex.h \
c99-flex.h \
go-flex.h
$(srcdir)/skel.c: flex.skl mkskel.sh flexint.h tables_shared.h
sed 's/m4_/m4postproc_/g; s/m4preproc_/m4_/g' $(srcdir)/flex.skl | \
$(m4) -P -I $(srcdir) \
-DFLEX_MAJOR_VERSION=` echo $(VERSION)|cut -f 1 -d .` \
-DFLEX_MINOR_VERSION=` echo $(VERSION)|cut -f 2 -d .` \
-DFLEX_SUBMINOR_VERSION=`echo $(VERSION)|cut -f 3 -d .` | \
sed 's/m4postproc_/m4_/g' | \
$(SHELL) $(srcdir)/mkskel.sh >skel.c.tmp
mv skel.c.tmp $(srcdir)/skel.c
cpp-flex.h: cpp-flex.skl mkskel.sh flexint_shared.h tables_shared.h tables_shared.c
$(SHELL) $(srcdir)/mkskel.sh cpp $(srcdir) $(m4) $(VERSION) > $@.tmp
$(SHELL) $(srcdir)/chkskel.sh $@.tmp
mv -f $@.tmp $@
stage1scan.l: scan.l
cp $(srcdir)/scan.l $(srcdir)/stage1scan.l
c99-flex.h: c99-flex.skl mkskel.sh
$(SHELL) $(srcdir)/mkskel.sh c99 $(srcdir) $(m4) $(VERSION) > $@.tmp
$(SHELL) $(srcdir)/chkskel.sh $@.tmp
mv -f $@.tmp $@
stage1scan.c: stage1scan.l stage1flex$(EXEEXT)
$(top_builddir)/src/stage1flex$(EXEEXT) -o $@ $<
go-flex.h: go-flex.skl mkskel.sh
$(SHELL) $(srcdir)/mkskel.sh go $(srcdir) $(m4) $(VERSION) > $@.tmp
$(SHELL) $(srcdir)/chkskel.sh $@.tmp
mv -f $@.tmp $@
# The input and output file names are fixed for deterministic scanner
# generation. If scan.l is not modified by builders, stage1scan.c should
# be bit-identical to the scan.c pregenerated on release.
stage1scan.c: scan.l stage1flex$(EXEEXT)
( cd $(srcdir) && $(abs_builddir)/stage1flex$(EXEEXT) \
$(AM_LFLAGS) $(LFLAGS) -o scan.c -t scan.l ) >$@ || \
{ s=$$?; rm -f $@; exit $$s; }
# Unlike stage1scan.c, we leave stage2scan.c intact when the generation
# fails. This allow users to examine generation errors.
stage2scan.c: scan.l flex$(EXEEXT) stage1scan.c
( cd $(srcdir) && $(abs_builddir)/flex$(EXEEXT) \
$(AM_LFLAGS) $(LFLAGS) -o scan.c -t scan.l ) >$@
stage2compare: stage1scan.c
@rm -f stage2scan.c; \
$(MAKE) $(AM_MAKEFLAGS) stage2scan.c; \
echo Comparing stage1scan.c and stage2scan.c; \
cmp stage1scan.c stage2scan.c || { \
s=$$?; \
echo "Bootstrap comparison failure!"; \
exit $$s; \
}; \
echo Comparison successful.; \
echo success >$@
dist-hook: scan.l flex$(EXEEXT)
chmod u+w $(distdir) && \
chmod u+w $(distdir)/scan.c && \
( cd $(srcdir) && $(abs_builddir)/flex$(EXEEXT) \
-o scan.c -t scan.l ) >scan.c && \
mv -f scan.c $(distdir)
# make needs to be told to make inclusions so that parallelized runs will
# not fail.
stage1flex-skeletons.$(OBJEXT): $(SKELINCLUDES)
skeletons.$(OBJEXT): $(SKELINCLUDES)
stage1flex-main.$(OBJEXT): parse.h
main.$(OBJEXT): parse.h
stage1flex-yylex.$(OBJEXT): parse.h
yylex.$(OBJEXT): parse.h
stage1flex-scan.$(OBJEXT): parse.h
stage1scan.$(OBJEXT): parse.h
scan.$(OBJEXT): parse.h
# Explicitly describe dependencies.
# You can recreate this with `gcc -I. -MM *.c'
buf.o: buf.c flexdef.h flexint.h
ccl.o: ccl.c flexdef.h flexint.h
dfa.o: dfa.c flexdef.h flexint.h tables.h tables_shared.h
ecs.o: ecs.c flexdef.h flexint.h
scanflags.o: scanflags.c flexdef.h flexint.h
gen.o: gen.c flexdef.h flexint.h tables.h tables_shared.h
libmain.o: libmain.c
libyywrap.o: libyywrap.c
main.o: main.c flexdef.h flexint.h version.h options.h scanopt.h \
tables.h tables_shared.h
misc.o: misc.c flexdef.h flexint.h tables.h tables_shared.h
nfa.o: nfa.c flexdef.h flexint.h
options.o: options.c options.h scanopt.h flexdef.h flexint.h
parse.o: parse.c flexdef.h flexint.h tables.h tables_shared.h
scan.o: scan.c flexdef.h flexint.h parse.h
scanopt.o: scanopt.c flexdef.h flexint.h scanopt.h
skel.o: skel.c flexdef.h flexint.h
sym.o: sym.c flexdef.h flexint.h
tables.o: tables.c flexdef.h flexint.h tables.h tables_shared.h
tables_shared.o: tables_shared.c flexdef.h flexint.h tables.h \
tables_shared.h
tblcmp.o: tblcmp.c flexdef.h flexint.h
yylex.o: yylex.c flexdef.h flexint.h parse.h
filter.o: filter.c flexdef.h flexint.h
# Run GNU indent on sources. Don't run this unless all the sources compile cleanly.
#
@ -218,14 +154,11 @@ indentfiles = \
tables_shared.h \
tblcmp.c
indent: $(top_srcdir)/.indent.pro
cd $(top_srcdir) && \
for f in $(indentfiles); do \
f=src/$$f; \
echo indenting $$f; \
INDENT_PROFILE=.indent.pro $(INDENT) <$$f >/dev/null && \
INDENT_PROFILE=.indent.pro $(INDENT) $$f || \
echo $$f FAILED to indent; \
done;
.PHONY: indent
indent:
if [ -f .indent.pro ] ; then \
for f in $(indentfiles);\
do\
echo indenting $$f ;\
$(indent) < $$f >/dev/null && indent $$f || echo $$f FAILED to indent ;\
done \
fi

140
src/buf.c
View File

@ -47,13 +47,31 @@
/* global buffers. */
struct Buf userdef_buf; /**< for user #definitions triggered by cmd-line. */
struct Buf defs_buf; /**< for #define's autogenerated. List of strings. */
struct Buf yydmap_buf; /**< string buffer to hold yydmap elements */
struct Buf m4defs_buf; /**< m4 definitions. List of strings. */
struct Buf top_buf; /**< contains %top code. String buffer. */
struct Buf *buf_print_strings(struct Buf * buf, FILE* out)
{
int i;
if(!buf || !out)
return buf;
for (i=0; i < buf->nelts; i++){
const char * s = ((char**)buf->elts)[i];
if(s)
fprintf(out, "%s", s);
}
return buf;
}
/* Append a "%s" formatted string to a string buffer */
struct Buf *buf_prints (struct Buf *buf, const char *fmt, const char *s)
{
char *t;
size_t tsz;
size_t tsz;
tsz = strlen(fmt) + strlen(s) + 1;
t = malloc(tsz);
@ -65,6 +83,52 @@ struct Buf *buf_prints (struct Buf *buf, const char *fmt, const char *s)
return buf;
}
/** Append a line directive to the string buffer.
* @param buf A string buffer.
* @param filename file name
* @param lineno line number
* @return buf
*/
struct Buf *buf_linedir (struct Buf *buf, const char* filename, int lineno)
{
char *dst, *t;
const char *src;
size_t tsz;
if (gen_line_dirs)
return buf;
tsz = strlen("#line \"\"\n") + /* constant parts */
2 * strlen (filename) + /* filename with possibly all backslashes escaped */
(int) (1 + log10 (abs (lineno))) + /* line number */
1; /* NUL */
t = malloc(tsz);
if (!t)
flexfatal (_("Allocation of buffer for line directive failed"));
for (dst = t + snprintf (t, tsz, "#line %d \"", lineno), src = filename; *src; *dst++ = *src++)
if (*src == '\\') /* escape backslashes */
*dst++ = '\\';
*dst++ = '"';
*dst++ = '\n';
*dst = '\0';
buf = buf_strappend (buf, t);
free(t);
return buf;
}
/** Append the contents of @a src to @a dest.
* @param @a dest the destination buffer
* @param @a dest the source buffer
* @return @a dest
*/
struct Buf *buf_concat(struct Buf* dest, const struct Buf* src)
{
buf_append(dest, src->elts, src->nelts);
return dest;
}
/* Appends n characters in str to buf. */
struct Buf *buf_strnappend (struct Buf *buf, const char *str, int n)
{
@ -82,6 +146,62 @@ struct Buf *buf_strappend (struct Buf *buf, const char *str)
return buf_strnappend (buf, str, (int) strlen (str));
}
/* appends "#define str def\n" */
struct Buf *buf_strdefine (struct Buf *buf, const char *str, const char *def)
{
buf_strappend (buf, "#define ");
buf_strappend (buf, " ");
buf_strappend (buf, str);
buf_strappend (buf, " ");
buf_strappend (buf, def);
buf_strappend (buf, "\n");
return buf;
}
/** Pushes "m4_define( [[def]], [[val]])m4_dnl" to end of buffer.
* @param buf A buffer as a list of strings.
* @param def The m4 symbol to define.
* @param val The definition; may be NULL.
* @return buf
*/
struct Buf *buf_m4_define (struct Buf *buf, const char* def, const char* val)
{
const char * fmt = "m4_define( [[%s]], [[%s]])m4_dnl\n";
char * str;
size_t strsz;
val = val?val:"";
strsz = strlen(fmt) + strlen(def) + strlen(val) + 2;
str = malloc(strsz);
if (!str)
flexfatal (_("Allocation of buffer for m4 def failed"));
snprintf(str, strsz, fmt, def, val);
buf_append(buf, &str, 1);
return buf;
}
/** Pushes "m4_undefine([[def]])m4_dnl" to end of buffer.
* @param buf A buffer as a list of strings.
* @param def The m4 symbol to undefine.
* @return buf
*/
struct Buf *buf_m4_undefine (struct Buf *buf, const char* def)
{
const char * fmt = "m4_undefine( [[%s]])m4_dnl\n";
char * str;
size_t strsz;
strsz = strlen(fmt) + strlen(def) + 2;
str = malloc(strsz);
if (!str)
flexfatal (_("Allocation of buffer for m4 undef failed"));
snprintf(str, strsz, fmt, def);
buf_append(buf, &str, 1);
return buf;
}
/* create buf with 0 elements, each of size elem_size. */
void buf_init (struct Buf *buf, size_t elem_size)
{
@ -121,26 +241,26 @@ struct Buf *buf_append (struct Buf *buf, const void *ptr, int n_elem)
n_alloc = n_elem + buf->nelts;
/* ...plus some extra */
if ((((size_t) n_alloc * buf->elt_size) % 512) != 0
if (((n_alloc * buf->elt_size) % 512) != 0
&& buf->elt_size < 512)
n_alloc += (int)
((512 -
(((size_t) n_alloc * buf->elt_size) % 512)) /
buf->elt_size);
n_alloc +=
(512 -
((n_alloc * buf->elt_size) % 512)) /
buf->elt_size;
if (!buf->elts)
buf->elts =
allocate_array ((int) n_alloc, buf->elt_size);
allocate_array (n_alloc, buf->elt_size);
else
buf->elts =
reallocate_array (buf->elts, (int) n_alloc,
reallocate_array (buf->elts, n_alloc,
buf->elt_size);
buf->nmax = n_alloc;
}
memcpy ((char *) buf->elts + (size_t) buf->nelts * buf->elt_size, ptr,
(size_t) n_elem * buf->elt_size);
memcpy ((char *) buf->elts + buf->nelts * buf->elt_size, ptr,
n_elem * buf->elt_size);
buf->nelts += n_elem;
return buf;

File diff suppressed because it is too large Load Diff

View File

@ -73,13 +73,6 @@ void ccladd (int cclp, int ch)
newpos = ind + len;
/* For a non-last cclp, expanding the set will overflow and overwrite a
* char in the next cclp.
* FIXME: Need another allocation scheme for ccl's. */
if (cclp != lastccl) {
flexfatal(_("internal error: trying to add a char to a non-last ccl.\n"));
}
if (newpos >= current_max_ccl_tbl_size) {
current_max_ccl_tbl_size += MAX_CCL_TBL_SIZE_INCREMENT;
@ -101,7 +94,7 @@ static void dump_cclp (FILE* file, int cclp)
putc ('[', file);
for (i = 0; i < ctrl.csize; ++i) {
for (i = 0; i < csize; ++i) {
if (ccl_contains(cclp, i)){
int start_char = i;
@ -109,7 +102,7 @@ static void dump_cclp (FILE* file, int cclp)
fputs (readable_form (i), file);
while (++i < ctrl.csize && ccl_contains(cclp,i)) ;
while (++i < csize && ccl_contains(cclp,i)) ;
if (i - 1 > start_char)
/* this was a run */
@ -135,10 +128,10 @@ ccl_set_diff (int a, int b)
d = cclinit();
/* In order to handle negation, we spin through all possible chars,
* adding each char in a that is not in b.
* addding each char in a that is not in b.
* (This could be O(n^2), but n is small and bounded.)
*/
for ( ch = 0; ch < ctrl.csize; ++ch )
for ( ch = 0; ch < csize; ++ch )
if (ccl_contains (a, ch) && !ccl_contains(b, ch))
ccladd (d, ch);
@ -202,7 +195,9 @@ int cclinit (void)
ccllen =
reallocate_integer_array (ccllen, current_maxccls);
cclng = reallocate_integer_array (cclng, current_maxccls);
ccl_has_nl = reallocate_array(ccl_has_nl, current_maxccls, sizeof(char));
ccl_has_nl =
reallocate_bool_array (ccl_has_nl,
current_maxccls);
}
if (lastccl == 1)
@ -248,7 +243,7 @@ void list_character_set (FILE *file, int cset[])
putc ('[', file);
for (i = 0; i < ctrl.csize; ++i) {
for (i = 0; i < csize; ++i) {
if (cset[i]) {
int start_char = i;
@ -256,7 +251,7 @@ void list_character_set (FILE *file, int cset[])
fputs (readable_form (i), file);
while (++i < ctrl.csize && cset[i]) ;
while (++i < csize && cset[i]) ;
if (i - 1 > start_char)
/* this was a run */

View File

@ -1,33 +0,0 @@
#! /bin/sh
# This file is part of flex.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# Neither the name of the University nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE.
if test ! $# = 1; then
echo 'Usage: chkskel.sh file' >&2
exit 1
fi
file=$1
lines=$(grep -c '^ "%%' "${file}")
if [ ! "${lines}" -eq 6 ]; then
echo 'ERROR: skeleton does not have the right number of %% section lines'
exit 2
fi

View File

@ -1,81 +0,0 @@
/* config_for_build - minimal config header for bootstrapping flex */
/* This file is part of flex. */
/* Redistribution and use in source and binary forms, with or without */
/* modification, are permitted provided that the following conditions */
/* are met: */
/* 1. Redistributions of source code must retain the above copyright */
/* notice, this list of conditions and the following disclaimer. */
/* 2. Redistributions in binary form must reproduce the above copyright */
/* notice, this list of conditions and the following disclaimer in the */
/* documentation and/or other materials provided with the distribution. */
/* Neither the name of the University nor the names of its contributors */
/* may be used to endorse or promote products derived from this software */
/* without specific prior written permission. */
/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
/* PURPOSE. */
/* The "config_for_build.h.in" file is intended to be processed by "configure"
* in order to produce working PACKAGE, VERSION and M4 definitions.
* Add "config_for_build.h.in" to AC_CONFIG_FILES. Do not add it to
* AC_CONFIG_HEADERS as it would break our intentional #undef's and mess up
* with the #define statements.
*/
#define PACKAGE "@PACKAGE@"
#define VERSION "@VERSION@"
#define M4 "@M4@"
#undef ENABLE_NLS
/* Flex includes <locale.h> only if NLS is enabled, but we undef it anyway. */
#undef HAVE_LOCALE_H
#undef HAVE_NETINET_IN_H
#ifdef __has_include
# if __has_include(<netinet/in.h>)
# define HAVE_NETINET_IN_H 1
# endif
#endif
#undef HAVE_REALLOCARRAY
#undef HAVE_REALLOCARR
/* Always use malloc/realloc wrappers. */
#undef malloc
#define malloc rpl_malloc
#undef realloc
#define realloc rpl_realloc
/* The Bison-generated parser in flex code controls the use of alloca() through
* its own macro (YYSTACK_USE_ALLOCA) and not defines from Autoconf.
* alloca() is not used in other parts of flex code.
*/
#undef HAVE_ALLOCA_H
#undef HAVE_ALLOCA
#undef C_ALLOCA
/* HAVE_INTTYPES_H is defined by Autoconf but not used in flex code. Flex has
* flexint.h that provides fallback definitions.
*/
/*
#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L
# undef HAVE_INTTYPES_H
#endif
*/
#undef HAVE_STDBOOL_H
#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L
# undef HAVE__BOOL
#endif
/* Standard C89 stuff which "configure" provides fallback #define's for. */
#ifndef __STDC__
# undef HAVE_LIMITS_H
# define const /* const */
# define size_t unsigned int
#endif

File diff suppressed because it is too large Load Diff

166
src/dfa.c
View File

@ -34,11 +34,10 @@
/* declare functions that have forward references */
static void dump_associated_rules(FILE *, int);
static void dump_transitions(FILE *, int[]);
static int snstods(int[], int, int[], int, int, int *);
static void sympartition(int[], int, int[], int[]);
static int symfollowset(int[], int, int, int[]);
void dump_associated_rules(FILE *, int);
void dump_transitions(FILE *, int[]);
void sympartition(int[], int, int[], int[]);
int symfollowset(int[], int, int, int[]);
/* check_for_backing_up - check a DFA state for backing up
@ -50,24 +49,24 @@ static int symfollowset(int[], int, int, int[]);
* indexed by equivalence class.
*/
static void check_for_backing_up(int ds, int state[])
void check_for_backing_up (int ds, int state[])
{
if ((reject && !dfaacc[ds].dfaacc_set) || (!reject && !dfaacc[ds].dfaacc_state)) { /* state is non-accepting */
++num_backing_up;
if (env.backing_up_report) {
fprintf (ctrl.backing_up_file,
if (backing_up_report) {
fprintf (backing_up_file,
_("State #%d is non-accepting -\n"), ds);
/* identify the state */
dump_associated_rules (ctrl.backing_up_file, ds);
dump_associated_rules (backing_up_file, ds);
/* Now identify it further using the out- and
* jam-transitions.
*/
dump_transitions (ctrl.backing_up_file, state);
dump_transitions (backing_up_file, state);
putc ('\n', ctrl.backing_up_file);
putc ('\n', backing_up_file);
}
}
}
@ -95,7 +94,7 @@ static void check_for_backing_up(int ds, int state[])
* accset[1 .. nacc] is the list of accepting numbers for the DFA state.
*/
static void check_trailing_context(int *nfa_states, int num_states, int *accset, int nacc)
void check_trailing_context (int *nfa_states, int num_states, int *accset, int nacc)
{
int i, j;
@ -133,7 +132,7 @@ static void check_trailing_context(int *nfa_states, int num_states, int *accset,
* and writes a report to the given file.
*/
static void dump_associated_rules(FILE *file, int ds)
void dump_associated_rules (FILE *file, int ds)
{
int i, j;
int num_associated_rules = 0;
@ -181,12 +180,12 @@ static void dump_associated_rules(FILE *file, int ds)
* is done to the given file.
*/
static void dump_transitions(FILE *file, int state[])
void dump_transitions (FILE *file, int state[])
{
int i, ec;
int out_char_set[CSIZE];
for (i = 0; i < ctrl.csize; ++i) {
for (i = 0; i < csize; ++i) {
ec = ABS (ecgroup[i]);
out_char_set[i] = state[ec];
}
@ -196,7 +195,7 @@ static void dump_transitions(FILE *file, int state[])
list_character_set (file, out_char_set);
/* now invert the members of the set to get the jam transitions */
for (i = 0; i < ctrl.csize; ++i)
for (i = 0; i < csize; ++i)
out_char_set[i] = !out_char_set[i];
fprintf (file, _("\n jam-transitions: EOF "));
@ -227,7 +226,7 @@ static void dump_transitions(FILE *file, int state[])
* hashval is the hash value for the dfa corresponding to the state set.
*/
static int *epsclosure(int *t, int *ns_addr, int accset[], int *nacc_addr, int *hv_addr)
int *epsclosure (int *t, int *ns_addr, int accset[], int *nacc_addr, int *hv_addr)
{
int stkpos, ns, tsp;
int numstates = *ns_addr, nacc, hashval, transsym, nfaccnum;
@ -354,8 +353,7 @@ void increase_max_dfas (void)
accsiz = reallocate_integer_array (accsiz, current_max_dfas);
dhash = reallocate_integer_array (dhash, current_max_dfas);
dss = reallocate_int_ptr_array (dss, current_max_dfas);
dfaacc = reallocate_array(dfaacc, current_max_dfas,
sizeof(union dfaacc_union));
dfaacc = reallocate_dfaacc_union (dfaacc, current_max_dfas);
if (nultrans)
nultrans =
@ -368,12 +366,9 @@ void increase_max_dfas (void)
*
* Creates the dfa corresponding to the ndfa we've constructed. The
* dfa starts out in state #1.
*
* Return the amount of space, in bytes, allocated for the next table.
* In some modes this can be zero.
*/
size_t ntod (void)
void ntod (void)
{
int *accset, ds, nacc, newds;
int sym, hashval, numstates, dsize;
@ -411,7 +406,7 @@ size_t ntod (void)
*/
todo_head = todo_next = 0;
for (i = 0; i <= ctrl.csize; ++i) {
for (i = 0; i <= csize; ++i) {
duplist[i] = NIL;
symlist[i] = false;
}
@ -419,7 +414,7 @@ size_t ntod (void)
for (i = 0; i <= num_rules; ++i)
accset[i] = NIL;
if (env.trace) {
if (trace) {
dumpnfa (scset[1]);
fputs (_("\n\nDFA Dump:\n\n"), stderr);
}
@ -457,14 +452,38 @@ size_t ntod (void)
/* Note that the test for ecgroup[0] == numecs below accomplishes
* both (1) and (2) above
*
* New way: we will only use NUL table for fulltbl, because the
* scanner will use an integer instead of YY_CHAR as noted above
*/
if (ctrl.fulltbl && ecgroup[0] == numecs && is_power_of_2(numecs))
nultrans = allocate_integer_array (current_max_dfas);
if (!fullspd && ecgroup[0] == numecs) {
/* NUL is alone in its equivalence class, which is the
* last one.
*/
int use_NUL_table = (numecs == csize);
if (ctrl.fullspd) {
if (fulltbl && !use_NUL_table) {
/* We still may want to use the table if numecs
* is a power of 2.
*/
int power_of_two;
for (power_of_two = 1; power_of_two <= csize;
power_of_two *= 2)
if (numecs == power_of_two) {
use_NUL_table = true;
break;
}
}
if (use_NUL_table)
nultrans =
allocate_integer_array (current_max_dfas);
/* From now on, nultrans != nil indicates that we're
* saving null transitions for later, separate encoding.
*/
}
if (fullspd) {
for (i = 0; i <= numecs; ++i)
state[i] = 0;
@ -472,7 +491,7 @@ size_t ntod (void)
dfaacc[0].dfaacc_state = 0;
}
else if (ctrl.fulltbl) {
else if (fulltbl) {
if (nultrans)
/* We won't be including NUL's transitions in the
* table, so build it for entries from 0 .. numecs - 1.
@ -496,21 +515,34 @@ size_t ntod (void)
yytbl_data_init (yynxt_tbl, YYTD_ID_NXT);
yynxt_tbl->td_hilen = 1;
yynxt_tbl->td_lolen = (flex_uint32_t) num_full_table_rows;
yynxt_tbl->td_lolen = num_full_table_rows;
yynxt_tbl->td_data = yynxt_data =
calloc(yynxt_tbl->td_lolen *
yynxt_tbl->td_hilen,
sizeof (flex_int32_t));
calloc(yynxt_tbl->td_lolen *
yynxt_tbl->td_hilen,
sizeof (flex_int32_t));
yynxt_curr = 0;
struct packtype_t *ptype = optimize_pack(0);
/* Note: Used when ctrl.fulltbl is on. Alternately defined elsewhere */
out_str ("m4_define([[M4_HOOK_NXT_TYPE]], [[%s]])", ptype->name);
out_dec ("m4_define([[M4_HOOK_NXT_ROWS]], [[%d]])", num_full_table_rows);
outn ("m4_define([[M4_HOOK_NXT_BODY]], [[m4_dnl");
outn ("M4_HOOK_TABLE_OPENER");
buf_prints (&yydmap_buf,
"\t{YYTD_ID_NXT, (void**)&yy_nxt, sizeof(%s)},\n",
long_align ? "flex_int32_t" : "flex_int16_t");
/* Unless -Ca, declare it "short" because it's a real
* long-shot that that won't be large enough.
*/
if (gentables)
outn ("M4_HOOK_TABLE_OPENER");
out_str_dec
("static yyconst %s yy_nxt[][%d] =\n {\n",
long_align ? "flex_int32_t" : "flex_int16_t",
num_full_table_rows);
else {
out_dec ("#undef YY_NXT_LOLEN\n#define YY_NXT_LOLEN (%d)\n", num_full_table_rows);
out_str ("static yyconst %s *yy_nxt =0;\n",
long_align ? "flex_int32_t" : "flex_int16_t");
}
if (gentables)
outn (" {");
/* Generate 0 entries for state #0. */
for (i = 0; i < num_full_table_rows; ++i) {
@ -518,10 +550,9 @@ size_t ntod (void)
yynxt_data[yynxt_curr++] = 0;
}
if (gentables) {
dataflush ();
outn ("M4_HOOK_TABLE_CONTINUE");
}
dataflush ();
if (gentables)
outn (" },\n");
}
/* Create the first states. */
@ -555,7 +586,7 @@ size_t ntod (void)
}
}
if (!ctrl.fullspd) {
if (!fullspd) {
if (!snstods (nset, 0, accset, 0, 0, &end_of_buffer_state))
flexfatal (_
("could not create unique end-of-buffer state"));
@ -578,7 +609,7 @@ size_t ntod (void)
dset = dss[ds];
dsize = dfasiz[ds];
if (env.trace)
if (trace)
fprintf (stderr, _("state # %d:\n"), ds);
sympartition (dset, dsize, symlist, duplist);
@ -615,7 +646,7 @@ size_t ntod (void)
state[sym] = newds;
if (env.trace)
if (trace)
fprintf (stderr,
"\t%d\t%d\n", sym,
newds);
@ -633,7 +664,7 @@ size_t ntod (void)
targ = state[duplist[sym]];
state[sym] = targ;
if (env.trace)
if (trace)
fprintf (stderr,
"\t%d\t%d\n", sym,
targ);
@ -665,7 +696,7 @@ size_t ntod (void)
state[NUL_ec] = 0; /* remove transition */
}
if (ctrl.fulltbl) {
if (fulltbl) {
/* Each time we hit here, it's another td_hilen, so we realloc. */
yynxt_tbl->td_hilen++;
@ -674,8 +705,10 @@ size_t ntod (void)
yynxt_tbl->td_hilen *
yynxt_tbl->td_lolen *
sizeof (flex_int32_t));
if (gentables)
outn ("M4_HOOK_TABLE_OPENER");
outn (" {");
/* Supply array's 0-element. */
if (ds == end_of_buffer_state) {
@ -698,13 +731,12 @@ size_t ntod (void)
state[i] ? state[i] : -ds;
}
if (gentables) {
dataflush ();
outn ("M4_HOOK_TABLE_CONTINUE");
}
dataflush ();
if (gentables)
outn (" },\n");
}
else if (ctrl.fullspd)
else if (fullspd)
place_state (state, ds, totaltrans);
else if (ds == end_of_buffer_state)
@ -732,9 +764,8 @@ size_t ntod (void)
}
}
if (ctrl.fulltbl) {
dataend ("M4_HOOK_TABLE_CLOSER");
outn("/* body */]])");
if (fulltbl) {
dataend ();
if (tablesext) {
yytbl_data_compress (yynxt_tbl);
if (yytbl_data_fwrite (&tableswr, yynxt_tbl) < 0)
@ -747,7 +778,7 @@ size_t ntod (void)
}
}
else if (!ctrl.fullspd) {
else if (!fullspd) {
cmptmps (); /* create compressed template entries */
/* Create tables for all the states with only one
@ -762,11 +793,8 @@ size_t ntod (void)
mkdeftbl ();
}
free(accset);
free(nset);
return (yynxt_tbl != NULL) ? (yynxt_tbl->td_hilen * sizeof(int32_t)) : 0;
}
@ -780,7 +808,7 @@ size_t ntod (void)
* On return, the dfa state number is in newds.
*/
static int snstods(int sns[], int numstates, int accset[], int nacc, int hashval, int *newds_addr)
int snstods (int sns[], int numstates, int accset[], int nacc, int hashval, int *newds_addr)
{
int didsort = 0;
int i, j;
@ -901,7 +929,7 @@ static int snstods(int sns[], int numstates, int accset[], int nacc, int hashval
* int transsym, int nset[current_max_dfa_size] );
*/
static int symfollowset(int ds[], int dsize, int transsym, int nset[])
int symfollowset (int ds[], int dsize, int transsym, int nset[])
{
int ns, tsp, sym, i, j, lenccl, ch, numstates, ccllist;
@ -978,7 +1006,7 @@ static int symfollowset(int ds[], int dsize, int transsym, int nset[])
* int symlist[numecs], int duplist[numecs] );
*/
static void sympartition(int ds[], int numstates, int symlist[], int duplist[])
void sympartition (int ds[], int numstates, int symlist[], int duplist[])
{
int tch, i, j, k, ns, dupfwd[CSIZE + 1], lenccl, cclp, ich;
@ -1000,7 +1028,7 @@ static void sympartition(int ds[], int numstates, int symlist[], int duplist[])
tch = transchar[ns];
if (tch != SYM_EPSILON) {
if (tch < -lastccl || tch >= ctrl.csize) {
if (tch < -lastccl || tch >= csize) {
flexfatal (_
("bad transition character detected in sympartition()"));
}

View File

@ -56,8 +56,7 @@ void ccl2ecl (void)
cclmec = ecgroup[ich];
if (cclmec > 0) {
/* Note: range 1..256 is mapped to 1..255,0 */
ccltbl[cclp + newlen] = (unsigned char) cclmec;
ccltbl[cclp + newlen] = cclmec;
++newlen;
}
}

View File

@ -47,9 +47,10 @@ struct filter *filter_create_ext (struct filter *chain, const char *cmd,
va_list ap;
/* allocate and initialize new filter */
f = calloc(sizeof(struct filter), 1);
f = malloc(sizeof(struct filter));
if (!f)
flexerror(_("calloc failed (f) in filter_create_ext"));
flexerror(_("malloc failed (f) in filter_create_ext"));
memset (f, 0, sizeof (*f));
f->filter_func = NULL;
f->extra = NULL;
f->next = NULL;
@ -99,9 +100,10 @@ struct filter *filter_create_int (struct filter *chain,
struct filter *f;
/* allocate and initialize new filter */
f = calloc(sizeof(struct filter), 1);
f = malloc(sizeof(struct filter));
if (!f)
flexerror(_("calloc failed in filter_create_int"));
flexerror(_("malloc failed in filter_create_int"));
memset (f, 0, sizeof (*f));
f->next = NULL;
f->argc = 0;
f->argv = NULL;
@ -160,13 +162,13 @@ bool filter_apply_chain (struct filter * chain)
* to sync the stream. This is a Hail Mary situation. It seems to work.
*/
close (pipes[1]);
clearerr(stdin);
clearerr(stdin);
if (dup2 (pipes[0], fileno (stdin)) == -1)
flexfatal (_("dup2(pipes[0],0)"));
close (pipes[0]);
fseek (stdin, 0, SEEK_CUR);
ungetc(' ', stdin); /* still an evil hack, but one that works better */
(void)fgetc(stdin); /* on NetBSD than the fseek attempt does */
fseek (stdin, 0, SEEK_CUR);
ungetc(' ', stdin); /* still an evil hack, but one that works better */
(void)fgetc(stdin); /* on NetBSD than the fseek attempt does */
/* run as a filter, either internally or by exec */
if (chain->filter_func) {
@ -174,16 +176,16 @@ bool filter_apply_chain (struct filter * chain)
if ((r = chain->filter_func (chain)) == -1)
flexfatal (_("filter_func failed"));
FLEX_EXIT (0);
exit (0);
}
else {
execvp (chain->argv[0],
(char **const) (chain->argv));
lerr_fatal ( _("exec of %s failed"),
chain->argv[0]);
lerr_fatal ( _("exec of %s failed"),
chain->argv[0]);
}
FLEX_EXIT (1);
exit (1);
}
/* Parent */
@ -191,7 +193,7 @@ bool filter_apply_chain (struct filter * chain)
if (dup2 (pipes[1], fileno (stdout)) == -1)
flexfatal (_("dup2(pipes[1],1)"));
close (pipes[1]);
fseek (stdout, 0, SEEK_CUR);
fseek (stdout, 0, SEEK_CUR);
return true;
}
@ -228,7 +230,8 @@ int filter_tee_header (struct filter *chain)
* header file at the same time.
*/
char buf[512];
const int readsz = 512;
char *buf;
int to_cfd = -1;
FILE *to_c = NULL, *to_h = NULL;
bool write_header;
@ -256,26 +259,34 @@ int filter_tee_header (struct filter *chain)
*/
if (write_header) {
fputs (check_4_gnu_m4, to_h);
fputs (check_4_gnu_m4, to_h);
fputs ("m4_changecom`'m4_dnl\n", to_h);
fputs ("m4_changequote`'m4_dnl\n", to_h);
fputs ("m4_changequote([[,]])[[]]m4_dnl\n", to_h);
fputs ("m4_define([[M4_YY_NOOP]])[[]]m4_dnl\n", to_h);
fputs ("m4_define([[M4_YY_IN_HEADER]],[[]])m4_dnl\n", to_h);
fputs ("m4_changequote([[,]])[[]]m4_dnl\n", to_h);
fputs ("m4_define([[M4_YY_NOOP]])[[]]m4_dnl\n", to_h);
fputs ("m4_define( [[M4_YY_IN_HEADER]],[[]])m4_dnl\n",
to_h);
fprintf (to_h, "#ifndef %sHEADER_H\n", prefix);
fprintf (to_h, "#define %sHEADER_H 1\n", prefix);
fprintf (to_h, "#define %sIN_HEADER 1\n\n", prefix);
fprintf (to_h,
"m4_define( [[M4_YY_OUTFILE_NAME]],[[%s]])m4_dnl\n",
env.headerfilename != NULL ? env.headerfilename : "<stdout>");
headerfilename ? headerfilename : "<stdout>");
}
fputs (check_4_gnu_m4, to_c);
fputs (check_4_gnu_m4, to_c);
fputs ("m4_changecom`'m4_dnl\n", to_c);
fputs ("m4_changequote`'m4_dnl\n", to_c);
fputs ("m4_changequote([[,]])[[]]m4_dnl\n", to_c);
fputs ("m4_define([[M4_YY_NOOP]])[[]]m4_dnl\n", to_c);
fprintf (to_c, "m4_define( [[M4_YY_OUTFILE_NAME]],[[%s]])m4_dnl\n",
env.outfilename != NULL ? env.outfilename : "<stdout>");
outfilename ? outfilename : "<stdout>");
while (fgets (buf, sizeof buf, stdin)) {
buf = malloc((size_t) readsz);
if (!buf)
flexerror(_("malloc failed in filter_tee_header"));
while (fgets (buf, readsz, stdin)) {
fputs (buf, to_c);
if (write_header)
fputs (buf, to_h);
@ -285,8 +296,12 @@ int filter_tee_header (struct filter *chain)
fprintf (to_h, "\n");
/* write a fake line number. It will get fixed by the linedir filter. */
if (ctrl.gen_line_dirs)
line_directive_out (to_h, NULL, 4000);
fprintf (to_h, "#line 4000 \"M4_YY_OUTFILE_NAME\"\n");
fprintf (to_h, "#undef %sIN_HEADER\n", prefix);
fprintf (to_h, "#endif /* %sHEADER_H */\n", prefix);
fputs ("m4_undefine( [[M4_YY_IN_HEADER]])m4_dnl\n", to_h);
fflush (to_h);
if (ferror (to_h))
lerr (_("error writing output file %s"),
@ -300,25 +315,18 @@ int filter_tee_header (struct filter *chain)
fflush (to_c);
if (ferror (to_c))
lerr (_("error writing output file %s"),
env.outfilename != NULL ? env.outfilename : "<stdout>");
outfilename ? outfilename : "<stdout>");
else if (fclose (to_c))
lerr (_("error closing output file %s"),
env.outfilename != NULL ? env.outfilename : "<stdout>");
outfilename ? outfilename : "<stdout>");
while (wait (0) > 0) ;
FLEX_EXIT (0);
exit (0);
return 0;
}
static bool is_blank_line (const char *str)
{
while (isspace(*str))
str++;
return (*str == '\0');
}
/** Adjust the line numbers in the #line directives of the generated scanner.
* After the m4 expansion, the line numbers are incorrect since the m4 macros
* can add or remove lines. This only adjusts line numbers for generated code,
@ -327,9 +335,8 @@ static bool is_blank_line (const char *str)
*/
int filter_fix_linedirs (struct filter *chain)
{
char buf[4096];
const char *cp;
const size_t readsz = sizeof buf;
char *buf;
const size_t readsz = 512;
int lineno = 1;
bool in_gen = true; /* in generated code */
bool last_was_blank = false;
@ -337,16 +344,17 @@ int filter_fix_linedirs (struct filter *chain)
if (!chain)
return 0;
buf = malloc(readsz);
if (!buf)
flexerror(_("malloc failed in filter_fix_linedirs"));
while (fgets (buf, (int) readsz, stdin)) {
regmatch_t m[10];
/* Check for directive. Note wired-in assumption:
* field reference 1 is line number, 2 is filename.
*/
if (ctrl.traceline_re != NULL &&
ctrl.traceline_template != NULL &&
regexec (&regex_linedir, buf, 3, m, 0) == 0) {
/* Check for #line directive. */
if (buf[0] == '#'
&& regexec (&regex_linedir, buf, 3, m, 0) == 0) {
char *fname;
@ -354,10 +362,10 @@ int filter_fix_linedirs (struct filter *chain)
fname = regmatch_dup (&m[2], buf);
if (strcmp (fname,
env.outfilename != NULL ? env.outfilename : "<stdout>")
outfilename ? outfilename : "<stdout>")
== 0
|| strcmp (fname,
env.headerfilename != NULL ? env.headerfilename : "<stdout>")
headerfilename ? headerfilename : "<stdout>")
== 0) {
char *s1, *s2;
@ -381,9 +389,8 @@ int filter_fix_linedirs (struct filter *chain)
/* Adjust the line directives. */
in_gen = true;
snprintf (buf, readsz, ctrl.traceline_template,
snprintf (buf, readsz, "#line %d \"%s\"\n",
lineno + 1, filename);
strncat(buf, "\n", sizeof(buf)-1);
}
else {
/* it's a #line directive for code we didn't write */
@ -395,7 +402,9 @@ int filter_fix_linedirs (struct filter *chain)
}
/* squeeze blank lines from generated code */
else if (in_gen && is_blank_line(buf)) {
else if (in_gen
&& regexec (&regex_blank_line, buf, 0, NULL,
0) == 0) {
if (last_was_blank)
continue;
else
@ -413,11 +422,11 @@ int filter_fix_linedirs (struct filter *chain)
fflush (stdout);
if (ferror (stdout))
lerr (_("error writing output file %s"),
env.outfilename != NULL ? env.outfilename : "<stdout>");
outfilename ? outfilename : "<stdout>");
else if (fclose (stdout))
lerr (_("error closing output file %s"),
env.outfilename != NULL ? env.outfilename : "<stdout>");
outfilename ? outfilename : "<stdout>");
return 0;
}

3537
src/flex.skl Normal file

File diff suppressed because it is too large Load Diff

View File

@ -35,12 +35,8 @@
#ifndef FLEXDEF_H
#define FLEXDEF_H 1
#ifndef USE_CONFIG_FOR_BUILD
# ifdef HAVE_CONFIG_H
#ifdef HAVE_CONFIG_H
#include <config.h>
# endif
#else
#include <config_for_build.h>
#endif
#include <stdio.h>
@ -48,6 +44,7 @@
#include <stdarg.h>
#include <setjmp.h>
#include <ctype.h>
#include <libgen.h> /* for XPG version of basename(3) */
#include <string.h>
#include <math.h>
@ -60,39 +57,27 @@
#ifdef HAVE_LIMITS_H
#include <limits.h>
#endif
/* Required: dup() and dup2() in <unistd.h> */
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_SYS_PARAMS_H
#include <sys/params.h>
#endif
/* Required: wait() in <sys/wait.h> */
#include <sys/wait.h>
#ifdef HAVE_STDBOOL_H
#include <stdbool.h>
#elif !defined(__cplusplus) && (!defined(__STDC_VERSION__) || \
__STDC_VERSION__ < 202311L)
# ifdef HAVE__BOOL
# define bool _Bool
# else
# define bool int
# endif
# define false 0
# define true 1
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
#include <stdarg.h>
/* Required: regcomp(), regexec() and regerror() in <regex.h> */
#include <sys/wait.h>
#include <stdbool.h>
#ifdef HAVE_REGEX_H
#include <regex.h>
/* Required: strcasecmp() in <strings.h> */
#include <strings.h>
#endif
#include "flexint.h"
/* We use gettext. So, when we write strings which should be translated, we
* mark them with _()
*/
#if defined(ENABLE_NLS) && ENABLE_NLS
/* We use gettext. So, when we write strings which should be translated, we mark them with _() */
#ifdef ENABLE_NLS
#ifdef HAVE_LOCALE_H
#include <locale.h>
#endif /* HAVE_LOCALE_H */
@ -123,8 +108,8 @@
#define ABS(x) ((x) < 0 ? -(x) : (x))
#endif
/* Whether an integer is a power of two */
#define is_power_of_2(n) ((n) > 0 && ((n) & ((n) - 1)) == 0)
#define unspecified -1
/* Special chk[] values marking the slots taking by end-of-buffer and action
* numbers.
@ -309,140 +294,51 @@
*/
#define BAD_SUBSCRIPT -32767
typedef enum trit_t {
trit_unspecified = -1,
trit_false = 0,
trit_true = 1,
} trit;
/* Control variables. These are in a struct to avoid having to replicate definitions
* twice for each option, instead a single struct can be declared and externed.
* If it's in this structure, it has a corresponding m4 symbol.
/* Absolute value of largest number that can be stored in a short, with a
* bit of slop thrown in for general paranoia.
*/
struct ctrl_bundle_t {
bool always_interactive;// always use character-by-character input
FILE *backing_up_file; // file to summarize backing-up states to
bool bison_bridge_lval; // (--bison-bridge), bison pure calling convention.
bool bison_bridge_lloc; // (--bison-locations), bison yylloc.
size_t bufsize; // input buffer size
bool C_plus_plus; // (-+ flag) generate a C++ scanner class
int csize; // size of character set for the scanner
// 128 for 7-bit chars and 256 for 8-bit
bool ddebug; // (-d) make a "debug" scanner
trit do_main; // generate main part to make lexer standalone.
bool do_stdinit; // whether to initialize yyin/yyout to stdin/stdout
bool do_yylineno; // if true, generate code to maintain yylineno
bool do_yywrap; // do yywrap() processing on EOF.
// If false, EOF treated as "no more files"
bool fullspd; // (-F flag) use Jacobson method of table representation
bool fulltbl; // (-Cf flag) don't compress the DFA state table
bool gen_line_dirs; // (no -L flag) generate #line directives
trit interactive; // (-I) generate an interactive scanner
bool never_interactive; // always use buffered input, don't check for tty.
bool lex_compat; // (-l), maximize compatibility with AT&T lex
bool long_align; // (-Ca flag), favor long-word alignment for speed
bool no_yyinput; // suppress use of yyinput()
bool no_unistd; // suppress inclusion of unistd.h
bool posix_compat; // (-X) maximize compatibility with POSIX lex
char *prefix; // prefix for externally visible names, default "yy"
trit reject_really_used;// Force generation of support code for reject operation
bool reentrant; // if true (-R), generate a reentrant C scanner
bool rewrite; // Appl;y magic rewre rles to special fumctions
bool stack_used; // Enable use of start-condition stacks
bool no_section3_escape;// True if the undocumented option --unsafe-no-m4-sect3-escape was passed
bool spprdflt; // (-s) suppress the default rule
bool useecs; // (-Ce flag) use equivalence classes
bool usemecs; // (-Cm flag), use meta-equivalence classes
bool use_read; // (-f, -F, or -Cr) use read() for scanner input
// otherwise, use fread().
char *yyclass; // yyFlexLexer subclass to use for YY_DECL
char *yydecl; // user-specified prototype for yylex.
int yylmax; // Maximum buffer length if %array
trit yymore_really_used;// Force geberation of support code for yymore
bool yytext_is_array; // if true (i.e., %array directive), then declare
// yytext as array instead of a character pointer.
// Nice and inefficient.
bool noyyread; // User supplied a yyread function, don't generate default
char *userinit; // Code fragment to be inserted before scanning
char *preaction; // Code fragment to be inserted before each action
char *postaction; // Code fragment to be inserted after each action
char *emit; // Specify target language to emit.
char *yyterminate; // Set a non-default termination hook.
bool no_yypanic; // if true, no not generate default yypanic function
// flags corresponding to the huge mass of --no-yy options
bool no_yy_push_state;
bool no_yy_pop_state;
bool no_yy_top_state;
bool no_yyunput;
bool no_yy_scan_buffer;
bool no_yy_scan_bytes;
bool no_yy_scan_string;
bool no_yyget_extra;
bool no_yyset_extra;
bool no_yyget_leng;
bool no_yyget_text;
bool no_yyget_lineno;
bool no_yyset_lineno;
bool no_yyget_column;
bool no_yyset_column;
bool no_yyget_in;
bool no_yyset_in;
bool no_yyget_out;
bool no_yyset_out;
bool no_yyget_lval;
bool no_yyset_lval;
bool no_yyget_lloc;
bool no_yyset_lloc;
bool no_flex_alloc;
bool no_flex_realloc;
bool no_flex_free;
bool no_get_debug;
bool no_set_debug;
// Properties read from the skeleton
const char *backend_name; // What the back end tells you its name is
const char *traceline_re; // Regular expression for recognizing tracelines */
const char *traceline_template; // templare for emitting trace lines */
bool have_state_entry_format; // Do we know how to make a state entry address?
};
#define MAX_SHORT 32700
/* Environment variables. These control the lexer operation, but do
* not have corresponding m4 symbols and do not affect the behavior of
* the generated parser.
*/
struct env_bundle_t {
bool backing_up_report; // (-b flag), generate "lex.backup" file
// listing backing-up states
bool did_outfilename; // whether outfilename was explicitly set
char *headerfilename; // name of the .h file to generate
bool nowarn; // (-w) do not generate warnings
int performance_hint; // if > 0 (i.e., -p flag), generate a report
// relating to scanner performance;
// if > 1 (-p -p), report
// on minor performance problems, too.
char *outfilename; // output file name
bool printstats; // (-v) dump statistics
char *skelname; // name of skeleton for code generation
FILE *skelfile; // the skeleton file'd descriptor
bool trace; // (-T) env.trace processing
bool trace_hex; // use hex in trace/debug outputs not octal
bool use_stdout; // the -t flag
};
/* Name and byte-width information on a type for code-generation purposes. */
struct packtype_t {
char *name;
size_t width;
};
extern struct ctrl_bundle_t ctrl;
extern struct env_bundle_t env;
/* Declarations for global variables. */
/* Variables for flags:
* printstats - if true (-v), dump statistics
* syntaxerror - true if a syntax error has been found
* eofseen - true if we've seen an eof in the input file
* ddebug - if true (-d), make a "debug" scanner
* trace - if true (-T), trace processing
* nowarn - if true (-w), do not generate warnings
* spprdflt - if true (-s), suppress the default rule
* interactive - if true (-I), generate an interactive scanner
* lex_compat - if true (-l), maximize compatibility with AT&T lex
* posix_compat - if true (-X), maximize compatibility with POSIX lex
* do_yylineno - if true, generate code to maintain yylineno
* useecs - if true (-Ce flag), use equivalence classes
* fulltbl - if true (-Cf flag), don't compress the DFA state table
* usemecs - if true (-Cm flag), use meta-equivalence classes
* fullspd - if true (-F flag), use Jacobson method of table representation
* gen_line_dirs - if true (i.e., no -L flag), generate #line directives
* performance_report - if > 0 (i.e., -p flag), generate a report relating
* to scanner performance; if > 1 (-p -p), report on minor performance
* problems, too
* backing_up_report - if true (i.e., -b flag), generate "lex.backup" file
* listing backing-up states
* C_plus_plus - if true (i.e., -+ flag), generate a C++ scanner class;
* otherwise, a standard C scanner
* reentrant - if true (-R), generate a reentrant C scanner.
* bison_bridge_lval - if true (--bison-bridge), bison pure calling convention.
* bison_bridge_lloc - if true (--bison-locations), bison yylloc.
* long_align - if true (-Ca flag), favor long-word alignment.
* use_read - if true (-f, -F, or -Cr) then use read() for scanner input;
* otherwise, use fread().
* yytext_is_array - if true (i.e., %array directive), then declare
* yytext as a array instead of a character pointer. Nice and inefficient.
* do_yywrap - do yywrap() processing on EOF. If false, EOF treated as
* "no more files".
* csize - size of character set for the scanner we're generating;
* 128 for 7-bit chars and 256 for 8-bit
* yymore_used - if true, yymore() is used in input rules
* reject - if true, generate back-up tables for REJECT macro
* real_reject - if true, scanner really uses REJECT (as opposed to just
@ -453,20 +349,41 @@ extern struct env_bundle_t env;
* yymore_really_used - whether to treat yymore() as really used, regardless
* of what we think based on references to it in the user's actions.
* reject_really_used - same for REJECT
*/
* trace_hex - use hexadecimal numbers in trace/debug outputs instead of octals
*/
extern bool syntaxerror, eofseen;
extern int printstats, syntaxerror, eofseen, ddebug, trace, nowarn,
spprdflt;
extern int interactive, lex_compat, posix_compat, do_yylineno;
extern int useecs, fulltbl, usemecs, fullspd;
extern int gen_line_dirs, performance_report, backing_up_report;
extern int reentrant, bison_bridge_lval, bison_bridge_lloc;
extern bool ansi_func_defs, ansi_func_protos;
extern int C_plus_plus, long_align, use_read, yytext_is_array, do_yywrap;
extern int csize;
extern int yymore_used, reject, real_reject, continued_action, in_rule;
extern int yymore_really_used, reject_really_used;
extern int trace_hex;
/* Variables used in the flex input routines:
* datapos - characters on current output line
* dataline - number of contiguous lines of data in current data
* statement. Used to generate readable -f output
* linenum - current input line number
* skelfile - the skeleton file
* skel - compiled-in skeleton array
* skel_ind - index into "skel" array, if skelfile is nil
* yyin - input file
* backing_up_file - file to summarize backing-up states to
* infilename - name of input file
* outfilename - name of output file
* headerfilename - name of the .h file to generate
* did_outfilename - whether outfilename was explicitly set
* prefix - the prefix used for externally visible names ("yy" by default)
* yyclass - yyFlexLexer subclass to use for YY_DECL
* do_stdinit - whether to initialize yyin/yyout to stdin/stdout
* use_stdout - the -t flag
* input_files - array holding names of input files
* num_input_files - size of input_files array
* program_name - name with which program was invoked
@ -479,13 +396,16 @@ extern int yymore_used, reject, real_reject, continued_action, in_rule;
* action_offset - index where the non-prolog starts in action_array
* action_index - index where the next action should go, with respect
* to "action_array"
* always_interactive - if true, generate an interactive scanner
*/
extern int datapos, dataline, linenum;
extern FILE *skelfile, *backing_up_file;
extern const char *skel[];
extern int skel_ind;
extern char *infilename;
extern char *extra_type;
extern char *infilename, *outfilename, *headerfilename;
extern int did_outfilename;
extern char *prefix, *yyclass, *extra_type;
extern int do_stdinit, use_stdout;
extern char **input_files;
extern int num_input_files;
extern char *program_name;
@ -538,20 +458,15 @@ extern int onenext[ONE_STACK_SIZE], onedef[ONE_STACK_SIZE], onesp;
* rule_has_nl - true if rule could possibly match a newline
* ccl_has_nl - true if current ccl could match a newline
* nlch - default eol char
* footprint - total size of tables, in bytes.
*/
extern int maximum_mns, current_mns, current_max_rules;
extern int num_rules, num_eof_rules, default_rule, lastnfa;
extern int *firstst, *lastst, *finalst, *transchar, *trans1, *trans2;
extern int *accptnum, *assoc_rule, *state_type;
extern int *rule_type, *rule_linenum;
/* rule_useful[], rule_has_nl[] and ccl_has_nl[] are boolean arrays,
* but allocated as char arrays for size. */
extern char *rule_useful, *rule_has_nl, *ccl_has_nl;
extern int *rule_type, *rule_linenum, *rule_useful;
extern bool *rule_has_nl, *ccl_has_nl;
extern int nlch;
extern size_t footprint;
/* Different types of states; values are useful as masks, as well, for
* routines like check_trailing_context().
@ -570,7 +485,7 @@ extern int current_state_type;
/* True if the input rules include a rule with both variable-length head
* and trailing context, false otherwise.
*/
extern bool variable_trailing_context_rules;
extern int variable_trailing_context_rules;
/* Variables for protos:
@ -624,12 +539,9 @@ extern int tecfwd[CSIZE + 1], tecbck[CSIZE + 1];
* scname - start condition name
*/
extern int lastsc, *scset, *scbol;
/* scxclu[] and sceof[] are boolean arrays, but allocated as char
* arrays for size. */
extern char *scxclu, *sceof;
extern int lastsc, *scset, *scbol, *scxclu, *sceof;
extern int current_max_scs;
extern const char **scname;
extern char **scname;
/* Variables for dfa machine data:
@ -694,7 +606,6 @@ extern unsigned char *ccltbl;
/* Variables for miscellaneous information:
* nmstr - last NAME scanned by the scanner
* nmval - last numeric scanned by the scanner
* sectnum - section number currently being parsed
* nummt - number of empty nxt/chk table entries
* hshcol - number of hash collisions detected by snstods
@ -714,10 +625,14 @@ extern unsigned char *ccltbl;
*/
extern char nmstr[MAXLINE];
extern int sectnum, nummt, hshcol, dfaeql, numeps, eps2, num_reallocs, nmval;
extern int sectnum, nummt, hshcol, dfaeql, numeps, eps2, num_reallocs;
extern int tmpuses, totnst, peakpairs, numuniq, numdup, hshsave;
extern int num_backing_up, bol_needed;
#ifndef HAVE_REALLOCARRAY
void *reallocarray(void *, size_t, size_t);
#endif
void *allocate_array(int, size_t);
void *reallocate_array(void *, int, size_t);
@ -727,18 +642,30 @@ void *reallocate_array(void *, int, size_t);
#define reallocate_integer_array(array,size) \
reallocate_array((void *) array, size, sizeof(int))
#define allocate_bool_array(size) \
allocate_array(size, sizeof(bool))
#define reallocate_bool_array(array,size) \
reallocate_array((void *) array, size, sizeof(bool))
#define allocate_int_ptr_array(size) \
allocate_array(size, sizeof(int *))
#define allocate_char_ptr_array(size) \
allocate_array(size, sizeof(char *))
#define allocate_dfaacc_union(size) \
allocate_array(size, sizeof(union dfaacc_union))
#define reallocate_int_ptr_array(array,size) \
reallocate_array((void *) array, size, sizeof(int *))
#define reallocate_char_ptr_array(array,size) \
reallocate_array((void *) array, size, sizeof(char *))
#define reallocate_dfaacc_union(array, size) \
reallocate_array((void *) array, size, sizeof(union dfaacc_union))
#define allocate_character_array(size) \
allocate_array( size, sizeof(char))
@ -769,10 +696,22 @@ extern void list_character_set(FILE *, int[]);
/* from file dfa.c */
/* Check a DFA state for backing up. */
extern void check_for_backing_up(int, int[]);
/* Check to see if NFA state set constitutes "dangerous" trailing context. */
extern void check_trailing_context(int *, int, int *, int);
/* Construct the epsilon closure of a set of ndfa states. */
extern int *epsclosure(int *, int *, int[], int *, int *);
/* Increase the maximum number of dfas. */
extern void increase_max_dfas(void);
extern size_t ntod(void); /* convert a ndfa to a dfa */
extern void ntod(void); /* convert a ndfa to a dfa */
/* Converts a set of ndfa states into a dfa state. */
extern int snstods(int[], int, int[], int, int, int *);
/* from file ecs.c */
@ -792,20 +731,48 @@ extern void mkechar(int, int[], int[]);
/* from file gen.c */
/* Set a conditional amd make it visible in generated code */
extern void visible_define (const char *);
extern void do_indent(void); /* indent to the current level */
/* And again, with an explicit value part. */
extern void visible_define_str (const char *, const char *);
/* Generate the code to keep backing-up information. */
extern void gen_backing_up(void);
/* This time the value part is an int */
extern void visible_define_int (const char *, const int);
/* Generate the code to perform the backing up. */
extern void gen_bu_action(void);
/* generate transition tables */
extern void make_tables(void);
/* Generate full speed compressed transition table. */
extern void genctbl(void);
/* Generate the code to find the action number. */
extern void gen_find_action(void);
extern void genftbl(void); /* generate full transition table */
/* Generate the code to find the next compressed-table state. */
extern void gen_next_compressed_state(char *);
/* Generate the code to find the next match. */
extern void gen_next_match(void);
/* Generate the code to find the next state. */
extern void gen_next_state(int);
/* Generate the code to make a NUL transition. */
extern void gen_NUL_trans(void);
/* Generate the code to find the start state. */
extern void gen_start_state(void);
/* Generate data statements for the transition tables. */
extern void gentabs(void);
/* Write out a formatted string at the current indentation level. */
extern void indent_put2s(const char *, const char *);
/* Write out a string + newline at the current indentation level. */
extern void indent_puts(const char *);
extern void make_tables(void); /* generate transition tables */
/* Select a type for optimal packing */
struct packtype_t *optimize_pack(size_t);
/* from file main.c */
@ -816,6 +783,9 @@ extern void usage(void);
/* from file misc.c */
/* Add a #define to the action file. */
extern void action_define(const char *defname, int value);
/* Add the given text to the stored actions. */
extern void add_action(const char *new_text);
@ -841,7 +811,7 @@ extern char *xstrdup(const char *);
extern int cclcmp(const void *, const void *);
/* Finish up a block of data declarations. */
extern void dataend(const char *);
extern void dataend(void);
/* Flush generated data statements. */
extern void dataflush(void);
@ -853,7 +823,7 @@ extern void flexerror(const char *);
extern void flexfatal(const char *);
/* Report a fatal error with a pinpoint, and terminate */
#ifdef HAVE_DECL___FUNC__
#if HAVE_DECL___FUNC__
#define flex_die(msg) \
do{ \
fprintf (stderr,\
@ -873,6 +843,9 @@ extern void flexfatal(const char *);
}while(0)
#endif /* ! HAVE_DECL___func__ */
/* Convert a hexadecimal digit string to an integer value. */
extern int htoi(unsigned char[]);
/* Report an error message formatted */
extern void lerr(const char *, ...)
#if defined(__GNUC__) && __GNUC__ >= 3
@ -888,7 +861,7 @@ extern void lerr_fatal(const char *, ...)
;
/* Spit out a "#line" statement. */
extern void line_directive_out(FILE *, char *, int);
extern void line_directive_out(FILE *, int);
/* Mark the current position in the action array as the end of the section 1
* user defs.
@ -898,7 +871,7 @@ extern void mark_defs1(void);
/* Mark the current position in the action array as the end of the prolog. */
extern void mark_prolog(void);
/* Generate a data statement for a two-dimensional array. */
/* Generate a data statment for a two-dimensional array. */
extern void mk2data(int);
extern void mkdata(int); /* generate a data statement */
@ -909,12 +882,16 @@ extern int myctoi(const char *);
/* Return character corresponding to escape sequence. */
extern unsigned char myesc(unsigned char[]);
/* Convert an octal digit string to an integer value. */
extern int otoi(unsigned char[]);
/* Output a (possibly-formatted) string to the generated scanner. */
extern void out(const char *);
extern void out_dec(const char *, int);
extern void out_dec2(const char *, int, int);
extern void out_hex(const char *, unsigned int);
extern void out_str(const char *, const char *);
extern void out_str3(const char *, const char *, const char *, const char *);
extern void out_str_dec(const char *, const char *, int);
extern void outc(int);
extern void outn(const char *);
@ -925,6 +902,9 @@ extern void out_m4_define(const char* def, const char* val);
*/
extern char *readable_form(int);
/* Write out one section of the skeleton file. */
extern void skelout(void);
/* Output a yy_trans_info structure. */
extern void transition_struct_out(int, int);
@ -944,7 +924,7 @@ extern int copysingl(int, int);
extern void dumpnfa(int);
/* Finish up the processing for a rule. */
extern void finish_rule(int, bool, int, int, int);
extern void finish_rule(int, int, int, int, int);
/* Connect two machines together. */
extern int link_machines(int, int);
@ -995,12 +975,9 @@ extern void line_pinpoint(const char *, int);
extern void format_synerr(const char *, const char *);
extern void synerr(const char *); /* report a syntax error */
extern void format_warn(const char *, const char *);
extern void lwarn(const char *); /* report a warning */
extern void warn(const char *); /* report a warning */
extern void yyerror(const char *); /* report a parse error */
extern int yyparse(void); /* the YACC parser */
/* Ship a comment to the generated output */
extern void comment(const char *);
/* from file scan.l */
@ -1010,22 +987,6 @@ extern int flexscan(void);
/* Open the given file (if NULL, stdin) for scanning. */
extern void set_input_file(char *);
/* from file skeletons.c */
/* return the correct file suffix for the selected back end */
const char *suffix (void);
/* Mine a text-valued property out of the skeleton file */
extern const char *skel_property(const char *);
/* Is the default back end selected?*/
extern bool is_default_backend(void);
/* Select a backend by name */
extern void backend_by_name(const char *);
/* Write out one section of the skeleton file. */
extern void skelout(bool);
/* from file sym.c */
@ -1040,13 +1001,11 @@ extern char *ndlookup(const char *); /* lookup a name definition */
/* Increase maximum number of SC's. */
extern void scextend(void);
extern void scinstal(const char *, bool); /* make a start condition */
extern void scinstal(const char *, int); /* make a start condition */
/* Lookup the number associated with a start condition. */
extern int sclookup(const char *);
/* Supply context argument for a function if required */
extern void context_call(char *);
/* from file tblcmp.c */
@ -1090,15 +1049,24 @@ struct Buf {
extern void buf_init(struct Buf * buf, size_t elem_size);
extern void buf_destroy(struct Buf * buf);
extern struct Buf *buf_append(struct Buf * buf, const void *ptr, int n_elem);
extern struct Buf *buf_concat(struct Buf* dest, const struct Buf* src);
extern struct Buf *buf_strappend(struct Buf *, const char *str);
extern struct Buf *buf_strnappend(struct Buf *, const char *str, int nchars);
extern struct Buf *buf_strdefine(struct Buf * buf, const char *str, const char *def);
extern struct Buf *buf_prints(struct Buf *buf, const char *fmt, const char* s);
extern struct Buf *buf_m4_define(struct Buf *buf, const char* def, const char* val);
extern struct Buf *buf_m4_undefine(struct Buf *buf, const char* def);
extern struct Buf *buf_print_strings(struct Buf * buf, FILE* out);
extern struct Buf *buf_linedir(struct Buf *buf, const char* filename, int lineno);
extern struct Buf userdef_buf; /* a string buffer for #define's generated by user-options on cmd line. */
extern struct Buf defs_buf; /* a char* buffer to save #define'd some symbols generated by flex. */
extern struct Buf yydmap_buf; /* a string buffer to hold yydmap elements */
extern struct Buf m4defs_buf; /* Holds m4 definitions. */
extern struct Buf top_buf; /* contains %top code. String buffer. */
/* For blocking out code from the header file. */
#define OUT_BEGIN_CODE() outn("m4_ifdef( [[M4_YY_IN_HEADER]],,[[m4_dnl")
#define OUT_BEGIN_CODE() outn("m4_ifdef( [[M4_YY_IN_HEADER]],,[[")
#define OUT_END_CODE() outn("]])")
/* For setjmp/longjmp (instead of calling exit(2)). Linkage in main.c */
@ -1165,8 +1133,8 @@ extern int filter_fix_linedirs(struct filter *chain);
* From "regex.c"
*/
extern regex_t regex_linedir;
bool flex_init_regex(const char *);
extern regex_t regex_linedir, regex_blank_line;
bool flex_init_regex(void);
void flex_regcomp(regex_t *preg, const char *regex, int cflags);
char *regmatch_dup (regmatch_t * m, const char *src);
char *regmatch_cpy (regmatch_t * m, char *dest, const char *src);

View File

@ -3,17 +3,31 @@
#ifndef FLEXINT_H
#define FLEXINT_H
/* C++ systems might need __STDC_LIMIT_MACROS defined before including
* <stdint.h>, if you want the limit (max/min) macros for int types.
/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
* if you want the limit (max/min) macros for int types.
*/
#ifndef __STDC_LIMIT_MACROS
#define __STDC_LIMIT_MACROS 1
#endif
/* "flexint_shared.h" will be included also in skeleton. It will include
* <inttypes.h> (if available) and define flex's integral types.
*/
#include "flexint_shared.h"
#include <inttypes.h>
typedef int8_t flex_int8_t;
typedef uint8_t flex_uint8_t;
typedef int16_t flex_int16_t;
typedef uint16_t flex_uint16_t;
typedef int32_t flex_int32_t;
typedef uint32_t flex_uint32_t;
#else
typedef signed char flex_int8_t;
typedef short int flex_int16_t;
typedef int flex_int32_t;
typedef unsigned char flex_uint8_t;
typedef unsigned short int flex_uint16_t;
typedef unsigned int flex_uint32_t;
/* Limits of integral types. */
#ifndef INT8_MIN
@ -44,11 +58,6 @@
#define UINT32_MAX (4294967295U)
#endif
#ifndef INT_MAX
#define INT_MAX ((int)(~0U)>>1)
#endif
#ifndef SIZE_MAX
#define SIZE_MAX (~(size_t)0)
#endif
#endif /* ! C99 */
#endif /* ! FLEXINT_H */

View File

@ -1,59 +0,0 @@
/* flex integer type definitions */
#ifndef YYFLEX_INTTYPES_DEFINED
#define YYFLEX_INTTYPES_DEFINED
/* Prefer C99 integer types if available. */
# if defined(__cplusplus) && __cplusplus >= 201103L
#include <cstdint>
# define YYFLEX_USE_STDINT
# endif
# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
/* Include <inttypes.h> and not <stdint.h> because Solaris 2.6 has the former
* and not the latter.
*/
#include <inttypes.h>
# define YYFLEX_USE_STDINT
# else
# if defined(_MSC_VER) && _MSC_VER >= 1600
/* Visual C++ 2010 does not define __STDC_VERSION__ and has <stdint.h> but not
* <inttypes.h>.
*/
#include <stdint.h>
# define YYFLEX_USE_STDINT
# endif
# endif
# ifdef YYFLEX_USE_STDINT
typedef int8_t flex_int8_t;
typedef uint8_t flex_uint8_t;
typedef int16_t flex_int16_t;
typedef uint16_t flex_uint16_t;
typedef int32_t flex_int32_t;
typedef uint32_t flex_uint32_t;
# else
typedef unsigned char flex_uint8_t;
typedef short int flex_int16_t;
typedef unsigned short int flex_uint16_t;
# ifdef __STDC__
typedef signed char flex_int8_t;
/* ISO C only requires at least 16 bits for int. */
# ifdef __cplusplus
#include <climits>
# else
#include <limits.h>
# endif
# if UINT_MAX >= 4294967295
# define YYFLEX_INT32_DEFINED
typedef int flex_int32_t;
typedef unsigned int flex_uint32_t;
# endif
# else
typedef char flex_int8_t;
# endif
# ifndef YYFLEX_INT32_DEFINED
typedef long int flex_int32_t;
typedef unsigned long int flex_uint32_t;
# endif
# endif
#endif /* YYFLEX_INTTYPES_DEFINED */

1638
src/gen.c

File diff suppressed because it is too large Load Diff

View File

@ -20,7 +20,7 @@
#define _LIBGETTEXT_H 1
/* NLS can be disabled through the configure --disable-nls option. */
#ifdef ENABLE_NLS
#if ENABLE_NLS
/* Get declarations of GNU message catalog functions. */
# include <libintl.h>

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +0,0 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
Name: libfl
Description: Flex (the fast lexical analyzer) support library
Version: @PACKAGE_VERSION@
Libs: -L${libdir} -lfl

1904
src/main.c

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More