"unexpected FLAG" was most unexpected

30 views
Skip to first unread message

Kevet Duncombe

unread,
Oct 21, 2022, 10:37:34 PM10/21/22
to Beancount
I created a short test file reading:

1970-01-01 commodity T
  name: "AT&T INC"
  kind: "STOCK"
  category: "LARGE"
  cusip: "00206R102"

1970-01-01 open Assets:Schwab:Equities:T T
1970-01-01 open Assets:Schwab:Cash USD

2011-02-19 * "Buy 100 T"
  Assets:Schwab:Equities:T 100 T {28.4575}
  Assets:Schwab:Cash -2845.75 USD

Running bean-check on it says:

.../test.bean:1:       syntax error, unexpected FLAG, expecting CURRENCY

.../test.bean:7:       syntax error, unexpected FLAG, expecting end of file or EOL

.../test.bean:11:      syntax error, unexpected FLAG, expecting end of file or EOL or ATAT or AT

Can someone tell me what I'm misunderstanding? Thanks

Red S

unread,
Oct 21, 2022, 10:53:46 PM10/21/22
to Beancount
Apparently 'T' is too short for a commodity. I'm guessing the parser assumes it's a flag instead. Replace it with 'TT', and the whole thing should work.

The doc doesn't seem to mention this though.



Martin Blais

unread,
Oct 21, 2022, 10:54:03 PM10/21/22
to bean...@googlegroups.com
Currency needs two characters in v2.

 /* Currencies.                                                                          
  *                                                                                      
  * A currency (or sometimes called "commodities") is a string which                      
  * - Begins with either a letter or a slash (/) character.                              
  * - Contains at least one letter.                                                      
  * - Ends with either a letter or a number.                                              
  * - May contain the following special characters within: period (.),                    
  *   underscore (_), dash (-), or quote (').                                            
  * The pattern has to be kept in sync with beancount.core.amount.CURRENCY_RE.            
  *                                                                                      
  * In Beancount v3 (C++ version), a single character (e.g. "V" for Visa) is a            
  * valid currency. v2 uses the GNU flex scanner which does not have the                  
  * lookahead capability required to make this possible but the v3 C++ scanner            
  * uses Genivia's RE-Flex which supports a lookahead and it will.                        
  *                                                                                      
  * Example currencies:                                                                  
  *   "AAPL" (stock)                                                                      
  *   "V" (single-character stock)                                                        
  *   "NT.TO" (stock on another market)                                                  
  *   "TLT_040921C144" (equity option)                                                    
  *   "/6J" (currency futures)                                                            
  *   "/NQH21" (commodity futures)                                                        
  *   "/NQH21_QNEG21C13100" (futures option)                                              
  *                                                                                      
  * Counter-examples:                                                                    
  * - "/6.3": If a currency begins with a slash, the following pattern has to            
  *   include at least one letter. "/6J" is a valid currency, but "/6.3" is not.          
  * - "CAC_": A currency cannot end with a special character; it has to end with          
  *   either an uppercase letter or a number ("C345" is a valid currency, but            
  *   "C_" is not).                                                                      
  *                                                                                      
  * Note: In this scanner we locate the rule above that matching SLASH on                
  * purpose so that a name starting with '/' for a futures contract will match            
  * with higher priority than that matching a divide '/' character.                      
  *                                                                                      
  * Keep in sync with {edefe3fbe907}.                                                    
  */
[A-Z][A-Z0-9\'\.\_\-]*[A-Z0-9] {
    return TOKEN(CURRENCY, yytext, yyleng);
}
\/[A-Z0-9\'\.\_\-]*[A-Z]([A-Z0-9\'\.\_\-]*[A-Z0-9])? {
    return TOKEN(CURRENCY, yytext, yyleng);
}


--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/6c728cfd-71eb-46dd-b687-6db2f5cf682an%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages