Files
IronCalc/ironcalc_base/expressions/lexer/index.html
2024-02-07 19:11:37 +00:00

33 lines
7.2 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A tokenizer for spreadsheet formulas."><title>ironcalc_base::expressions::lexer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="ironcalc_base" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button></nav><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../ironcalc_base/index.html">ironcalc_base</a><span class="version">0.1.0</span></h2></div><h2 class="location"><a href="#">Module lexer</a></h2><div class="sidebar-elems"><section><ul class="block"><li><a href="#modules">Modules</a></li><li><a href="#structs">Structs</a></li><li><a href="#enums">Enums</a></li></ul></section><h2><a href="../index.html">In ironcalc_base::expressions</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1>Module <a href="../../index.html">ironcalc_base</a>::<wbr><a href="../index.html">expressions</a>::<wbr><a class="mod" href="#">lexer</a><button id="copy-path" title="Copy item path to clipboard"><img src="../../../static.files/clipboard-7571035ce49a181d.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="src" href="../../../src/ironcalc_base/expressions/lexer/mod.rs.html#1-762">source</a> · <button id="toggle-all-docs" title="collapse all docs">[<span>&#x2212;</span>]</button></span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>A tokenizer for spreadsheet formulas.</p>
<p>This is meant to feed a formula parser.</p>
<p>You will need to instantiate it with a language and a locale.</p>
<p>It supports two working modes:</p>
<ol>
<li>A1 or display mode
This is for user formulas. References are like <code>D4</code>, <code>D$4</code> or <code>F5:T10</code></li>
<li>R1C1, internal or runtime mode
A reference like R1C1 refers to $A$1 and R3C4 to $D$4
R[2]C[5] refers to a cell two rows below and five columns to the right
It uses the en locale and language.
This is used internally at runtime.</li>
</ol>
<p>Formulas look different in different locales:</p>
<p>=IF(A1, B1, NA()) versus =IF(A1; B1; NA())</p>
<p>Also numbers are different:</p>
<p>1,123.45 versus 1.123,45</p>
<p>The names of the errors and functions are different in different languages,
but they stay the same in different locales.</p>
<p>Note that in IronCalc if you are using a locale different from en or a language different from en
you will still need the en locale and language because formulas are stored in that language and locale</p>
<h2 id="examples"><a href="#examples">Examples:</a></h2>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>ironcalc_base::expressions::lexer::{Lexer, LexerMode};
<span class="kw">use </span>ironcalc_base::expressions::token::{TokenType, OpCompare};
<span class="kw">use </span>ironcalc_base::locale::get_locale;
<span class="kw">use </span>ironcalc_base::language::get_language;
<span class="kw">let </span>locale = get_locale(<span class="string">&quot;en&quot;</span>).unwrap();
<span class="kw">let </span>language = get_language(<span class="string">&quot;en&quot;</span>).unwrap();
<span class="kw">let </span><span class="kw-2">mut </span>lexer = Lexer::new(<span class="string">&quot;=A1*SUM(Sheet2!C3:D5)&quot;</span>, LexerMode::A1, <span class="kw-2">&amp;</span>locale, <span class="kw-2">&amp;</span>language);
<span class="macro">assert_eq!</span>(lexer.next_token(), TokenType::Compare(OpCompare::Equal));
<span class="macro">assert!</span>(<span class="macro">matches!</span>(lexer.next_token(), TokenType::Reference { .. }));</code></pre></div>
</div></details><h2 id="modules" class="small-section-header"><a href="#modules">Modules</a></h2><ul class="item-table"><li><div class="item-name"><a class="mod" href="util/index.html" title="mod ironcalc_base::expressions::lexer::util">util</a></div></li></ul><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.Lexer.html" title="struct ironcalc_base::expressions::lexer::Lexer">Lexer</a></div><div class="desc docblock-short">Tokenize an input</div></li><li><div class="item-name"><a class="struct" href="struct.LexerError.html" title="struct ironcalc_base::expressions::lexer::LexerError">LexerError</a></div></li></ul><h2 id="enums" class="small-section-header"><a href="#enums">Enums</a></h2><ul class="item-table"><li><div class="item-name"><a class="enum" href="enum.LexerMode.html" title="enum ironcalc_base::expressions::lexer::LexerMode">LexerMode</a></div></li></ul></section></div></main></body></html>