I need to implement a lexical analyzer and I need a data structure to save the keywords. I was advised to use a hash table to keep the keywords and one suggestion was to use C# Hash Table form System.Collections. But I have a problem: to use this hash table I need a key and an item. I have only the keyword. Should I use the keyword as key or as item,or as both? And since the keywords are different can I use another data structure, for example a binary tree? My real interest is this: how does a compiler implement this issue?
Which is the key and which is the item for a keywords hash table?
283 Views Asked by Radu Mardari At
1
There are 1 best solutions below
Related Questions in C#
- Passing arguments to main in C using Eclipse
- kernel module does not print packet info
- error C2016 (C requires that a struct or union has at least one member) and structs typedefs
- Drawing with ncurses, sockets and fork
- How to catch delay-import dll errors (missing dll or symbol) in MinGW(-w64)?
- Configured TTL for A record(s) backing CNAME records
- Allocating memory for pointers inside structures in functions
- Finding articulation point of undirected graph by DFS
- C first fgets() is being skipped while the second runs
- C std library don't appear to be linked in object file
- gcc static library compilation
- How to do a case-insensitive string comparison?
- C programming: Create and write 2D array of files as function
- How to read a file then store to array and then print?
- Function timeouts in C and thread
Related Questions in DATA-STRUCTURES
- Borrow mutable and immutable reference in the same block
- Why would one use a heap over a self balancing binary search tree?
- Reverse linked list in java
- Doubly Linked List, MergeSort, getting undefined and unreliable results
- Difference in performance of adding elements in Treeset directly vs transferring from arraylist?
- Why the leaf node in red black tree is NIL?
- When to use double pointers?
- find the biggest possible number comprised of the digits of of a given number
- Data structure to efficiently merge up to n elements of multiset
- How to convert a string to a key for hash table
- Implement queues in java
- What does it mean to "close over" something?
- How to use hash tables when amount of slots is unknown?
- Unknown Data Structure?
- how to find type of connection between the social network entities
Related Questions in COMPILER-CONSTRUCTION
- Is the compiler Xcode uses to produce Assembly code a bad compiler?
- How do compilers store hundreds of variables in only a few registers?
- Where to patch back the information gathered during program analysis
- Assignment Insertion in ROSE compiler after AssignOp
- memory layout of a multiple-inherited object in C++
- How to use my written compiler to read files on web?
- a LEX program to identify keywords and convert it into uppercase
- Identifier terminal except certain keywords
- Calling Scala compiler's AST from Java
- Computing the FOLLOW() set of a grammar
- JavaCC and Unicode issue. Why \u696d cannot be managed in JavaCC although it belong to the range "\u4e00"-"\u9fff"
- Three-address code and symbol tables
- Delegate caching behavior changes in Roslyn
- Get delimiter in Irony
- Compiler Errors including initializer before '<' token
Related Questions in COMPILATION
- gcc static library compilation
- AngularJS directive within ng-if won't run
- How do I compile QScintilla and Eric6 on Linux?
- Troubleshoot slow compilation
- C ignoring incrementation
- Compiling or using RtMidi on Windows 7
- within a project can I compile a module and interactively load the compiled module within ghci?
- C++ / compilation of a program fatal error: QtGui/qwidget.h: No such file or directory
- What do I have to consider when putting all code in the header?
- how do i compile a file with plugin stuff?
- Error when compiling simple LLVM example with Mingw
- Ant debug and ant release failed
- Compilation failure in JNativeHook
- error: C1083: Cannot open include file: 'ui_MainWindow.h': No such file or directory, Qt Creator
- Netbeans not using available memory during compilation
Related Questions in LEXICAL-ANALYSIS
- How to define a Regex in StandardTokenParsers to identify path?
- How to solve an error related to creating parser from regex?
- In which situation stringLit in StandardTokenParsers doesn't work?
- How to instantiate lexical.Scanner in a JavaTokenParsers class?
- Bash: Read args from stdin into array
- Lexical analyser : how to identify the end of a token
- Validating an expression
- antlr4: perplexed about whitespace handling
- How to use the ANTLR 4 TestRig to show which lexer rule is used when tokenizing input?
- How can I write a regular expression to recognize the plus operator and the plus sign?
- Which is the key and which is the item for a keywords hash table?
- Lexical Analysis in GCC for C language
- Java CUP and JFlex Interaction
- Efficiently applying text widget tags in tkinter text widgets
- Creating Lexical Analyzer for java
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
In general, keywords have only syntactic value, so in most compilers they are only used to select an appropriate grammatical rule. Their "value", as such, is consumed immediately. Since their identity is the only useful information, it is probably more appropriate to use a
HashSetthan aHashMap.However, there might be a set of keywords which are syntactically identical, forming what is effectively an enumeration type. In such cases, the enumeration value could be the value associated with the keyword.
For a handbuilt lexical analyzer, the use of a hashset or other such datastructure may prove simple, but most compilers will actually compile the keywords along with the other lexical token patterns into a finite state automaton. This allows the keywords to be recognized during the lexical scan, without any external datastructure.
Regardless, in almost all languages the set of keywords is fixed and so it is most appropriate to use an efficient datastructure compiled into the lexical scanner. For example, instead of a binary tree, it would be reasonable to use a sorted static vector of strings which could be binary searched. Alternatively, a preconstructed trie could be used; this would be almost equivalent to the finite state automaton referred to above.